[STATEMENT]
theorem Dirichlet_L_Re_ge_1_nonzero_nonprincipal:
  assumes "\<chi> \<noteq> \<chi>\<^sub>0" and "Re u \<ge> 1"
  shows   "Dirichlet_L n \<chi> u \<noteq> 0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Dirichlet_L n \<chi> u \<noteq> 0
[PROOF STEP]
proof (cases "Re u > 1")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. 1 < Re u \<Longrightarrow> Dirichlet_L n \<chi> u \<noteq> 0
 2. \<not> 1 < Re u \<Longrightarrow> Dirichlet_L n \<chi> u \<noteq> 0
[PROOF STEP]
include dcharacter_syntax
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. 1 < Re u \<Longrightarrow> Dirichlet_L n \<chi> u \<noteq> 0
 2. \<not> 1 < Re u \<Longrightarrow> Dirichlet_L n \<chi> u \<noteq> 0
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
\<not> 1 < Re u

goal (2 subgoals):
 1. 1 < Re u \<Longrightarrow> Dirichlet_L n \<chi> u \<noteq> 0
 2. \<not> 1 < Re u \<Longrightarrow> Dirichlet_L n \<chi> u \<noteq> 0
[PROOF STEP]
define a where "a = -Im u"
[PROOF STATE]
proof (state)
this:
a = - Im u

goal (2 subgoals):
 1. 1 < Re u \<Longrightarrow> Dirichlet_L n \<chi> u \<noteq> 0
 2. \<not> 1 < Re u \<Longrightarrow> Dirichlet_L n \<chi> u \<noteq> 0
[PROOF STEP]
from False and assms
[PROOF STATE]
proof (chain)
picking this:
\<not> 1 < Re u
\<chi> \<noteq> \<chi>\<^sub>0
1 \<le> Re u
[PROOF STEP]
have "Re u = 1"
[PROOF STATE]
proof (prove)
using this:
\<not> 1 < Re u
\<chi> \<noteq> \<chi>\<^sub>0
1 \<le> Re u

goal (1 subgoal):
 1. Re u = 1
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
Re u = 1

goal (2 subgoals):
 1. 1 < Re u \<Longrightarrow> Dirichlet_L n \<chi> u \<noteq> 0
 2. \<not> 1 < Re u \<Longrightarrow> Dirichlet_L n \<chi> u \<noteq> 0
[PROOF STEP]
hence [simp]: "u = 1 - \<i> * a"
[PROOF STATE]
proof (prove)
using this:
Re u = 1

goal (1 subgoal):
 1. u = 1 - \<i> * complex_of_real a
[PROOF STEP]
by (simp add: a_def complex_eq_iff)
[PROOF STATE]
proof (state)
this:
u = 1 - \<i> * complex_of_real a

goal (2 subgoals):
 1. 1 < Re u \<Longrightarrow> Dirichlet_L n \<chi> u \<noteq> 0
 2. \<not> 1 < Re u \<Longrightarrow> Dirichlet_L n \<chi> u \<noteq> 0
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Dirichlet_L n \<chi> u \<noteq> 0
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
assume "Dirichlet_L n \<chi> u = 0"
[PROOF STATE]
proof (state)
this:
Dirichlet_L n \<chi> u = 0

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
hence zero: "Dirichlet_L n \<chi> (1 - \<i> * a) = 0"
[PROOF STATE]
proof (prove)
using this:
Dirichlet_L n \<chi> u = 0

goal (1 subgoal):
 1. Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a) = 0
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a) = 0

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
define \<chi>' where [simp]: "\<chi>' = inv_character \<chi>"

    \<comment> \<open>We define the function $Z(s)$, which is the product of all the Dirichlet $L$ functions,
        and its Dirichlet series. Then, similarly to the proof of the non-vanishing of the
        Riemann $\zeta$ function for $\mathfrak{R}(s) \geq 1$, we define
        $Q(s) = Z(s) Z(s + ia) Z(s - ia)$. Our objective is to show that the Dirichlet series
        of this function $Q$ converges everywhere.\<close>
[PROOF STATE]
proof (state)
this:
\<chi>' = inv_character \<chi>

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
define Z where "Z = (\<lambda>s. \<Prod>\<chi>\<in>dcharacters n. Dirichlet_L n \<chi> s)"
[PROOF STATE]
proof (state)
this:
Z = (\<lambda>s. \<Prod>\<chi>\<in>dcharacters n. Dirichlet_L n \<chi> s)

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
define Z_fds where "Z_fds = (\<Prod>\<chi>\<in>dcharacters n. fds \<chi>)"
[PROOF STATE]
proof (state)
this:
Z_fds = prod fds (dcharacters n)

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
define Q where "Q = (\<lambda>s. Z s ^ 2 * Z (s + \<i> * a) * Z (s - \<i> * a))"
[PROOF STATE]
proof (state)
this:
Q = (\<lambda>s. (Z s)\<^sup>2 * Z (s + \<i> * complex_of_real a) * Z (s - \<i> * complex_of_real a))

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
define Q_fds where "Q_fds = Z_fds ^ 2 * fds_shift (\<i> * a) Z_fds * fds_shift (-\<i> * a) Z_fds"
[PROOF STATE]
proof (state)
this:
Q_fds = Z_fds\<^sup>2 * fds_shift (\<i> * complex_of_real a) Z_fds * fds_shift (- \<i> * complex_of_real a) Z_fds

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
let ?sings = "{1, 1 + \<i> * a, 1 - \<i> * a}"

    \<comment> \<open>Some preliminary auxiliary facts\<close>
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
define P where "P = (\<lambda>s. (\<Prod>x\<in>{p. prime p \<and> p dvd n}. 1 - 1 / of_nat x powr s :: complex))"
[PROOF STATE]
proof (state)
this:
P = (\<lambda>s. \<Prod>x\<in>{p. prime p \<and> p dvd n}. 1 - 1 / of_nat x powr s)

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
have \<chi>\<^sub>0: "\<chi>\<^sub>0 \<in> dcharacters n"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<chi>\<^sub>0 \<in> dcharacters n
[PROOF STEP]
by (auto simp: principal.dcharacter_axioms dcharacters_def)
[PROOF STATE]
proof (state)
this:
\<chi>\<^sub>0 \<in> dcharacters n

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
have [continuous_intros]: "continuous_on A P" for A
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. continuous_on A P
[PROOF STEP]
unfolding P_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. continuous_on A (\<lambda>s. \<Prod>x\<in>{p. prime p \<and> p dvd n}. 1 - 1 / of_nat x powr s)
[PROOF STEP]
by (intro continuous_intros) (auto simp: prime_gt_0_nat)
[PROOF STATE]
proof (state)
this:
continuous_on ?A1 P

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
from this[of UNIV]
[PROOF STATE]
proof (chain)
picking this:
continuous_on UNIV P
[PROOF STEP]
have [continuous_intros]: "isCont P s" for s
[PROOF STATE]
proof (prove)
using this:
continuous_on UNIV P

goal (1 subgoal):
 1. isCont P s
[PROOF STEP]
by (auto simp: continuous_on_eq_continuous_at)
[PROOF STATE]
proof (state)
this:
isCont P ?s1

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
have \<chi>: "\<chi> \<in> dcharacters n" "\<chi>' \<in> dcharacters n"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<chi> \<in> dcharacters n &&& \<chi>' \<in> dcharacters n
[PROOF STEP]
using dcharacter_axioms
[PROOF STATE]
proof (prove)
using this:
dcharacter n \<chi>

goal (1 subgoal):
 1. \<chi> \<in> dcharacters n &&& \<chi>' \<in> dcharacters n
[PROOF STEP]
by (auto simp add: dcharacters_def dcharacter.dcharacter_inv_character)
[PROOF STATE]
proof (state)
this:
\<chi> \<in> dcharacters n
\<chi>' \<in> dcharacters n

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
from zero dcharacter.cnj_Dirichlet_L[of n \<chi> "1 - \<i> * a"] dcharacter_axioms
[PROOF STATE]
proof (chain)
picking this:
Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a) = 0
dcharacter n \<chi> \<Longrightarrow> cnj (Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a)) = Dirichlet_L n (inv_character \<chi>) (cnj (1 - \<i> * complex_of_real a))
dcharacter n \<chi>
[PROOF STEP]
have zero': "Dirichlet_L n \<chi>' (1 + \<i> * a) = 0"
[PROOF STATE]
proof (prove)
using this:
Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a) = 0
dcharacter n \<chi> \<Longrightarrow> cnj (Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a)) = Dirichlet_L n (inv_character \<chi>) (cnj (1 - \<i> * complex_of_real a))
dcharacter n \<chi>

goal (1 subgoal):
 1. Dirichlet_L n \<chi>' (1 + \<i> * complex_of_real a) = 0
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
Dirichlet_L n \<chi>' (1 + \<i> * complex_of_real a) = 0

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
have "Z = (\<lambda>s. Dirichlet_L n \<chi>\<^sub>0 s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0}. Dirichlet_L n \<chi> s))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Z = (\<lambda>s. Dirichlet_L n \<chi>\<^sub>0 s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0}. Dirichlet_L n \<chi> s))
[PROOF STEP]
unfolding Z_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>s. \<Prod>\<chi>\<in>dcharacters n. Dirichlet_L n \<chi> s) = (\<lambda>s. Dirichlet_L n \<chi>\<^sub>0 s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0}. Dirichlet_L n \<chi> s))
[PROOF STEP]
using \<chi>\<^sub>0
[PROOF STATE]
proof (prove)
using this:
\<chi>\<^sub>0 \<in> dcharacters n

goal (1 subgoal):
 1. (\<lambda>s. \<Prod>\<chi>\<in>dcharacters n. Dirichlet_L n \<chi> s) = (\<lambda>s. Dirichlet_L n \<chi>\<^sub>0 s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0}. Dirichlet_L n \<chi> s))
[PROOF STEP]
by (intro ext prod.remove) auto
[PROOF STATE]
proof (state)
this:
Z = (\<lambda>s. Dirichlet_L n \<chi>\<^sub>0 s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0}. Dirichlet_L n \<chi> s))

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
Z = (\<lambda>s. Dirichlet_L n \<chi>\<^sub>0 s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0}. Dirichlet_L n \<chi> s))

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
have "\<dots> = (\<lambda>s. P s * zeta s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0}. Dirichlet_L n \<chi> s))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>s. Dirichlet_L n \<chi>\<^sub>0 s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0}. Dirichlet_L n \<chi> s)) = (\<lambda>s. P s * zeta s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0}. Dirichlet_L n \<chi> s))
[PROOF STEP]
by (simp add: Dirichlet_L_principal P_def)
[PROOF STATE]
proof (state)
this:
(\<lambda>s. Dirichlet_L n \<chi>\<^sub>0 s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0}. Dirichlet_L n \<chi> s)) = (\<lambda>s. P s * zeta s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0}. Dirichlet_L n \<chi> s))

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
Z = (\<lambda>s. P s * zeta s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0}. Dirichlet_L n \<chi> s))
[PROOF STEP]
have Z_eq: "Z = (\<lambda>s. P s * zeta s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0}. Dirichlet_L n \<chi> s))"
[PROOF STATE]
proof (prove)
using this:
Z = (\<lambda>s. P s * zeta s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0}. Dirichlet_L n \<chi> s))

goal (1 subgoal):
 1. Z = (\<lambda>s. P s * zeta s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0}. Dirichlet_L n \<chi> s))
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
Z = (\<lambda>s. P s * zeta s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0}. Dirichlet_L n \<chi> s))

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
have Z_eq': "Z = (\<lambda>s. P s * zeta s * Dirichlet_L n \<chi> s *
                       (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> s))"
      if "\<chi> \<in> dcharacters n" "\<chi> \<noteq> \<chi>\<^sub>0" for \<chi>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Z = (\<lambda>s. P s * zeta s * Dirichlet_L n \<chi> s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> s))
[PROOF STEP]
proof (rule ext, goal_cases)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>s. Z s = P s * zeta s * Dirichlet_L n \<chi> s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> s)
[PROOF STEP]
case (1 s)
[PROOF STATE]
proof (state)
this:

goal (1 subgoal):
 1. \<And>s. Z s = P s * zeta s * Dirichlet_L n \<chi> s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> s)
[PROOF STEP]
from that
[PROOF STATE]
proof (chain)
picking this:
\<chi> \<in> dcharacters n
\<chi> \<noteq> \<chi>\<^sub>0
[PROOF STEP]
have \<chi>: "\<chi> \<in> dcharacters n"
[PROOF STATE]
proof (prove)
using this:
\<chi> \<in> dcharacters n
\<chi> \<noteq> \<chi>\<^sub>0

goal (1 subgoal):
 1. \<chi> \<in> dcharacters n
[PROOF STEP]
by (simp add: dcharacters_def)
[PROOF STATE]
proof (state)
this:
\<chi> \<in> dcharacters n

goal (1 subgoal):
 1. \<And>s. Z s = P s * zeta s * Dirichlet_L n \<chi> s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> s)
[PROOF STEP]
have "Z s = P s * zeta s *
              (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0}. Dirichlet_L n \<chi> s)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Z s = P s * zeta s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0}. Dirichlet_L n \<chi> s)
[PROOF STEP]
by (simp add: Z_eq)
[PROOF STATE]
proof (state)
this:
Z s = P s * zeta s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0}. Dirichlet_L n \<chi> s)

goal (1 subgoal):
 1. \<And>s. Z s = P s * zeta s * Dirichlet_L n \<chi> s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> s)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
Z s = P s * zeta s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0}. Dirichlet_L n \<chi> s)

goal (1 subgoal):
 1. \<And>s. Z s = P s * zeta s * Dirichlet_L n \<chi> s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> s)
[PROOF STEP]
have "(\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0}. Dirichlet_L n \<chi> s) = Dirichlet_L n \<chi> s *
                   (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi>  s)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0}. Dirichlet_L n \<chi> s) = Dirichlet_L n \<chi> s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> s)
[PROOF STEP]
using assms \<chi> that
[PROOF STATE]
proof (prove)
using this:
\<chi> \<noteq> \<chi>\<^sub>0
1 \<le> Re u
\<chi> \<in> dcharacters n
\<chi> \<in> dcharacters n
\<chi> \<noteq> \<chi>\<^sub>0

goal (1 subgoal):
 1. (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0}. Dirichlet_L n \<chi> s) = Dirichlet_L n \<chi> s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> s)
[PROOF STEP]
by (intro prod.remove) auto
[PROOF STATE]
proof (state)
this:
(\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0}. Dirichlet_L n \<chi> s) = Dirichlet_L n \<chi> s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> s)

goal (1 subgoal):
 1. \<And>s. Z s = P s * zeta s * Dirichlet_L n \<chi> s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> s)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
Z s = P s * zeta s * (Dirichlet_L n \<chi> s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> s))
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
Z s = P s * zeta s * (Dirichlet_L n \<chi> s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> s))

goal (1 subgoal):
 1. Z s = P s * zeta s * Dirichlet_L n \<chi> s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> s)
[PROOF STEP]
by (simp add: mult_ac)
[PROOF STATE]
proof (state)
this:
Z s = P s * zeta s * Dirichlet_L n \<chi> s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> s)

goal:
No subgoals!
[PROOF STEP]
qed

    \<comment> \<open>We again show that @{term Q} is locally bounded everywhere by showing that every
        singularity is cancelled by some zero. Since now, @{term a} can be zero, we do a
        case distinction here to make things a bit easier.\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>?\<chi>1 \<in> dcharacters n; ?\<chi>1 \<noteq> \<chi>\<^sub>0\<rbrakk> \<Longrightarrow> Z = (\<lambda>s. P s * zeta s * Dirichlet_L n ?\<chi>1 s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {?\<chi>1}. Dirichlet_L n \<chi> s))

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
have Q_bigo_1: "Q \<in> O[at s](\<lambda>_. 1)" for s
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
proof (cases "a = 0")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. a = 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 2. a \<noteq> 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
a = 0

goal (2 subgoals):
 1. a = 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 2. a \<noteq> 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
have "(\<lambda>s. Dirichlet_L n \<chi> s - Dirichlet_L n \<chi> 1) \<in> O[at 1](\<lambda>s. s - 1)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>s. Dirichlet_L n \<chi> s - Dirichlet_L n \<chi> 1) \<in> O[at 1](\<lambda>s. s - 1)
[PROOF STEP]
using \<chi> assms n
[PROOF STATE]
proof (prove)
using this:
\<chi> \<in> dcharacters n
\<chi>' \<in> dcharacters n
\<chi> \<noteq> \<chi>\<^sub>0
1 \<le> Re u
1 < n

goal (1 subgoal):
 1. (\<lambda>s. Dirichlet_L n \<chi> s - Dirichlet_L n \<chi> 1) \<in> O[at 1](\<lambda>s. s - 1)
[PROOF STEP]
by (intro taylor_bigo_linear holomorphic_on_imp_differentiable_at[of _ UNIV]
                             holomorphic_intros) (auto simp: dcharacters_def)
[PROOF STATE]
proof (state)
this:
(\<lambda>s. Dirichlet_L n \<chi> s - Dirichlet_L n \<chi> 1) \<in> O[at 1](\<lambda>s. s - 1)

goal (2 subgoals):
 1. a = 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 2. a \<noteq> 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
hence *: "Dirichlet_L n \<chi> \<in> O[at 1](\<lambda>s. s - 1)"
[PROOF STATE]
proof (prove)
using this:
(\<lambda>s. Dirichlet_L n \<chi> s - Dirichlet_L n \<chi> 1) \<in> O[at 1](\<lambda>s. s - 1)

goal (1 subgoal):
 1. Dirichlet_L n \<chi> \<in> O[at 1](\<lambda>s. s - 1)
[PROOF STEP]
using zero True
[PROOF STATE]
proof (prove)
using this:
(\<lambda>s. Dirichlet_L n \<chi> s - Dirichlet_L n \<chi> 1) \<in> O[at 1](\<lambda>s. s - 1)
Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a) = 0
a = 0

goal (1 subgoal):
 1. Dirichlet_L n \<chi> \<in> O[at 1](\<lambda>s. s - 1)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
Dirichlet_L n \<chi> \<in> O[at 1](\<lambda>s. s - 1)

goal (2 subgoals):
 1. a = 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 2. a \<noteq> 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
have "Z = (\<lambda>s. P s * zeta s * Dirichlet_L n \<chi> s *
                  (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> s))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Z = (\<lambda>s. P s * zeta s * Dirichlet_L n \<chi> s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> s))
[PROOF STEP]
using \<chi> assms
[PROOF STATE]
proof (prove)
using this:
\<chi> \<in> dcharacters n
\<chi>' \<in> dcharacters n
\<chi> \<noteq> \<chi>\<^sub>0
1 \<le> Re u

goal (1 subgoal):
 1. Z = (\<lambda>s. P s * zeta s * Dirichlet_L n \<chi> s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> s))
[PROOF STEP]
by (intro Z_eq') auto
[PROOF STATE]
proof (state)
this:
Z = (\<lambda>s. P s * zeta s * Dirichlet_L n \<chi> s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> s))

goal (2 subgoals):
 1. a = 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 2. a \<noteq> 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
Z = (\<lambda>s. P s * zeta s * Dirichlet_L n \<chi> s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> s))

goal (2 subgoals):
 1. a = 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 2. a \<noteq> 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
have "\<dots> \<in> O[at 1](\<lambda>s. 1 * (1 / (s - 1)) * (s - 1) * 1)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>s. P s * zeta s * Dirichlet_L n \<chi> s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> s)) \<in> O[at 1](\<lambda>s. 1 * (1 / (s - 1)) * (s - 1) * 1)
[PROOF STEP]
using n \<chi>
[PROOF STATE]
proof (prove)
using this:
1 < n
\<chi> \<in> dcharacters n
\<chi>' \<in> dcharacters n

goal (1 subgoal):
 1. (\<lambda>s. P s * zeta s * Dirichlet_L n \<chi> s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> s)) \<in> O[at 1](\<lambda>s. 1 * (1 / (s - 1)) * (s - 1) * 1)
[PROOF STEP]
by (intro landau_o.big.mult continuous_imp_bigo_1 zeta_bigo_at_1 continuous_intros *)
           (auto simp: dcharacters_def)
[PROOF STATE]
proof (state)
this:
(\<lambda>s. P s * zeta s * Dirichlet_L n \<chi> s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> s)) \<in> O[at 1](\<lambda>s. 1 * (1 / (s - 1)) * (s - 1) * 1)

goal (2 subgoals):
 1. a = 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 2. a \<noteq> 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
(\<lambda>s. P s * zeta s * Dirichlet_L n \<chi> s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> s)) \<in> O[at 1](\<lambda>s. 1 * (1 / (s - 1)) * (s - 1) * 1)

goal (2 subgoals):
 1. a = 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 2. a \<noteq> 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
have "(\<lambda>s::complex. 1 * (1 / (s - 1)) * (s - 1) * 1) \<in> \<Theta>[at 1](\<lambda>_. 1)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>s. 1 * (1 / (s - 1)) * (s - 1) * 1) \<in> \<Theta>[at 1](\<lambda>_. 1)
[PROOF STEP]
by (intro bigthetaI_cong) (auto simp: eventually_at_filter)
[PROOF STATE]
proof (state)
this:
(\<lambda>s. 1 * (1 / (s - 1)) * (s - 1) * 1) \<in> \<Theta>[at 1](\<lambda>_. 1)

goal (2 subgoals):
 1. a = 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 2. a \<noteq> 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
Z \<in> O[at 1](\<lambda>_. 1)
[PROOF STEP]
have Z_at_1: "Z \<in> O[at 1](\<lambda>_. 1)"
[PROOF STATE]
proof (prove)
using this:
Z \<in> O[at 1](\<lambda>_. 1)

goal (1 subgoal):
 1. Z \<in> O[at 1](\<lambda>_. 1)
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
Z \<in> O[at 1](\<lambda>_. 1)

goal (2 subgoals):
 1. a = 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 2. a \<noteq> 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
have "Z \<in> O[at s](\<lambda>_. 1)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Z \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
proof (cases "s = 1")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. s = 1 \<Longrightarrow> Z \<in> O[at s](\<lambda>_. 1)
 2. s \<noteq> 1 \<Longrightarrow> Z \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
s \<noteq> 1

goal (2 subgoals):
 1. s = 1 \<Longrightarrow> Z \<in> O[at s](\<lambda>_. 1)
 2. s \<noteq> 1 \<Longrightarrow> Z \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
s \<noteq> 1

goal (1 subgoal):
 1. Z \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
unfolding Z_def
[PROOF STATE]
proof (prove)
using this:
s \<noteq> 1

goal (1 subgoal):
 1. (\<lambda>s. \<Prod>\<chi>\<in>dcharacters n. Dirichlet_L n \<chi> s) \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
using n \<chi>
[PROOF STATE]
proof (prove)
using this:
s \<noteq> 1
1 < n
\<chi> \<in> dcharacters n
\<chi>' \<in> dcharacters n

goal (1 subgoal):
 1. (\<lambda>s. \<Prod>\<chi>\<in>dcharacters n. Dirichlet_L n \<chi> s) \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
by (intro continuous_imp_bigo_1 continuous_intros) (auto simp: dcharacters_def)
[PROOF STATE]
proof (state)
this:
Z \<in> O[at s](\<lambda>_. 1)

goal (1 subgoal):
 1. s = 1 \<Longrightarrow> Z \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
qed (insert Z_at_1, auto)
[PROOF STATE]
proof (state)
this:
Z \<in> O[at s](\<lambda>_. 1)

goal (2 subgoals):
 1. a = 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 2. a \<noteq> 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
from \<open>a = 0\<close>
[PROOF STATE]
proof (chain)
picking this:
a = 0
[PROOF STEP]
have "Q = (\<lambda>s. Z s * Z s * Z s * Z s)"
[PROOF STATE]
proof (prove)
using this:
a = 0

goal (1 subgoal):
 1. Q = (\<lambda>s. Z s * Z s * Z s * Z s)
[PROOF STEP]
by (simp add: Q_def power2_eq_square)
[PROOF STATE]
proof (state)
this:
Q = (\<lambda>s. Z s * Z s * Z s * Z s)

goal (2 subgoals):
 1. a = 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 2. a \<noteq> 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
Q = (\<lambda>s. Z s * Z s * Z s * Z s)

goal (2 subgoals):
 1. a = 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 2. a \<noteq> 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
have "\<dots> \<in> O[at s](\<lambda>_. 1 * 1 * 1 * 1)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>s. Z s * Z s * Z s * Z s) \<in> O[at s](\<lambda>_. 1 * 1 * 1 * 1)
[PROOF STEP]
by (intro landau_o.big.mult) fact+
[PROOF STATE]
proof (state)
this:
(\<lambda>s. Z s * Z s * Z s * Z s) \<in> O[at s](\<lambda>_. 1 * 1 * 1 * 1)

goal (2 subgoals):
 1. a = 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 2. a \<noteq> 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
Q \<in> O[at s](\<lambda>_. 1 * 1 * 1 * 1)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
Q \<in> O[at s](\<lambda>_. 1 * 1 * 1 * 1)

goal (1 subgoal):
 1. Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
Q \<in> O[at s](\<lambda>_. 1)

goal (1 subgoal):
 1. a \<noteq> 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. a \<noteq> 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
a \<noteq> 0

goal (1 subgoal):
 1. a \<noteq> 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
have bigo1: "(\<lambda>s. Z s * Z (s - \<i> * a)) \<in> O[at 1](\<lambda>_. 1)"
        if "Dirichlet_L n \<chi> (1 - \<i> * a) = 0" "a \<noteq> 0" "\<chi> \<in> dcharacters n" "\<chi> \<noteq> \<chi>\<^sub>0"
        for a :: real and \<chi>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>_. 1)
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>_. 1)
[PROOF STEP]
have "(\<lambda>s. Dirichlet_L n \<chi> (s - \<i> * a) - Dirichlet_L n \<chi> (1 - \<i> * a)) \<in> O[at 1](\<lambda>s. s - 1)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>s. Dirichlet_L n \<chi> (s - \<i> * complex_of_real a) - Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>s. s - 1)
[PROOF STEP]
using assms n that
[PROOF STATE]
proof (prove)
using this:
\<chi> \<noteq> \<chi>\<^sub>0
1 \<le> Re u
1 < n
Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a) = 0
a \<noteq> 0
\<chi> \<in> dcharacters n
\<chi> \<noteq> \<chi>\<^sub>0

goal (1 subgoal):
 1. (\<lambda>s. Dirichlet_L n \<chi> (s - \<i> * complex_of_real a) - Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>s. s - 1)
[PROOF STEP]
by (intro taylor_bigo_linear holomorphic_on_imp_differentiable_at[of _ UNIV]
                    holomorphic_intros) (auto simp: dcharacters_def)
[PROOF STATE]
proof (state)
this:
(\<lambda>s. Dirichlet_L n \<chi> (s - \<i> * complex_of_real a) - Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>s. s - 1)

goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>_. 1)
[PROOF STEP]
hence *: "(\<lambda>s. Dirichlet_L n \<chi> (s - \<i> * a)) \<in> O[at 1](\<lambda>s. s - 1)"
[PROOF STATE]
proof (prove)
using this:
(\<lambda>s. Dirichlet_L n \<chi> (s - \<i> * complex_of_real a) - Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>s. s - 1)

goal (1 subgoal):
 1. (\<lambda>s. Dirichlet_L n \<chi> (s - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>s. s - 1)
[PROOF STEP]
using that
[PROOF STATE]
proof (prove)
using this:
(\<lambda>s. Dirichlet_L n \<chi> (s - \<i> * complex_of_real a) - Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>s. s - 1)
Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a) = 0
a \<noteq> 0
\<chi> \<in> dcharacters n
\<chi> \<noteq> \<chi>\<^sub>0

goal (1 subgoal):
 1. (\<lambda>s. Dirichlet_L n \<chi> (s - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>s. s - 1)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
(\<lambda>s. Dirichlet_L n \<chi> (s - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>s. s - 1)

goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>_. 1)
[PROOF STEP]
have "(\<lambda>s. Z (s - \<i>*a)) = (\<lambda>s. P (s - \<i>*a) * zeta (s - \<i>*a) * Dirichlet_L n \<chi> (s - \<i>*a)
                     * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi>  (s - \<i>*a)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>s. Z (s - \<i> * complex_of_real a)) = (\<lambda>s. P (s - \<i> * complex_of_real a) * zeta (s - \<i> * complex_of_real a) * Dirichlet_L n \<chi> (s - \<i> * complex_of_real a) * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> (s - \<i> * complex_of_real a)))
[PROOF STEP]
using that
[PROOF STATE]
proof (prove)
using this:
Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a) = 0
a \<noteq> 0
\<chi> \<in> dcharacters n
\<chi> \<noteq> \<chi>\<^sub>0

goal (1 subgoal):
 1. (\<lambda>s. Z (s - \<i> * complex_of_real a)) = (\<lambda>s. P (s - \<i> * complex_of_real a) * zeta (s - \<i> * complex_of_real a) * Dirichlet_L n \<chi> (s - \<i> * complex_of_real a) * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> (s - \<i> * complex_of_real a)))
[PROOF STEP]
by (subst Z_eq'[of \<chi>]) auto
[PROOF STATE]
proof (state)
this:
(\<lambda>s. Z (s - \<i> * complex_of_real a)) = (\<lambda>s. P (s - \<i> * complex_of_real a) * zeta (s - \<i> * complex_of_real a) * Dirichlet_L n \<chi> (s - \<i> * complex_of_real a) * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> (s - \<i> * complex_of_real a)))

goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>_. 1)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
(\<lambda>s. Z (s - \<i> * complex_of_real a)) = (\<lambda>s. P (s - \<i> * complex_of_real a) * zeta (s - \<i> * complex_of_real a) * Dirichlet_L n \<chi> (s - \<i> * complex_of_real a) * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> (s - \<i> * complex_of_real a)))

goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>_. 1)
[PROOF STEP]
have "\<dots> \<in> O[at 1](\<lambda>s. 1 * 1 * (s - 1) * 1)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>s. P (s - \<i> * complex_of_real a) * zeta (s - \<i> * complex_of_real a) * Dirichlet_L n \<chi> (s - \<i> * complex_of_real a) * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> (s - \<i> * complex_of_real a))) \<in> O[at 1](\<lambda>s. 1 * 1 * (s - 1) * 1)
[PROOF STEP]
unfolding P_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>s. (\<Prod>x\<in>{p. prime p \<and> p dvd n}. 1 - 1 / of_nat x powr (s - \<i> * complex_of_real a)) * zeta (s - \<i> * complex_of_real a) * Dirichlet_L n \<chi> (s - \<i> * complex_of_real a) * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> (s - \<i> * complex_of_real a))) \<in> O[at 1](\<lambda>s. 1 * 1 * (s - 1) * 1)
[PROOF STEP]
using that n
[PROOF STATE]
proof (prove)
using this:
Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a) = 0
a \<noteq> 0
\<chi> \<in> dcharacters n
\<chi> \<noteq> \<chi>\<^sub>0
1 < n

goal (1 subgoal):
 1. (\<lambda>s. (\<Prod>x\<in>{p. prime p \<and> p dvd n}. 1 - 1 / of_nat x powr (s - \<i> * complex_of_real a)) * zeta (s - \<i> * complex_of_real a) * Dirichlet_L n \<chi> (s - \<i> * complex_of_real a) * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> (s - \<i> * complex_of_real a))) \<in> O[at 1](\<lambda>s. 1 * 1 * (s - 1) * 1)
[PROOF STEP]
by (intro landau_o.big.mult continuous_imp_bigo_1 continuous_intros *)
             (auto simp: prime_gt_0_nat dcharacters_def)
[PROOF STATE]
proof (state)
this:
(\<lambda>s. P (s - \<i> * complex_of_real a) * zeta (s - \<i> * complex_of_real a) * Dirichlet_L n \<chi> (s - \<i> * complex_of_real a) * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0} - {\<chi>}. Dirichlet_L n \<chi> (s - \<i> * complex_of_real a))) \<in> O[at 1](\<lambda>s. 1 * 1 * (s - 1) * 1)

goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>_. 1)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
(\<lambda>s. Z (s - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>s. 1 * 1 * (s - 1) * 1)
[PROOF STEP]
have "(\<lambda>s. Z (s - \<i> * a)) \<in> O[at 1](\<lambda>s. s - 1)"
[PROOF STATE]
proof (prove)
using this:
(\<lambda>s. Z (s - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>s. 1 * 1 * (s - 1) * 1)

goal (1 subgoal):
 1. (\<lambda>s. Z (s - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>s. s - 1)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
(\<lambda>s. Z (s - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>s. s - 1)

goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>_. 1)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
(\<lambda>s. Z (s - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>s. s - 1)

goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>_. 1)
[PROOF STEP]
have "Z \<in> O[at 1](\<lambda>s. 1 * (1 / (s - 1)) * 1)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Z \<in> O[at 1](\<lambda>s. 1 * (1 / (s - 1)) * 1)
[PROOF STEP]
unfolding Z_eq
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>s. P s * zeta s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0}. Dirichlet_L n \<chi> s)) \<in> O[at 1](\<lambda>s. 1 * (1 / (s - 1)) * 1)
[PROOF STEP]
using n that
[PROOF STATE]
proof (prove)
using this:
1 < n
Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a) = 0
a \<noteq> 0
\<chi> \<in> dcharacters n
\<chi> \<noteq> \<chi>\<^sub>0

goal (1 subgoal):
 1. (\<lambda>s. P s * zeta s * (\<Prod>\<chi>\<in>dcharacters n - {\<chi>\<^sub>0}. Dirichlet_L n \<chi> s)) \<in> O[at 1](\<lambda>s. 1 * (1 / (s - 1)) * 1)
[PROOF STEP]
by (intro landau_o.big.mult zeta_bigo_at_1 continuous_imp_bigo_1 continuous_intros)
             (auto simp: dcharacters_def)
[PROOF STATE]
proof (state)
this:
Z \<in> O[at 1](\<lambda>s. 1 * (1 / (s - 1)) * 1)

goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>_. 1)
[PROOF STEP]
hence "Z \<in> O[at 1](\<lambda>s. 1 / (s - 1))"
[PROOF STATE]
proof (prove)
using this:
Z \<in> O[at 1](\<lambda>s. 1 * (1 / (s - 1)) * 1)

goal (1 subgoal):
 1. Z \<in> O[at 1](\<lambda>s. 1 / (s - 1))
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
Z \<in> O[at 1](\<lambda>s. 1 / (s - 1))

goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>_. 1)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
(\<lambda>s. Z (s - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>s. s - 1)
Z \<in> O[at 1](\<lambda>s. 1 / (s - 1))
[PROOF STEP]
have "(\<lambda>s. Z s * Z (s - \<i> * a)) \<in> O[at 1](\<lambda>s. 1 / (s - 1) * (s - 1))"
[PROOF STATE]
proof (prove)
using this:
(\<lambda>s. Z (s - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>s. s - 1)
Z \<in> O[at 1](\<lambda>s. 1 / (s - 1))

goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>s. 1 / (s - 1) * (s - 1))
[PROOF STEP]
by (intro landau_o.big.mult)
[PROOF STATE]
proof (state)
this:
(\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>s. 1 / (s - 1) * (s - 1))

goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>_. 1)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
(\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>s. 1 / (s - 1) * (s - 1))

goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>_. 1)
[PROOF STEP]
have "(\<lambda>s. 1 / (s - 1) * (s - 1)) \<in> \<Theta>[at 1](\<lambda>_. 1)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>s. (1::'a) / (s - (1::'a)) * (s - (1::'a))) \<in> \<Theta>[at (1::'a)](\<lambda>_. 1::'a)
[PROOF STEP]
by (intro bigthetaI_cong) (auto simp add: eventually_at_filter)
[PROOF STATE]
proof (state)
this:
(\<lambda>s. (1::?'a2) / (s - (1::?'a2)) * (s - (1::?'a2))) \<in> \<Theta>[at (1::?'a2)](\<lambda>_. 1::?'a2)

goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>_. 1)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
(\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>_. 1)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
(\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>_. 1)

goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>_. 1)
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
(\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>_. 1)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<lbrakk>Dirichlet_L n ?\<chi>1 (1 - \<i> * complex_of_real ?a1) = 0; ?a1 \<noteq> 0; ?\<chi>1 \<in> dcharacters n; ?\<chi>1 \<noteq> \<chi>\<^sub>0\<rbrakk> \<Longrightarrow> (\<lambda>s. Z s * Z (s - \<i> * complex_of_real ?a1)) \<in> O[at 1](\<lambda>_. 1)

goal (1 subgoal):
 1. a \<noteq> 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
have bigo1': "(\<lambda>s. Z s * Z (s + \<i> * a)) \<in> O[at 1](\<lambda>_. 1)"
        if "Dirichlet_L n \<chi> (1 - \<i> * a) = 0" "a \<noteq> 0" "\<chi> \<in> dcharacters n" "\<chi> \<noteq> \<chi>\<^sub>0"
        for a :: real and \<chi>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s + \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>_. 1)
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s + \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>_. 1)
[PROOF STEP]
from that
[PROOF STATE]
proof (chain)
picking this:
Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a) = 0
a \<noteq> 0
\<chi> \<in> dcharacters n
\<chi> \<noteq> \<chi>\<^sub>0
[PROOF STEP]
interpret dcharacter n G \<chi>
[PROOF STATE]
proof (prove)
using this:
Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a) = 0
a \<noteq> 0
\<chi> \<in> dcharacters n
\<chi> \<noteq> \<chi>\<^sub>0

goal (1 subgoal):
 1. dcharacter n \<chi> &&& G \<equiv> residue_mult_group n
[PROOF STEP]
by (simp_all add: dcharacters_def G_def)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s + \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>_. 1)
[PROOF STEP]
from bigo1[of "inv_character \<chi>" "-a"] that cnj_Dirichlet_L[of "1 - \<i> * a"]
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>Dirichlet_L n (inv_character \<chi>) (1 - \<i> * complex_of_real (- a)) = 0; - a \<noteq> 0; inv_character \<chi> \<in> dcharacters n; inv_character \<chi> \<noteq> \<chi>\<^sub>0\<rbrakk> \<Longrightarrow> (\<lambda>s. Z s * Z (s - \<i> * complex_of_real (- a))) \<in> O[at 1](\<lambda>_. 1)
Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a) = 0
a \<noteq> 0
\<chi> \<in> dcharacters n
\<chi> \<noteq> \<chi>\<^sub>0
cnj (Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a)) = Dirichlet_L n (inv_character \<chi>) (cnj (1 - \<i> * complex_of_real a))
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>Dirichlet_L n (inv_character \<chi>) (1 - \<i> * complex_of_real (- a)) = 0; - a \<noteq> 0; inv_character \<chi> \<in> dcharacters n; inv_character \<chi> \<noteq> \<chi>\<^sub>0\<rbrakk> \<Longrightarrow> (\<lambda>s. Z s * Z (s - \<i> * complex_of_real (- a))) \<in> O[at 1](\<lambda>_. 1)
Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a) = 0
a \<noteq> 0
\<chi> \<in> dcharacters n
\<chi> \<noteq> \<chi>\<^sub>0
cnj (Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a)) = Dirichlet_L n (inv_character \<chi>) (cnj (1 - \<i> * complex_of_real a))

goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s + \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>_. 1)
[PROOF STEP]
by (simp add: dcharacters_def dcharacter_inv_character)
[PROOF STATE]
proof (state)
this:
(\<lambda>s. Z s * Z (s + \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>_. 1)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<lbrakk>Dirichlet_L n ?\<chi>1 (1 - \<i> * complex_of_real ?a1) = 0; ?a1 \<noteq> 0; ?\<chi>1 \<in> dcharacters n; ?\<chi>1 \<noteq> \<chi>\<^sub>0\<rbrakk> \<Longrightarrow> (\<lambda>s. Z s * Z (s + \<i> * complex_of_real ?a1)) \<in> O[at 1](\<lambda>_. 1)

goal (1 subgoal):
 1. a \<noteq> 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
have bigo2: "(\<lambda>s. Z s * Z (s - \<i> * a)) \<in> O[at (1 + \<i> * a)](\<lambda>_. 1)"
        if "Dirichlet_L n \<chi> (1 - \<i> * a) = 0" "a \<noteq> 0" "\<chi> \<in> dcharacters n" "\<chi> \<noteq> \<chi>\<^sub>0"
        for a :: real and \<chi>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[at (1 + \<i> * complex_of_real a)](\<lambda>_. 1)
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[at (1 + \<i> * complex_of_real a)](\<lambda>_. 1)
[PROOF STEP]
have "(\<lambda>s. Z s * Z (s - \<i> * a)) \<in> O[filtermap (\<lambda>s. s + \<i> * a) (at 1)](\<lambda>_. 1)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[filtermap (\<lambda>s. s + \<i> * complex_of_real a) (at 1)](\<lambda>_. 1)
[PROOF STEP]
using bigo1'[of \<chi> a] that
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a) = 0; a \<noteq> 0; \<chi> \<in> dcharacters n; \<chi> \<noteq> \<chi>\<^sub>0\<rbrakk> \<Longrightarrow> (\<lambda>s. Z s * Z (s + \<i> * complex_of_real a)) \<in> O[at 1](\<lambda>_. 1)
Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a) = 0
a \<noteq> 0
\<chi> \<in> dcharacters n
\<chi> \<noteq> \<chi>\<^sub>0

goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[filtermap (\<lambda>s. s + \<i> * complex_of_real a) (at 1)](\<lambda>_. 1)
[PROOF STEP]
by (simp add: mult.commute landau_o.big.in_filtermap_iff)
[PROOF STATE]
proof (state)
this:
(\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[filtermap (\<lambda>s. s + \<i> * complex_of_real a) (at 1)](\<lambda>_. 1)

goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[at (1 + \<i> * complex_of_real a)](\<lambda>_. 1)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
(\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[filtermap (\<lambda>s. s + \<i> * complex_of_real a) (at 1)](\<lambda>_. 1)

goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[at (1 + \<i> * complex_of_real a)](\<lambda>_. 1)
[PROOF STEP]
have "filtermap (\<lambda>s. s + \<i> * a) (at 1) = at (1 + \<i> * a)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. filtermap (\<lambda>s. s + \<i> * complex_of_real a) (at 1) = at (1 + \<i> * complex_of_real a)
[PROOF STEP]
using filtermap_at_shift[of "-\<i> * a" 1]
[PROOF STATE]
proof (prove)
using this:
filtermap (\<lambda>x. x - - \<i> * complex_of_real a) (at 1) = at (1 - - \<i> * complex_of_real a)

goal (1 subgoal):
 1. filtermap (\<lambda>s. s + \<i> * complex_of_real a) (at 1) = at (1 + \<i> * complex_of_real a)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
filtermap (\<lambda>s. s + \<i> * complex_of_real a) (at 1) = at (1 + \<i> * complex_of_real a)

goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[at (1 + \<i> * complex_of_real a)](\<lambda>_. 1)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
(\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[at (1 + \<i> * complex_of_real a)](\<lambda>_. 1)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
(\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[at (1 + \<i> * complex_of_real a)](\<lambda>_. 1)

goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[at (1 + \<i> * complex_of_real a)](\<lambda>_. 1)
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
(\<lambda>s. Z s * Z (s - \<i> * complex_of_real a)) \<in> O[at (1 + \<i> * complex_of_real a)](\<lambda>_. 1)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<lbrakk>Dirichlet_L n ?\<chi>1 (1 - \<i> * complex_of_real ?a1) = 0; ?a1 \<noteq> 0; ?\<chi>1 \<in> dcharacters n; ?\<chi>1 \<noteq> \<chi>\<^sub>0\<rbrakk> \<Longrightarrow> (\<lambda>s. Z s * Z (s - \<i> * complex_of_real ?a1)) \<in> O[at (1 + \<i> * complex_of_real ?a1)](\<lambda>_. 1)

goal (1 subgoal):
 1. a \<noteq> 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
have bigo2': "(\<lambda>s. Z s * Z (s + \<i> * a)) \<in> O[at (1 - \<i> * a)](\<lambda>_. 1)"
        if "Dirichlet_L n \<chi> (1 - \<i> * a) = 0" "a \<noteq> 0" "\<chi> \<in> dcharacters n" "\<chi> \<noteq> \<chi>\<^sub>0"
        for a :: real and \<chi>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s + \<i> * complex_of_real a)) \<in> O[at (1 - \<i> * complex_of_real a)](\<lambda>_. 1)
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s + \<i> * complex_of_real a)) \<in> O[at (1 - \<i> * complex_of_real a)](\<lambda>_. 1)
[PROOF STEP]
from that
[PROOF STATE]
proof (chain)
picking this:
Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a) = 0
a \<noteq> 0
\<chi> \<in> dcharacters n
\<chi> \<noteq> \<chi>\<^sub>0
[PROOF STEP]
interpret dcharacter n G \<chi>
[PROOF STATE]
proof (prove)
using this:
Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a) = 0
a \<noteq> 0
\<chi> \<in> dcharacters n
\<chi> \<noteq> \<chi>\<^sub>0

goal (1 subgoal):
 1. dcharacter n \<chi> &&& G \<equiv> residue_mult_group n
[PROOF STEP]
by (simp_all add: dcharacters_def G_def)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s + \<i> * complex_of_real a)) \<in> O[at (1 - \<i> * complex_of_real a)](\<lambda>_. 1)
[PROOF STEP]
from bigo2[of "inv_character \<chi>" "-a"] that cnj_Dirichlet_L[of "1 - \<i> * a"]
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>Dirichlet_L n (inv_character \<chi>) (1 - \<i> * complex_of_real (- a)) = 0; - a \<noteq> 0; inv_character \<chi> \<in> dcharacters n; inv_character \<chi> \<noteq> \<chi>\<^sub>0\<rbrakk> \<Longrightarrow> (\<lambda>s. Z s * Z (s - \<i> * complex_of_real (- a))) \<in> O[at (1 + \<i> * complex_of_real (- a))](\<lambda>_. 1)
Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a) = 0
a \<noteq> 0
\<chi> \<in> dcharacters n
\<chi> \<noteq> \<chi>\<^sub>0
cnj (Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a)) = Dirichlet_L n (inv_character \<chi>) (cnj (1 - \<i> * complex_of_real a))
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>Dirichlet_L n (inv_character \<chi>) (1 - \<i> * complex_of_real (- a)) = 0; - a \<noteq> 0; inv_character \<chi> \<in> dcharacters n; inv_character \<chi> \<noteq> \<chi>\<^sub>0\<rbrakk> \<Longrightarrow> (\<lambda>s. Z s * Z (s - \<i> * complex_of_real (- a))) \<in> O[at (1 + \<i> * complex_of_real (- a))](\<lambda>_. 1)
Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a) = 0
a \<noteq> 0
\<chi> \<in> dcharacters n
\<chi> \<noteq> \<chi>\<^sub>0
cnj (Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a)) = Dirichlet_L n (inv_character \<chi>) (cnj (1 - \<i> * complex_of_real a))

goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s + \<i> * complex_of_real a)) \<in> O[at (1 - \<i> * complex_of_real a)](\<lambda>_. 1)
[PROOF STEP]
by (simp add: dcharacters_def dcharacter_inv_character)
[PROOF STATE]
proof (state)
this:
(\<lambda>s. Z s * Z (s + \<i> * complex_of_real a)) \<in> O[at (1 - \<i> * complex_of_real a)](\<lambda>_. 1)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<lbrakk>Dirichlet_L n ?\<chi>1 (1 - \<i> * complex_of_real ?a1) = 0; ?a1 \<noteq> 0; ?\<chi>1 \<in> dcharacters n; ?\<chi>1 \<noteq> \<chi>\<^sub>0\<rbrakk> \<Longrightarrow> (\<lambda>s. Z s * Z (s + \<i> * complex_of_real ?a1)) \<in> O[at (1 - \<i> * complex_of_real ?a1)](\<lambda>_. 1)

goal (1 subgoal):
 1. a \<noteq> 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
have Q_eq: "Q = (\<lambda>s. (Z s * Z (s + \<i> * a)) * (Z s * Z (s - \<i> * a)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Q = (\<lambda>s. Z s * Z (s + \<i> * complex_of_real a) * (Z s * Z (s - \<i> * complex_of_real a)))
[PROOF STEP]
by (simp add: Q_def power2_eq_square mult_ac)
[PROOF STATE]
proof (state)
this:
Q = (\<lambda>s. Z s * Z (s + \<i> * complex_of_real a) * (Z s * Z (s - \<i> * complex_of_real a)))

goal (1 subgoal):
 1. a \<noteq> 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
consider "s = 1" | "s = 1 + \<i> * a" | "s = 1 - \<i> * a" | "s \<notin> ?sings"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>s = 1 \<Longrightarrow> thesis; s = 1 + \<i> * complex_of_real a \<Longrightarrow> thesis; s = 1 - \<i> * complex_of_real a \<Longrightarrow> thesis; s \<notin> {1, 1 + \<i> * complex_of_real a, 1 - \<i> * complex_of_real a} \<Longrightarrow> thesis\<rbrakk> \<Longrightarrow> thesis
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<lbrakk>s = 1 \<Longrightarrow> ?thesis1; s = 1 + \<i> * complex_of_real a \<Longrightarrow> ?thesis1; s = 1 - \<i> * complex_of_real a \<Longrightarrow> ?thesis1; s \<notin> {1, 1 + \<i> * complex_of_real a, 1 - \<i> * complex_of_real a} \<Longrightarrow> ?thesis1\<rbrakk> \<Longrightarrow> ?thesis1

goal (1 subgoal):
 1. a \<noteq> 0 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>s = 1 \<Longrightarrow> ?thesis1; s = 1 + \<i> * complex_of_real a \<Longrightarrow> ?thesis1; s = 1 - \<i> * complex_of_real a \<Longrightarrow> ?thesis1; s \<notin> {1, 1 + \<i> * complex_of_real a, 1 - \<i> * complex_of_real a} \<Longrightarrow> ?thesis1\<rbrakk> \<Longrightarrow> ?thesis1

goal (1 subgoal):
 1. Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
proof cases
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. s = 1 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 2. s = 1 + \<i> * complex_of_real a \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 3. s = 1 - \<i> * complex_of_real a \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 4. s \<notin> {1, 1 + \<i> * complex_of_real a, 1 - \<i> * complex_of_real a} \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
case 1
[PROOF STATE]
proof (state)
this:
s = 1

goal (4 subgoals):
 1. s = 1 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 2. s = 1 + \<i> * complex_of_real a \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 3. s = 1 - \<i> * complex_of_real a \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 4. s \<notin> {1, 1 + \<i> * complex_of_real a, 1 - \<i> * complex_of_real a} \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
have "Q \<in> O[at 1](\<lambda>_. 1 * 1)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Q \<in> O[at 1](\<lambda>_. 1 * 1)
[PROOF STEP]
unfolding Q_eq
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s + \<i> * complex_of_real a) * (Z s * Z (s - \<i> * complex_of_real a))) \<in> O[at 1](\<lambda>_. 1 * 1)
[PROOF STEP]
using assms zero zero' False \<chi>
[PROOF STATE]
proof (prove)
using this:
\<chi> \<noteq> \<chi>\<^sub>0
1 \<le> Re u
Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a) = 0
Dirichlet_L n \<chi>' (1 + \<i> * complex_of_real a) = 0
a \<noteq> 0
\<chi> \<in> dcharacters n
\<chi>' \<in> dcharacters n

goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s + \<i> * complex_of_real a) * (Z s * Z (s - \<i> * complex_of_real a))) \<in> O[at 1](\<lambda>_. 1 * 1)
[PROOF STEP]
by (intro landau_o.big.mult bigo1[of \<chi> a] bigo1'[of \<chi> a]; simp)+
[PROOF STATE]
proof (state)
this:
Q \<in> O[at 1](\<lambda>_. 1 * 1)

goal (4 subgoals):
 1. s = 1 \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 2. s = 1 + \<i> * complex_of_real a \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 3. s = 1 - \<i> * complex_of_real a \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 4. s \<notin> {1, 1 + \<i> * complex_of_real a, 1 - \<i> * complex_of_real a} \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
with 1
[PROOF STATE]
proof (chain)
picking this:
s = 1
Q \<in> O[at 1](\<lambda>_. 1 * 1)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
s = 1
Q \<in> O[at 1](\<lambda>_. 1 * 1)

goal (1 subgoal):
 1. Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
Q \<in> O[at s](\<lambda>_. 1)

goal (3 subgoals):
 1. s = 1 + \<i> * complex_of_real a \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 2. s = 1 - \<i> * complex_of_real a \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 3. s \<notin> {1, 1 + \<i> * complex_of_real a, 1 - \<i> * complex_of_real a} \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. s = 1 + \<i> * complex_of_real a \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 2. s = 1 - \<i> * complex_of_real a \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 3. s \<notin> {1, 1 + \<i> * complex_of_real a, 1 - \<i> * complex_of_real a} \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
case 2
[PROOF STATE]
proof (state)
this:
s = 1 + \<i> * complex_of_real a

goal (3 subgoals):
 1. s = 1 + \<i> * complex_of_real a \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 2. s = 1 - \<i> * complex_of_real a \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 3. s \<notin> {1, 1 + \<i> * complex_of_real a, 1 - \<i> * complex_of_real a} \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
have "Q \<in> O[at (1 + \<i> * a)](\<lambda>_. 1 * 1)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Q \<in> O[at (1 + \<i> * complex_of_real a)](\<lambda>_. 1 * 1)
[PROOF STEP]
unfolding Q_eq
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s + \<i> * complex_of_real a) * (Z s * Z (s - \<i> * complex_of_real a))) \<in> O[at (1 + \<i> * complex_of_real a)](\<lambda>_. 1 * 1)
[PROOF STEP]
using assms zero zero' False \<chi> n
[PROOF STATE]
proof (prove)
using this:
\<chi> \<noteq> \<chi>\<^sub>0
1 \<le> Re u
Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a) = 0
Dirichlet_L n \<chi>' (1 + \<i> * complex_of_real a) = 0
a \<noteq> 0
\<chi> \<in> dcharacters n
\<chi>' \<in> dcharacters n
1 < n

goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s + \<i> * complex_of_real a) * (Z s * Z (s - \<i> * complex_of_real a))) \<in> O[at (1 + \<i> * complex_of_real a)](\<lambda>_. 1 * 1)
[PROOF STEP]
by (intro landau_o.big.mult bigo2[of \<chi> a] continuous_imp_bigo_1)
             (auto simp: Z_def dcharacters_def intro!: continuous_intros)
[PROOF STATE]
proof (state)
this:
Q \<in> O[at (1 + \<i> * complex_of_real a)](\<lambda>_. 1 * 1)

goal (3 subgoals):
 1. s = 1 + \<i> * complex_of_real a \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 2. s = 1 - \<i> * complex_of_real a \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 3. s \<notin> {1, 1 + \<i> * complex_of_real a, 1 - \<i> * complex_of_real a} \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
with 2
[PROOF STATE]
proof (chain)
picking this:
s = 1 + \<i> * complex_of_real a
Q \<in> O[at (1 + \<i> * complex_of_real a)](\<lambda>_. 1 * 1)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
s = 1 + \<i> * complex_of_real a
Q \<in> O[at (1 + \<i> * complex_of_real a)](\<lambda>_. 1 * 1)

goal (1 subgoal):
 1. Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
Q \<in> O[at s](\<lambda>_. 1)

goal (2 subgoals):
 1. s = 1 - \<i> * complex_of_real a \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 2. s \<notin> {1, 1 + \<i> * complex_of_real a, 1 - \<i> * complex_of_real a} \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. s = 1 - \<i> * complex_of_real a \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 2. s \<notin> {1, 1 + \<i> * complex_of_real a, 1 - \<i> * complex_of_real a} \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
case 3
[PROOF STATE]
proof (state)
this:
s = 1 - \<i> * complex_of_real a

goal (2 subgoals):
 1. s = 1 - \<i> * complex_of_real a \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 2. s \<notin> {1, 1 + \<i> * complex_of_real a, 1 - \<i> * complex_of_real a} \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
have "Q \<in> O[at (1 - \<i> * a)](\<lambda>_. 1 * 1)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Q \<in> O[at (1 - \<i> * complex_of_real a)](\<lambda>_. 1 * 1)
[PROOF STEP]
unfolding Q_eq
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s + \<i> * complex_of_real a) * (Z s * Z (s - \<i> * complex_of_real a))) \<in> O[at (1 - \<i> * complex_of_real a)](\<lambda>_. 1 * 1)
[PROOF STEP]
using assms zero zero' False \<chi> n
[PROOF STATE]
proof (prove)
using this:
\<chi> \<noteq> \<chi>\<^sub>0
1 \<le> Re u
Dirichlet_L n \<chi> (1 - \<i> * complex_of_real a) = 0
Dirichlet_L n \<chi>' (1 + \<i> * complex_of_real a) = 0
a \<noteq> 0
\<chi> \<in> dcharacters n
\<chi>' \<in> dcharacters n
1 < n

goal (1 subgoal):
 1. (\<lambda>s. Z s * Z (s + \<i> * complex_of_real a) * (Z s * Z (s - \<i> * complex_of_real a))) \<in> O[at (1 - \<i> * complex_of_real a)](\<lambda>_. 1 * 1)
[PROOF STEP]
by (intro landau_o.big.mult bigo2'[of \<chi> a] continuous_imp_bigo_1)
             (auto simp: Z_def dcharacters_def intro!: continuous_intros)
[PROOF STATE]
proof (state)
this:
Q \<in> O[at (1 - \<i> * complex_of_real a)](\<lambda>_. 1 * 1)

goal (2 subgoals):
 1. s = 1 - \<i> * complex_of_real a \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
 2. s \<notin> {1, 1 + \<i> * complex_of_real a, 1 - \<i> * complex_of_real a} \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
with 3
[PROOF STATE]
proof (chain)
picking this:
s = 1 - \<i> * complex_of_real a
Q \<in> O[at (1 - \<i> * complex_of_real a)](\<lambda>_. 1 * 1)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
s = 1 - \<i> * complex_of_real a
Q \<in> O[at (1 - \<i> * complex_of_real a)](\<lambda>_. 1 * 1)

goal (1 subgoal):
 1. Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
Q \<in> O[at s](\<lambda>_. 1)

goal (1 subgoal):
 1. s \<notin> {1, 1 + \<i> * complex_of_real a, 1 - \<i> * complex_of_real a} \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. s \<notin> {1, 1 + \<i> * complex_of_real a, 1 - \<i> * complex_of_real a} \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
case 4
[PROOF STATE]
proof (state)
this:
s \<notin> {1, 1 + \<i> * complex_of_real a, 1 - \<i> * complex_of_real a}

goal (1 subgoal):
 1. s \<notin> {1, 1 + \<i> * complex_of_real a, 1 - \<i> * complex_of_real a} \<Longrightarrow> Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
s \<notin> {1, 1 + \<i> * complex_of_real a, 1 - \<i> * complex_of_real a}

goal (1 subgoal):
 1. Q \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
unfolding Q_def Z_def
[PROOF STATE]
proof (prove)
using this:
s \<notin> {1, 1 + \<i> * complex_of_real a, 1 - \<i> * complex_of_real a}

goal (1 subgoal):
 1. (\<lambda>s. (\<Prod>\<chi>\<in>dcharacters n. Dirichlet_L n \<chi> s)\<^sup>2 * (\<Prod>\<chi>\<in>dcharacters n. Dirichlet_L n \<chi> (s + \<i> * complex_of_real a)) * (\<Prod>\<chi>\<in>dcharacters n. Dirichlet_L n \<chi> (s - \<i> * complex_of_real a))) \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
using n
[PROOF STATE]
proof (prove)
using this:
s \<notin> {1, 1 + \<i> * complex_of_real a, 1 - \<i> * complex_of_real a}
1 < n

goal (1 subgoal):
 1. (\<lambda>s. (\<Prod>\<chi>\<in>dcharacters n. Dirichlet_L n \<chi> s)\<^sup>2 * (\<Prod>\<chi>\<in>dcharacters n. Dirichlet_L n \<chi> (s + \<i> * complex_of_real a)) * (\<Prod>\<chi>\<in>dcharacters n. Dirichlet_L n \<chi> (s - \<i> * complex_of_real a))) \<in> O[at s](\<lambda>_. 1)
[PROOF STEP]
by (intro continuous_imp_bigo_1 continuous_intros)
             (auto simp: dcharacters_def complex_eq_iff)
[PROOF STATE]
proof (state)
this:
Q \<in> O[at s](\<lambda>_. 1)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
Q \<in> O[at s](\<lambda>_. 1)

goal:
No subgoals!
[PROOF STEP]
qed

    \<comment> \<open>Again, we can remove the singularities from @{term Q} and extend it to an entire function.\<close>
[PROOF STATE]
proof (state)
this:
Q \<in> O[at ?s1](\<lambda>_. 1)

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
have "\<exists>Q'. Q' holomorphic_on UNIV \<and> (\<forall>z\<in>UNIV - ?sings. Q' z = Q z)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>Q'. Q' holomorphic_on UNIV \<and> (\<forall>z\<in>UNIV - {1, 1 + \<i> * complex_of_real a, 1 - \<i> * complex_of_real a}. Q' z = Q z)
[PROOF STEP]
using n
[PROOF STATE]
proof (prove)
using this:
1 < n

goal (1 subgoal):
 1. \<exists>Q'. Q' holomorphic_on UNIV \<and> (\<forall>z\<in>UNIV - {1, 1 + \<i> * complex_of_real a, 1 - \<i> * complex_of_real a}. Q' z = Q z)
[PROOF STEP]
by (intro removable_singularities Q_bigo_1)
                 (auto simp: Q_def Z_def dcharacters_def complex_eq_iff intro!: holomorphic_intros)
[PROOF STATE]
proof (state)
this:
\<exists>Q'. Q' holomorphic_on UNIV \<and> (\<forall>z\<in>UNIV - {1, 1 + \<i> * complex_of_real a, 1 - \<i> * complex_of_real a}. Q' z = Q z)

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<exists>Q'. Q' holomorphic_on UNIV \<and> (\<forall>z\<in>UNIV - {1, 1 + \<i> * complex_of_real a, 1 - \<i> * complex_of_real a}. Q' z = Q z)
[PROOF STEP]
obtain Q' where Q': "Q' holomorphic_on UNIV" "\<And>z. z \<notin> ?sings \<Longrightarrow> Q' z = Q z"
[PROOF STATE]
proof (prove)
using this:
\<exists>Q'. Q' holomorphic_on UNIV \<and> (\<forall>z\<in>UNIV - {1, 1 + \<i> * complex_of_real a, 1 - \<i> * complex_of_real a}. Q' z = Q z)

goal (1 subgoal):
 1. (\<And>Q'. \<lbrakk>Q' holomorphic_on UNIV; \<And>z. z \<notin> {1, 1 + \<i> * complex_of_real a, 1 - \<i> * complex_of_real a} \<Longrightarrow> Q' z = Q z\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by blast

    \<comment> \<open>@{term Q'} constitutes an analytic continuation of the Dirichlet series of @{term Q}.\<close>
[PROOF STATE]
proof (state)
this:
Q' holomorphic_on UNIV
?z1 \<notin> {1, 1 + \<i> * complex_of_real a, 1 - \<i> * complex_of_real a} \<Longrightarrow> Q' ?z1 = Q ?z1

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
have eval_Q_fds: "eval_fds Q_fds s = Q' s" if "Re s > 1" for s
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. eval_fds Q_fds s = Q' s
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. eval_fds Q_fds s = Q' s
[PROOF STEP]
have [simp]: "dcharacter n \<chi>" if "\<chi> \<in> dcharacters n" for \<chi>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dcharacter n \<chi>
[PROOF STEP]
using that
[PROOF STATE]
proof (prove)
using this:
\<chi> \<in> dcharacters n

goal (1 subgoal):
 1. dcharacter n \<chi>
[PROOF STEP]
by (simp add: dcharacters_def)
[PROOF STATE]
proof (state)
this:
?\<chi>1 \<in> dcharacters n \<Longrightarrow> dcharacter n ?\<chi>1

goal (1 subgoal):
 1. eval_fds Q_fds s = Q' s
[PROOF STEP]
from that
[PROOF STATE]
proof (chain)
picking this:
1 < Re s
[PROOF STEP]
have "abs_conv_abscissa (fds \<chi>) < ereal (Re s)" if "\<chi> \<in> dcharacters n" for \<chi>
[PROOF STATE]
proof (prove)
using this:
1 < Re s

goal (1 subgoal):
 1. abs_conv_abscissa (fds \<chi>) < ereal (Re s)
[PROOF STEP]
using that
[PROOF STATE]
proof (prove)
using this:
1 < Re s
\<chi> \<in> dcharacters n

goal (1 subgoal):
 1. abs_conv_abscissa (fds \<chi>) < ereal (Re s)
[PROOF STEP]
by (intro le_less_trans[OF dcharacter.abs_conv_abscissa_weak[of n \<chi>]]) auto
[PROOF STATE]
proof (state)
this:
?\<chi>1 \<in> dcharacters n \<Longrightarrow> abs_conv_abscissa (fds ?\<chi>1) < ereal (Re s)

goal (1 subgoal):
 1. eval_fds Q_fds s = Q' s
[PROOF STEP]
hence "eval_fds Q_fds s = Q s"
[PROOF STATE]
proof (prove)
using this:
?\<chi>1 \<in> dcharacters n \<Longrightarrow> abs_conv_abscissa (fds ?\<chi>1) < ereal (Re s)

goal (1 subgoal):
 1. eval_fds Q_fds s = Q s
[PROOF STEP]
using that
[PROOF STATE]
proof (prove)
using this:
?\<chi>1 \<in> dcharacters n \<Longrightarrow> abs_conv_abscissa (fds ?\<chi>1) < ereal (Re s)
1 < Re s

goal (1 subgoal):
 1. eval_fds Q_fds s = Q s
[PROOF STEP]
by (simp add: Q_fds_def Q_def eval_fds_mult eval_fds_power fds_abs_converges_mult
              eval_fds_prod fds_abs_converges_prod dcharacter.Dirichlet_L_conv_eval_fds_weak
              fds_abs_converges_power eval_fds_zeta Z_fds_def Z_def fds_abs_converges)
[PROOF STATE]
proof (state)
this:
eval_fds Q_fds s = Q s

goal (1 subgoal):
 1. eval_fds Q_fds s = Q' s
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
eval_fds Q_fds s = Q s

goal (1 subgoal):
 1. eval_fds Q_fds s = Q' s
[PROOF STEP]
from that
[PROOF STATE]
proof (chain)
picking this:
1 < Re s
[PROOF STEP]
have "\<dots> = Q' s"
[PROOF STATE]
proof (prove)
using this:
1 < Re s

goal (1 subgoal):
 1. Q s = Q' s
[PROOF STEP]
by (subst Q') auto
[PROOF STATE]
proof (state)
this:
Q s = Q' s

goal (1 subgoal):
 1. eval_fds Q_fds s = Q' s
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
eval_fds Q_fds s = Q' s
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
eval_fds Q_fds s = Q' s

goal (1 subgoal):
 1. eval_fds Q_fds s = Q' s
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
eval_fds Q_fds s = Q' s

goal:
No subgoals!
[PROOF STEP]
qed

    \<comment> \<open>Since the characters are completely multiplicative, the series for this logarithm can
        be rewritten like this:\<close>
[PROOF STATE]
proof (state)
this:
1 < Re ?s1 \<Longrightarrow> eval_fds Q_fds ?s1 = Q' ?s1

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
define I where "I = (\<lambda>k. if [k = 1] (mod n) then totient n else 0 :: real)"
[PROOF STATE]
proof (state)
this:
I = (\<lambda>k. real (if [k = 1] (mod n) then totient n else 0))

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
have ln_Q_fds_eq:
      "fds_ln 0 Q_fds = fds (\<lambda>k. of_real (2 * I k * mangoldt k / ln k * (1 + cos (a * ln k))))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. fds_ln 0 Q_fds = fds (\<lambda>k. complex_of_real (2 * I k * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. fds_ln 0 Q_fds = fds (\<lambda>k. complex_of_real (2 * I k * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))
[PROOF STEP]
have nz: "\<chi> (Suc 0) = 1" if "\<chi> \<in> dcharacters n" for \<chi>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<chi> (Suc 0) = 1
[PROOF STEP]
using dcharacter.Suc_0[of n \<chi>] that
[PROOF STATE]
proof (prove)
using this:
dcharacter n \<chi> \<Longrightarrow> \<chi> (Suc 0) = 1
\<chi> \<in> dcharacters n

goal (1 subgoal):
 1. \<chi> (Suc 0) = 1
[PROOF STEP]
by (simp add: dcharacters_def)
[PROOF STATE]
proof (state)
this:
?\<chi>1 \<in> dcharacters n \<Longrightarrow> ?\<chi>1 (Suc 0) = 1

goal (1 subgoal):
 1. fds_ln 0 Q_fds = fds (\<lambda>k. complex_of_real (2 * I k * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))
[PROOF STEP]
note simps = fds_ln_mult[where l' = 0 and l'' = 0] fds_ln_power[where l' = 0]
                   fds_ln_prod[where l' = "\<lambda>_. 0"]
[PROOF STATE]
proof (state)
this:
\<lbrakk>fds_nth ?f 1 \<noteq> (0::?'a1); fds_nth ?g 1 \<noteq> (0::?'a1); (0::?'a1) + (0::?'a1) = ?l\<rbrakk> \<Longrightarrow> fds_ln ?l (?f * ?g) = fds_ln (0::?'a1) ?f + fds_ln (0::?'a1) ?g
\<lbrakk>fds_nth ?f 1 \<noteq> (0::?'a1); ?l = of_nat ?n * (0::?'a1)\<rbrakk> \<Longrightarrow> fds_ln ?l (?f ^ ?n) = of_nat ?n * fds_ln (0::?'a1) ?f
\<lbrakk>\<And>x. x \<in> ?A \<Longrightarrow> fds_nth (?f x) 1 \<noteq> (0::?'b1); (\<Sum>x\<in>?A. (0::?'b1)) = ?l\<rbrakk> \<Longrightarrow> fds_ln ?l (prod ?f ?A) = (\<Sum>x\<in>?A. fds_ln (0::?'b1) (?f x))

goal (1 subgoal):
 1. fds_ln 0 Q_fds = fds (\<lambda>k. complex_of_real (2 * I k * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))
[PROOF STEP]
have "fds_ln 0 Q_fds = (\<Sum>\<chi>\<in>dcharacters n. 2 * fds_ln 0 (fds \<chi>) +
              fds_shift (\<i> * a) (fds_ln 0 (fds \<chi>)) + fds_shift (-\<i> * a) (fds_ln 0 (fds \<chi>)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. fds_ln 0 Q_fds = (\<Sum>\<chi>\<in>dcharacters n. 2 * fds_ln 0 (fds \<chi>) + fds_shift (\<i> * complex_of_real a) (fds_ln 0 (fds \<chi>)) + fds_shift (- \<i> * complex_of_real a) (fds_ln 0 (fds \<chi>)))
[PROOF STEP]
by (auto simp: Q_fds_def Z_fds_def simps nz sum.distrib sum_distrib_left)
[PROOF STATE]
proof (state)
this:
fds_ln 0 Q_fds = (\<Sum>\<chi>\<in>dcharacters n. 2 * fds_ln 0 (fds \<chi>) + fds_shift (\<i> * complex_of_real a) (fds_ln 0 (fds \<chi>)) + fds_shift (- \<i> * complex_of_real a) (fds_ln 0 (fds \<chi>)))

goal (1 subgoal):
 1. fds_ln 0 Q_fds = fds (\<lambda>k. complex_of_real (2 * I k * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
fds_ln 0 Q_fds = (\<Sum>\<chi>\<in>dcharacters n. 2 * fds_ln 0 (fds \<chi>) + fds_shift (\<i> * complex_of_real a) (fds_ln 0 (fds \<chi>)) + fds_shift (- \<i> * complex_of_real a) (fds_ln 0 (fds \<chi>)))

goal (1 subgoal):
 1. fds_ln 0 Q_fds = fds (\<lambda>k. complex_of_real (2 * I k * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))
[PROOF STEP]
have "\<dots> = (\<Sum>\<chi>\<in>dcharacters n.
                         fds (\<lambda>k. \<chi> k * of_real (2 * mangoldt k / ln k * (1 + cos (a * ln k)))))"
        (is "(\<Sum>\<chi>\<in>_. ?l \<chi>) = _")
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<Sum>\<chi>\<in>dcharacters n. 2 * fds_ln 0 (fds \<chi>) + fds_shift (\<i> * complex_of_real a) (fds_ln 0 (fds \<chi>)) + fds_shift (- \<i> * complex_of_real a) (fds_ln 0 (fds \<chi>))) = (\<Sum>\<chi>\<in>dcharacters n. fds (\<lambda>k. \<chi> k * complex_of_real (2 * mangoldt k / ln (real k) * (1 + cos (a * ln (real k))))))
[PROOF STEP]
proof (intro sum.cong refl, goal_cases)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>x. x \<in> dcharacters n \<Longrightarrow> 2 * fds_ln 0 (fds x) + fds_shift (\<i> * complex_of_real a) (fds_ln 0 (fds x)) + fds_shift (- \<i> * complex_of_real a) (fds_ln 0 (fds x)) = fds (\<lambda>k. x k * complex_of_real (2 * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))
[PROOF STEP]
case (1 \<chi>)
[PROOF STATE]
proof (state)
this:
\<chi> \<in> dcharacters n

goal (1 subgoal):
 1. \<And>x. x \<in> dcharacters n \<Longrightarrow> 2 * fds_ln 0 (fds x) + fds_shift (\<i> * complex_of_real a) (fds_ln 0 (fds x)) + fds_shift (- \<i> * complex_of_real a) (fds_ln 0 (fds x)) = fds (\<lambda>k. x k * complex_of_real (2 * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<chi> \<in> dcharacters n
[PROOF STEP]
interpret dcharacter n G \<chi>
[PROOF STATE]
proof (prove)
using this:
\<chi> \<in> dcharacters n

goal (1 subgoal):
 1. dcharacter n \<chi> &&& G \<equiv> residue_mult_group n
[PROOF STEP]
by (simp_all add: dcharacters_def G_def)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>x. x \<in> dcharacters n \<Longrightarrow> 2 * fds_ln 0 (fds x) + fds_shift (\<i> * complex_of_real a) (fds_ln 0 (fds x)) + fds_shift (- \<i> * complex_of_real a) (fds_ln 0 (fds x)) = fds (\<lambda>k. x k * complex_of_real (2 * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))
[PROOF STEP]
have mult: "completely_multiplicative_function (fds_nth (fds \<chi>))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. completely_multiplicative_function (fds_nth (fds \<chi>))
[PROOF STEP]
by (simp add: fds_nth_fds' mult.completely_multiplicative_function_axioms)
[PROOF STATE]
proof (state)
this:
completely_multiplicative_function (fds_nth (fds \<chi>))

goal (1 subgoal):
 1. \<And>x. x \<in> dcharacters n \<Longrightarrow> 2 * fds_ln 0 (fds x) + fds_shift (\<i> * complex_of_real a) (fds_ln 0 (fds x)) + fds_shift (- \<i> * complex_of_real a) (fds_ln 0 (fds x)) = fds (\<lambda>k. x k * complex_of_real (2 * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))
[PROOF STEP]
have *: "fds_ln 0 (fds \<chi>) = fds (\<lambda>n. \<chi> n * mangoldt n /\<^sub>R ln (real n))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. fds_ln 0 (fds \<chi>) = fds (\<lambda>n. \<chi> n * mangoldt n /\<^sub>R ln (real n))
[PROOF STEP]
by (simp add: fds_ln_completely_multiplicative[OF mult] fds_nth_fds' fds_eq_iff)
[PROOF STATE]
proof (state)
this:
fds_ln 0 (fds \<chi>) = fds (\<lambda>n. \<chi> n * mangoldt n /\<^sub>R ln (real n))

goal (1 subgoal):
 1. \<And>x. x \<in> dcharacters n \<Longrightarrow> 2 * fds_ln 0 (fds x) + fds_shift (\<i> * complex_of_real a) (fds_ln 0 (fds x)) + fds_shift (- \<i> * complex_of_real a) (fds_ln 0 (fds x)) = fds (\<lambda>k. x k * complex_of_real (2 * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))
[PROOF STEP]
have "?l \<chi> = fds (\<lambda>k. \<chi> k * mangoldt k /\<^sub>R ln k * (2 + k powr (\<i> * a) + k powr (-\<i> * a)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 2 * fds_ln 0 (fds \<chi>) + fds_shift (\<i> * complex_of_real a) (fds_ln 0 (fds \<chi>)) + fds_shift (- \<i> * complex_of_real a) (fds_ln 0 (fds \<chi>)) = fds (\<lambda>k. \<chi> k * mangoldt k /\<^sub>R ln (real k) * (2 + of_nat k powr (\<i> * complex_of_real a) + of_nat k powr (- \<i> * complex_of_real a)))
[PROOF STEP]
by (unfold *, rule fds_eqI) (simp add: algebra_simps scaleR_conv_of_real numeral_fds)
[PROOF STATE]
proof (state)
this:
2 * fds_ln 0 (fds \<chi>) + fds_shift (\<i> * complex_of_real a) (fds_ln 0 (fds \<chi>)) + fds_shift (- \<i> * complex_of_real a) (fds_ln 0 (fds \<chi>)) = fds (\<lambda>k. \<chi> k * mangoldt k /\<^sub>R ln (real k) * (2 + of_nat k powr (\<i> * complex_of_real a) + of_nat k powr (- \<i> * complex_of_real a)))

goal (1 subgoal):
 1. \<And>x. x \<in> dcharacters n \<Longrightarrow> 2 * fds_ln 0 (fds x) + fds_shift (\<i> * complex_of_real a) (fds_ln 0 (fds x)) + fds_shift (- \<i> * complex_of_real a) (fds_ln 0 (fds x)) = fds (\<lambda>k. x k * complex_of_real (2 * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
2 * fds_ln 0 (fds \<chi>) + fds_shift (\<i> * complex_of_real a) (fds_ln 0 (fds \<chi>)) + fds_shift (- \<i> * complex_of_real a) (fds_ln 0 (fds \<chi>)) = fds (\<lambda>k. \<chi> k * mangoldt k /\<^sub>R ln (real k) * (2 + of_nat k powr (\<i> * complex_of_real a) + of_nat k powr (- \<i> * complex_of_real a)))

goal (1 subgoal):
 1. \<And>x. x \<in> dcharacters n \<Longrightarrow> 2 * fds_ln 0 (fds x) + fds_shift (\<i> * complex_of_real a) (fds_ln 0 (fds x)) + fds_shift (- \<i> * complex_of_real a) (fds_ln 0 (fds x)) = fds (\<lambda>k. x k * complex_of_real (2 * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))
[PROOF STEP]
have "\<dots> = fds (\<lambda>k. \<chi> k * 2 * mangoldt k /\<^sub>R ln k * (1 + cos (of_real(a * ln k))))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. fds (\<lambda>k. \<chi> k * mangoldt k /\<^sub>R ln (real k) * (2 + of_nat k powr (\<i> * complex_of_real a) + of_nat k powr (- \<i> * complex_of_real a))) = fds (\<lambda>k. \<chi> k * 2 * mangoldt k /\<^sub>R ln (real k) * (1 + cos (complex_of_real (a * ln (real k)))))
[PROOF STEP]
unfolding cos_exp_eq
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. fds (\<lambda>k. \<chi> k * mangoldt k /\<^sub>R ln (real k) * (2 + of_nat k powr (\<i> * complex_of_real a) + of_nat k powr (- \<i> * complex_of_real a))) = fds (\<lambda>k. \<chi> k * 2 * mangoldt k /\<^sub>R ln (real k) * (1 + (exp (\<i> * complex_of_real (a * ln (real k))) + exp (- (\<i> * complex_of_real (a * ln (real k))))) / 2))
[PROOF STEP]
by (intro fds_eqI) (simp add: powr_def algebra_simps)
[PROOF STATE]
proof (state)
this:
fds (\<lambda>k. \<chi> k * mangoldt k /\<^sub>R ln (real k) * (2 + of_nat k powr (\<i> * complex_of_real a) + of_nat k powr (- \<i> * complex_of_real a))) = fds (\<lambda>k. \<chi> k * 2 * mangoldt k /\<^sub>R ln (real k) * (1 + cos (complex_of_real (a * ln (real k)))))

goal (1 subgoal):
 1. \<And>x. x \<in> dcharacters n \<Longrightarrow> 2 * fds_ln 0 (fds x) + fds_shift (\<i> * complex_of_real a) (fds_ln 0 (fds x)) + fds_shift (- \<i> * complex_of_real a) (fds_ln 0 (fds x)) = fds (\<lambda>k. x k * complex_of_real (2 * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
fds (\<lambda>k. \<chi> k * mangoldt k /\<^sub>R ln (real k) * (2 + of_nat k powr (\<i> * complex_of_real a) + of_nat k powr (- \<i> * complex_of_real a))) = fds (\<lambda>k. \<chi> k * 2 * mangoldt k /\<^sub>R ln (real k) * (1 + cos (complex_of_real (a * ln (real k)))))

goal (1 subgoal):
 1. \<And>x. x \<in> dcharacters n \<Longrightarrow> 2 * fds_ln 0 (fds x) + fds_shift (\<i> * complex_of_real a) (fds_ln 0 (fds x)) + fds_shift (- \<i> * complex_of_real a) (fds_ln 0 (fds x)) = fds (\<lambda>k. x k * complex_of_real (2 * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))
[PROOF STEP]
have "\<dots> = fds (\<lambda>k. \<chi> k * of_real (2 * mangoldt k / ln k * (1 + cos (a * ln k))))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. fds (\<lambda>k. \<chi> k * 2 * mangoldt k /\<^sub>R ln (real k) * (1 + cos (complex_of_real (a * ln (real k))))) = fds (\<lambda>k. \<chi> k * complex_of_real (2 * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))
[PROOF STEP]
unfolding cos_of_real
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. fds (\<lambda>k. \<chi> k * 2 * mangoldt k /\<^sub>R ln (real k) * (1 + complex_of_real (cos (a * ln (real k))))) = fds (\<lambda>k. \<chi> k * complex_of_real (2 * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))
[PROOF STEP]
by (simp add: field_simps scaleR_conv_of_real)
[PROOF STATE]
proof (state)
this:
fds (\<lambda>k. \<chi> k * 2 * mangoldt k /\<^sub>R ln (real k) * (1 + cos (complex_of_real (a * ln (real k))))) = fds (\<lambda>k. \<chi> k * complex_of_real (2 * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))

goal (1 subgoal):
 1. \<And>x. x \<in> dcharacters n \<Longrightarrow> 2 * fds_ln 0 (fds x) + fds_shift (\<i> * complex_of_real a) (fds_ln 0 (fds x)) + fds_shift (- \<i> * complex_of_real a) (fds_ln 0 (fds x)) = fds (\<lambda>k. x k * complex_of_real (2 * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
2 * fds_ln 0 (fds \<chi>) + fds_shift (\<i> * complex_of_real a) (fds_ln 0 (fds \<chi>)) + fds_shift (- \<i> * complex_of_real a) (fds_ln 0 (fds \<chi>)) = fds (\<lambda>k. \<chi> k * complex_of_real (2 * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
2 * fds_ln 0 (fds \<chi>) + fds_shift (\<i> * complex_of_real a) (fds_ln 0 (fds \<chi>)) + fds_shift (- \<i> * complex_of_real a) (fds_ln 0 (fds \<chi>)) = fds (\<lambda>k. \<chi> k * complex_of_real (2 * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))

goal (1 subgoal):
 1. 2 * fds_ln 0 (fds \<chi>) + fds_shift (\<i> * complex_of_real a) (fds_ln 0 (fds \<chi>)) + fds_shift (- \<i> * complex_of_real a) (fds_ln 0 (fds \<chi>)) = fds (\<lambda>k. \<chi> k * complex_of_real (2 * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
2 * fds_ln 0 (fds \<chi>) + fds_shift (\<i> * complex_of_real a) (fds_ln 0 (fds \<chi>)) + fds_shift (- \<i> * complex_of_real a) (fds_ln 0 (fds \<chi>)) = fds (\<lambda>k. \<chi> k * complex_of_real (2 * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(\<Sum>\<chi>\<in>dcharacters n. 2 * fds_ln 0 (fds \<chi>) + fds_shift (\<i> * complex_of_real a) (fds_ln 0 (fds \<chi>)) + fds_shift (- \<i> * complex_of_real a) (fds_ln 0 (fds \<chi>))) = (\<Sum>\<chi>\<in>dcharacters n. fds (\<lambda>k. \<chi> k * complex_of_real (2 * mangoldt k / ln (real k) * (1 + cos (a * ln (real k))))))

goal (1 subgoal):
 1. fds_ln 0 Q_fds = fds (\<lambda>k. complex_of_real (2 * I k * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
(\<Sum>\<chi>\<in>dcharacters n. 2 * fds_ln 0 (fds \<chi>) + fds_shift (\<i> * complex_of_real a) (fds_ln 0 (fds \<chi>)) + fds_shift (- \<i> * complex_of_real a) (fds_ln 0 (fds \<chi>))) = (\<Sum>\<chi>\<in>dcharacters n. fds (\<lambda>k. \<chi> k * complex_of_real (2 * mangoldt k / ln (real k) * (1 + cos (a * ln (real k))))))

goal (1 subgoal):
 1. fds_ln 0 Q_fds = fds (\<lambda>k. complex_of_real (2 * I k * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))
[PROOF STEP]
have "\<dots> = fds (\<lambda>k. (\<Sum>\<chi>\<in>dcharacters n. \<chi> k) * of_real (2 * mangoldt k / ln k *
                                 (1 + cos (a * ln k))))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<Sum>\<chi>\<in>dcharacters n. fds (\<lambda>k. \<chi> k * complex_of_real (2 * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))) = fds (\<lambda>k. (\<Sum>\<chi>\<in>dcharacters n. \<chi> k) * complex_of_real (2 * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))
[PROOF STEP]
by (simp add: sum_distrib_right sum_divide_distrib scaleR_conv_of_real sum_distrib_left)
[PROOF STATE]
proof (state)
this:
(\<Sum>\<chi>\<in>dcharacters n. fds (\<lambda>k. \<chi> k * complex_of_real (2 * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))) = fds (\<lambda>k. (\<Sum>\<chi>\<in>dcharacters n. \<chi> k) * complex_of_real (2 * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))

goal (1 subgoal):
 1. fds_ln 0 Q_fds = fds (\<lambda>k. complex_of_real (2 * I k * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
(\<Sum>\<chi>\<in>dcharacters n. fds (\<lambda>k. \<chi> k * complex_of_real (2 * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))) = fds (\<lambda>k. (\<Sum>\<chi>\<in>dcharacters n. \<chi> k) * complex_of_real (2 * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))

goal (1 subgoal):
 1. fds_ln 0 Q_fds = fds (\<lambda>k. complex_of_real (2 * I k * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))
[PROOF STEP]
have "\<dots> = fds (\<lambda>k. of_real (2 * I k * mangoldt k / ln k * (1 + cos (a * ln k))))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. fds (\<lambda>k. (\<Sum>\<chi>\<in>dcharacters n. \<chi> k) * complex_of_real (2 * mangoldt k / ln (real k) * (1 + cos (a * ln (real k))))) = fds (\<lambda>k. complex_of_real (2 * I k * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))
[PROOF STEP]
by (intro fds_eqI, subst sum_dcharacters) (simp_all add: I_def algebra_simps)
[PROOF STATE]
proof (state)
this:
fds (\<lambda>k. (\<Sum>\<chi>\<in>dcharacters n. \<chi> k) * complex_of_real (2 * mangoldt k / ln (real k) * (1 + cos (a * ln (real k))))) = fds (\<lambda>k. complex_of_real (2 * I k * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))

goal (1 subgoal):
 1. fds_ln 0 Q_fds = fds (\<lambda>k. complex_of_real (2 * I k * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
fds_ln 0 Q_fds = fds (\<lambda>k. complex_of_real (2 * I k * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
fds_ln 0 Q_fds = fds (\<lambda>k. complex_of_real (2 * I k * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))

goal (1 subgoal):
 1. fds_ln 0 Q_fds = fds (\<lambda>k. complex_of_real (2 * I k * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
fds_ln 0 Q_fds = fds (\<lambda>k. complex_of_real (2 * I k * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))

goal:
No subgoals!
[PROOF STEP]
qed
    \<comment> \<open>The coefficients of that logarithm series are clearly nonnegative:\<close>
[PROOF STATE]
proof (state)
this:
fds_ln 0 Q_fds = fds (\<lambda>k. complex_of_real (2 * I k * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))))

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
have "nonneg_dirichlet_series (fds_ln 0 Q_fds)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. nonneg_dirichlet_series (fds_ln 0 Q_fds)
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>n. 0 < n \<Longrightarrow> fds_nth (fds_ln 0 Q_fds) n \<in> \<real>\<^sub>\<ge>\<^sub>0
[PROOF STEP]
show "fds_nth (fds_ln 0 Q_fds) k \<in> \<real>\<^sub>\<ge>\<^sub>0" for k
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. fds_nth (fds_ln 0 Q_fds) k \<in> \<real>\<^sub>\<ge>\<^sub>0
[PROOF STEP]
proof (cases "k < 2")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. k < 2 \<Longrightarrow> fds_nth (fds_ln 0 Q_fds) k \<in> \<real>\<^sub>\<ge>\<^sub>0
 2. \<not> k < 2 \<Longrightarrow> fds_nth (fds_ln 0 Q_fds) k \<in> \<real>\<^sub>\<ge>\<^sub>0
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
\<not> k < 2

goal (2 subgoals):
 1. k < 2 \<Longrightarrow> fds_nth (fds_ln 0 Q_fds) k \<in> \<real>\<^sub>\<ge>\<^sub>0
 2. \<not> k < 2 \<Longrightarrow> fds_nth (fds_ln 0 Q_fds) k \<in> \<real>\<^sub>\<ge>\<^sub>0
[PROOF STEP]
have cos: "1 + cos x \<ge> 0" for x :: real
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 \<le> 1 + cos x
[PROOF STEP]
using cos_ge_minus_one[of x]
[PROOF STATE]
proof (prove)
using this:
- 1 \<le> cos x

goal (1 subgoal):
 1. 0 \<le> 1 + cos x
[PROOF STEP]
by linarith
[PROOF STATE]
proof (state)
this:
0 \<le> 1 + cos ?x1

goal (2 subgoals):
 1. k < 2 \<Longrightarrow> fds_nth (fds_ln 0 Q_fds) k \<in> \<real>\<^sub>\<ge>\<^sub>0
 2. \<not> k < 2 \<Longrightarrow> fds_nth (fds_ln 0 Q_fds) k \<in> \<real>\<^sub>\<ge>\<^sub>0
[PROOF STEP]
have "fds_nth (fds_ln 0 Q_fds) k =
                of_real (2 * I k * mangoldt k / ln k * (1 + cos (a * ln k)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. fds_nth (fds_ln 0 Q_fds) k = complex_of_real (2 * I k * mangoldt k / ln (real k) * (1 + cos (a * ln (real k))))
[PROOF STEP]
by (auto simp: fds_nth_fds' ln_Q_fds_eq)
[PROOF STATE]
proof (state)
this:
fds_nth (fds_ln 0 Q_fds) k = complex_of_real (2 * I k * mangoldt k / ln (real k) * (1 + cos (a * ln (real k))))

goal (2 subgoals):
 1. k < 2 \<Longrightarrow> fds_nth (fds_ln 0 Q_fds) k \<in> \<real>\<^sub>\<ge>\<^sub>0
 2. \<not> k < 2 \<Longrightarrow> fds_nth (fds_ln 0 Q_fds) k \<in> \<real>\<^sub>\<ge>\<^sub>0
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
fds_nth (fds_ln 0 Q_fds) k = complex_of_real (2 * I k * mangoldt k / ln (real k) * (1 + cos (a * ln (real k))))

goal (2 subgoals):
 1. k < 2 \<Longrightarrow> fds_nth (fds_ln 0 Q_fds) k \<in> \<real>\<^sub>\<ge>\<^sub>0
 2. \<not> k < 2 \<Longrightarrow> fds_nth (fds_ln 0 Q_fds) k \<in> \<real>\<^sub>\<ge>\<^sub>0
[PROOF STEP]
have "\<dots> \<in> \<real>\<^sub>\<ge>\<^sub>0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. complex_of_real (2 * I k * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))) \<in> \<real>\<^sub>\<ge>\<^sub>0
[PROOF STEP]
using False
[PROOF STATE]
proof (prove)
using this:
\<not> k < 2

goal (1 subgoal):
 1. complex_of_real (2 * I k * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))) \<in> \<real>\<^sub>\<ge>\<^sub>0
[PROOF STEP]
unfolding I_def
[PROOF STATE]
proof (prove)
using this:
\<not> k < 2

goal (1 subgoal):
 1. complex_of_real (2 * real (if [k = 1] (mod n) then totient n else 0) * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))) \<in> \<real>\<^sub>\<ge>\<^sub>0
[PROOF STEP]
by (subst nonneg_Reals_of_real_iff)
             (intro mult_nonneg_nonneg divide_nonneg_pos cos mangoldt_nonneg, auto)
[PROOF STATE]
proof (state)
this:
complex_of_real (2 * I k * mangoldt k / ln (real k) * (1 + cos (a * ln (real k)))) \<in> \<real>\<^sub>\<ge>\<^sub>0

goal (2 subgoals):
 1. k < 2 \<Longrightarrow> fds_nth (fds_ln 0 Q_fds) k \<in> \<real>\<^sub>\<ge>\<^sub>0
 2. \<not> k < 2 \<Longrightarrow> fds_nth (fds_ln 0 Q_fds) k \<in> \<real>\<^sub>\<ge>\<^sub>0
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
fds_nth (fds_ln 0 Q_fds) k \<in> \<real>\<^sub>\<ge>\<^sub>0
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
fds_nth (fds_ln 0 Q_fds) k \<in> \<real>\<^sub>\<ge>\<^sub>0

goal (1 subgoal):
 1. fds_nth (fds_ln 0 Q_fds) k \<in> \<real>\<^sub>\<ge>\<^sub>0
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
fds_nth (fds_ln 0 Q_fds) k \<in> \<real>\<^sub>\<ge>\<^sub>0

goal (1 subgoal):
 1. k < 2 \<Longrightarrow> fds_nth (fds_ln 0 Q_fds) k \<in> \<real>\<^sub>\<ge>\<^sub>0
[PROOF STEP]
qed (cases k; auto simp: ln_Q_fds_eq)
[PROOF STATE]
proof (state)
this:
fds_nth (fds_ln 0 Q_fds) ?k1 \<in> \<real>\<^sub>\<ge>\<^sub>0

goal:
No subgoals!
[PROOF STEP]
qed
    \<comment> \<open>Therefore @{term Q_fds} also has non-negative coefficients.\<close>
[PROOF STATE]
proof (state)
this:
nonneg_dirichlet_series (fds_ln 0 Q_fds)

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
hence nonneg: "nonneg_dirichlet_series Q_fds"
[PROOF STATE]
proof (prove)
using this:
nonneg_dirichlet_series (fds_ln 0 Q_fds)

goal (1 subgoal):
 1. nonneg_dirichlet_series Q_fds
[PROOF STEP]
proof (rule nonneg_dirichlet_series_lnD)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. exp 0 = fds_nth Q_fds (Suc 0)
[PROOF STEP]
have "(\<Prod>x\<in>dcharacters n. x (Suc 0)) = 1"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<Prod>x\<in>dcharacters n. x (Suc 0)) = 1
[PROOF STEP]
by (intro prod.neutral) (auto simp: dcharacters_def dcharacter.Suc_0)
[PROOF STATE]
proof (state)
this:
(\<Prod>x\<in>dcharacters n. x (Suc 0)) = 1

goal (1 subgoal):
 1. exp 0 = fds_nth Q_fds (Suc 0)
[PROOF STEP]
thus "exp 0 = fds_nth Q_fds (Suc 0)"
[PROOF STATE]
proof (prove)
using this:
(\<Prod>x\<in>dcharacters n. x (Suc 0)) = 1

goal (1 subgoal):
 1. exp 0 = fds_nth Q_fds (Suc 0)
[PROOF STEP]
by (simp add: Q_fds_def Z_fds_def)
[PROOF STATE]
proof (state)
this:
exp 0 = fds_nth Q_fds (Suc 0)

goal:
No subgoals!
[PROOF STEP]
qed

    \<comment> \<open>And by Pringsheim--Landau, we get that the Dirichlet series of @{term Q} converges
        everywhere.\<close>
[PROOF STATE]
proof (state)
this:
nonneg_dirichlet_series Q_fds

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
have "abs_conv_abscissa Q_fds \<le> 1"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. abs_conv_abscissa Q_fds \<le> 1
[PROOF STEP]
unfolding Q_fds_def Z_fds_def fds_shift_prod
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. abs_conv_abscissa ((prod fds (dcharacters n))\<^sup>2 * (\<Prod>x\<in>dcharacters n. fds_shift (\<i> * complex_of_real a) (fds x)) * (\<Prod>x\<in>dcharacters n. fds_shift (- \<i> * complex_of_real a) (fds x))) \<le> 1
[PROOF STEP]
by (intro abs_conv_abscissa_power_leI abs_conv_abscissa_mult_leI abs_conv_abscissa_prod_le)
         (auto simp: dcharacters_def dcharacter.abs_conv_abscissa_weak)
[PROOF STATE]
proof (state)
this:
abs_conv_abscissa Q_fds \<le> 1

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
with nonneg and eval_Q_fds and \<open>Q' holomorphic_on UNIV\<close>
[PROOF STATE]
proof (chain)
picking this:
nonneg_dirichlet_series Q_fds
1 < Re ?s1 \<Longrightarrow> eval_fds Q_fds ?s1 = Q' ?s1
Q' holomorphic_on UNIV
abs_conv_abscissa Q_fds \<le> 1
[PROOF STEP]
have abscissa: "abs_conv_abscissa Q_fds = -\<infinity>"
[PROOF STATE]
proof (prove)
using this:
nonneg_dirichlet_series Q_fds
1 < Re ?s1 \<Longrightarrow> eval_fds Q_fds ?s1 = Q' ?s1
Q' holomorphic_on UNIV
abs_conv_abscissa Q_fds \<le> 1

goal (1 subgoal):
 1. abs_conv_abscissa Q_fds = - \<infinity>
[PROOF STEP]
by (intro entire_continuation_imp_abs_conv_abscissa_MInfty[where g = Q' and c = 1])
           (auto simp: one_ereal_def)

    \<comment> \<open>Again, similarly to the proof for $\zeta$, we select a subseries of @{term Q}. This time
        we cannot simply pick powers of 2, since 2 might not be coprime to @{term n}, in which
        case the subseries would simply be 1 everywhere, which is not helpful. However, it is
        clear that there \emph{is} always some prime $p$ that is coprime to @{term n}, so we
        just use the subseries @{term Q} that corresponds to powers of $p$.\<close>
[PROOF STATE]
proof (state)
this:
abs_conv_abscissa Q_fds = - \<infinity>

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
from n
[PROOF STATE]
proof (chain)
picking this:
1 < n
[PROOF STEP]
obtain p where p: "prime p" "coprime p n"
[PROOF STATE]
proof (prove)
using this:
1 < n

goal (1 subgoal):
 1. (\<And>p. \<lbrakk>prime p; coprime p n\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using coprime_prime_exists[of n]
[PROOF STATE]
proof (prove)
using this:
1 < n
\<lbrakk>0 < n; \<And>p. \<lbrakk>prime p; coprime p n\<rbrakk> \<Longrightarrow> ?thesis\<rbrakk> \<Longrightarrow> ?thesis

goal (1 subgoal):
 1. (\<And>p. \<lbrakk>prime p; coprime p n\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
prime p
coprime p n

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
define R_fds where "R_fds = fds_primepow_subseries p Q_fds"
[PROOF STATE]
proof (state)
this:
R_fds = fds_primepow_subseries p Q_fds

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
have "conv_abscissa R_fds \<le> abs_conv_abscissa R_fds"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. conv_abscissa R_fds \<le> abs_conv_abscissa R_fds
[PROOF STEP]
by (rule conv_le_abs_conv_abscissa)
[PROOF STATE]
proof (state)
this:
conv_abscissa R_fds \<le> abs_conv_abscissa R_fds

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
conv_abscissa R_fds \<le> abs_conv_abscissa R_fds

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
have "abs_conv_abscissa R_fds \<le> abs_conv_abscissa Q_fds"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. abs_conv_abscissa R_fds \<le> abs_conv_abscissa Q_fds
[PROOF STEP]
unfolding R_fds_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. abs_conv_abscissa (fds_primepow_subseries p Q_fds) \<le> abs_conv_abscissa Q_fds
[PROOF STEP]
by (rule abs_conv_abscissa_restrict)
[PROOF STATE]
proof (state)
this:
abs_conv_abscissa R_fds \<le> abs_conv_abscissa Q_fds

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
abs_conv_abscissa R_fds \<le> abs_conv_abscissa Q_fds

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
have "\<dots> = -\<infinity>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. abs_conv_abscissa Q_fds = - \<infinity>
[PROOF STEP]
by (simp add: abscissa)
[PROOF STATE]
proof (state)
this:
abs_conv_abscissa Q_fds = - \<infinity>

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
conv_abscissa R_fds \<le> - \<infinity>
[PROOF STEP]
have abscissa': "conv_abscissa R_fds = -\<infinity>"
[PROOF STATE]
proof (prove)
using this:
conv_abscissa R_fds \<le> - \<infinity>

goal (1 subgoal):
 1. conv_abscissa R_fds = - \<infinity>
[PROOF STEP]
by simp

    \<comment> \<open>The following function $g(a,s)$ is the denominator in the Euler product expansion of
        the subseries of $Z(s + ia)$. It is clear that it is entire and non-zero for
        $\mathfrak{R}(s) > 0$ and all real $a$.\<close>
[PROOF STATE]
proof (state)
this:
conv_abscissa R_fds = - \<infinity>

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
define g :: "real \<Rightarrow> complex \<Rightarrow> complex"
      where "g = (\<lambda>a s. (\<Prod>\<chi>\<in>dcharacters n. (1 - \<chi> p * p powr (-s + \<i> * of_real a))))"
[PROOF STATE]
proof (state)
this:
g = (\<lambda>a s. \<Prod>\<chi>\<in>dcharacters n. 1 - \<chi> p * of_nat p powr (- s + \<i> * complex_of_real a))

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
have g_nz: "g a s \<noteq> 0" if "Re s > 0" for s a
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. g a s \<noteq> 0
[PROOF STEP]
unfolding g_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<Prod>\<chi>\<in>dcharacters n. 1 - \<chi> p * of_nat p powr (- s + \<i> * complex_of_real a)) \<noteq> 0
[PROOF STEP]
proof (subst prod_zero_iff[OF finite_dcharacters], safe)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>a. \<lbrakk>a \<in> dcharacters n; 1 - a p * of_nat p powr (- s + \<i> * complex_of_real a) = 0\<rbrakk> \<Longrightarrow> False
[PROOF STEP]
fix \<chi>
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>a. \<lbrakk>a \<in> dcharacters n; 1 - a p * of_nat p powr (- s + \<i> * complex_of_real a) = 0\<rbrakk> \<Longrightarrow> False
[PROOF STEP]
assume "\<chi> \<in> dcharacters n" and *: "1 - \<chi> p * p powr (-s + \<i>*a) = 0"
[PROOF STATE]
proof (state)
this:
\<chi> \<in> dcharacters n
1 - \<chi> p * of_nat p powr (- s + \<i> * complex_of_real a) = 0

goal (1 subgoal):
 1. \<And>a. \<lbrakk>a \<in> dcharacters n; 1 - a p * of_nat p powr (- s + \<i> * complex_of_real a) = 0\<rbrakk> \<Longrightarrow> False
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<chi> \<in> dcharacters n
1 - \<chi> p * of_nat p powr (- s + \<i> * complex_of_real a) = 0
[PROOF STEP]
interpret dcharacter n G \<chi>
[PROOF STATE]
proof (prove)
using this:
\<chi> \<in> dcharacters n
1 - \<chi> p * of_nat p powr (- s + \<i> * complex_of_real a) = 0

goal (1 subgoal):
 1. dcharacter n \<chi> &&& G \<equiv> residue_mult_group n
[PROOF STEP]
by (simp_all add: dcharacters_def G_def)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>a. \<lbrakk>a \<in> dcharacters n; 1 - a p * of_nat p powr (- s + \<i> * complex_of_real a) = 0\<rbrakk> \<Longrightarrow> False
[PROOF STEP]
from p
[PROOF STATE]
proof (chain)
picking this:
prime p
coprime p n
[PROOF STEP]
have "real p > real 1"
[PROOF STATE]
proof (prove)
using this:
prime p
coprime p n

goal (1 subgoal):
 1. real 1 < real p
[PROOF STEP]
by (subst of_nat_less_iff) (auto simp: prime_gt_Suc_0_nat)
[PROOF STATE]
proof (state)
this:
real 1 < real p

goal (1 subgoal):
 1. \<And>a. \<lbrakk>a \<in> dcharacters n; 1 - a p * of_nat p powr (- s + \<i> * complex_of_real a) = 0\<rbrakk> \<Longrightarrow> False
[PROOF STEP]
hence "real p powr - Re s < real p powr 0"
[PROOF STATE]
proof (prove)
using this:
real 1 < real p

goal (1 subgoal):
 1. real p powr - Re s < real p powr 0
[PROOF STEP]
using p that
[PROOF STATE]
proof (prove)
using this:
real 1 < real p
prime p
coprime p n
0 < Re s

goal (1 subgoal):
 1. real p powr - Re s < real p powr 0
[PROOF STEP]
by (intro powr_less_mono) auto
[PROOF STATE]
proof (state)
this:
real p powr - Re s < real p powr 0

goal (1 subgoal):
 1. \<And>a. \<lbrakk>a \<in> dcharacters n; 1 - a p * of_nat p powr (- s + \<i> * complex_of_real a) = 0\<rbrakk> \<Longrightarrow> False
[PROOF STEP]
hence "0 < norm (1 :: complex) - norm (\<chi> p * p powr (-s + \<i>*a))"
[PROOF STATE]
proof (prove)
using this:
real p powr - Re s < real p powr 0

goal (1 subgoal):
 1. 0 < cmod 1 - cmod (\<chi> p * of_nat p powr (- s + \<i> * complex_of_real a))
[PROOF STEP]
using p
[PROOF STATE]
proof (prove)
using this:
real p powr - Re s < real p powr 0
prime p
coprime p n

goal (1 subgoal):
 1. 0 < cmod 1 - cmod (\<chi> p * of_nat p powr (- s + \<i> * complex_of_real a))
[PROOF STEP]
by (simp add: norm_mult norm norm_powr_real_powr)
[PROOF STATE]
proof (state)
this:
0 < cmod 1 - cmod (\<chi> p * of_nat p powr (- s + \<i> * complex_of_real a))

goal (1 subgoal):
 1. \<And>a. \<lbrakk>a \<in> dcharacters n; 1 - a p * of_nat p powr (- s + \<i> * complex_of_real a) = 0\<rbrakk> \<Longrightarrow> False
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
0 < cmod 1 - cmod (\<chi> p * of_nat p powr (- s + \<i> * complex_of_real a))

goal (1 subgoal):
 1. \<And>a. \<lbrakk>a \<in> dcharacters n; 1 - a p * of_nat p powr (- s + \<i> * complex_of_real a) = 0\<rbrakk> \<Longrightarrow> False
[PROOF STEP]
have "\<dots> \<le> norm (1 - \<chi> p * p powr (-s + \<i>*a))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. cmod 1 - cmod (\<chi> p * of_nat p powr (- s + \<i> * complex_of_real a)) \<le> cmod (1 - \<chi> p * of_nat p powr (- s + \<i> * complex_of_real a))
[PROOF STEP]
by (rule norm_triangle_ineq2)
[PROOF STATE]
proof (state)
this:
cmod 1 - cmod (\<chi> p * of_nat p powr (- s + \<i> * complex_of_real a)) \<le> cmod (1 - \<chi> p * of_nat p powr (- s + \<i> * complex_of_real a))

goal (1 subgoal):
 1. \<And>a. \<lbrakk>a \<in> dcharacters n; 1 - a p * of_nat p powr (- s + \<i> * complex_of_real a) = 0\<rbrakk> \<Longrightarrow> False
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
0 < cmod (1 - \<chi> p * of_nat p powr (- s + \<i> * complex_of_real a))
[PROOF STEP]
show False
[PROOF STATE]
proof (prove)
using this:
0 < cmod (1 - \<chi> p * of_nat p powr (- s + \<i> * complex_of_real a))

goal (1 subgoal):
 1. False
[PROOF STEP]
by (subst (asm) *) simp_all
[PROOF STATE]
proof (state)
this:
False

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
0 < Re ?s1 \<Longrightarrow> g ?a1 ?s1 \<noteq> 0

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
have [holomorphic_intros]: "g a holomorphic_on A" for a A
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. g a holomorphic_on A
[PROOF STEP]
unfolding g_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>s. \<Prod>\<chi>\<in>dcharacters n. 1 - \<chi> p * of_nat p powr (- s + \<i> * complex_of_real a)) holomorphic_on A
[PROOF STEP]
using p
[PROOF STATE]
proof (prove)
using this:
prime p
coprime p n

goal (1 subgoal):
 1. (\<lambda>s. \<Prod>\<chi>\<in>dcharacters n. 1 - \<chi> p * of_nat p powr (- s + \<i> * complex_of_real a)) holomorphic_on A
[PROOF STEP]
by (intro holomorphic_intros)

    \<comment> \<open>By taking Euler product expansions of every factor, we get
          \[R(s) = \frac{1}{g(0,s)^2 g(a,s) g(-a,s)} =
              (1 - 2^{-s})^{-2} (1 - 2^{-s+ia})^{-1} (1 - 2^{-s-ia})^{-1}\]
        for every $s$ with $\mathfrak{R}(s) > 1$, and by analytic continuation also for
        $\mathfrak{R}(s) > 0$.\<close>
[PROOF STATE]
proof (state)
this:
g ?a1 holomorphic_on ?A1

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
have eval_R: "eval_fds R_fds s = 1 / (g 0 s ^ 2 * g a s * g (-a) s)"
      (is "_ = ?f s") if "Re s > 0" for s :: complex
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. eval_fds R_fds s = 1 / ((g 0 s)\<^sup>2 * g a s * g (- a) s)
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. eval_fds R_fds s = 1 / ((g 0 s)\<^sup>2 * g a s * g (- a) s)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. eval_fds R_fds s = 1 / ((g 0 s)\<^sup>2 * g a s * g (- a) s)
[PROOF STEP]
proof (rule analytic_continuation_open[where f = "eval_fds R_fds"])
[PROOF STATE]
proof (state)
goal (9 subgoals):
 1. open ?s
 2. open ?s'
 3. ?s \<noteq> {}
 4. connected ?s'
 5. ?s \<subseteq> ?s'
 6. eval_fds R_fds holomorphic_on ?s'
 7. (\<lambda>b. 1 / ((g 0 b)\<^sup>2 * g a b * g (- a) b)) holomorphic_on ?s'
 8. \<And>z. z \<in> ?s \<Longrightarrow> eval_fds R_fds z = 1 / ((g 0 z)\<^sup>2 * g a z * g (- a) z)
 9. s \<in> ?s'
[PROOF STEP]
show "?f holomorphic_on {s. Re s > 0}"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>b. 1 / ((g 0 b)\<^sup>2 * g a b * g (- a) b)) holomorphic_on {s. 0 < Re s}
[PROOF STEP]
using p g_nz[of 0] g_nz[of a] g_nz[of "-a"]
[PROOF STATE]
proof (prove)
using this:
prime p
coprime p n
0 < Re 0 \<Longrightarrow> g ?a1 0 \<noteq> 0
0 < Re (complex_of_real a) \<Longrightarrow> g ?a1 (complex_of_real a) \<noteq> 0
0 < Re (complex_of_real (- a)) \<Longrightarrow> g ?a1 (complex_of_real (- a)) \<noteq> 0

goal (1 subgoal):
 1. (\<lambda>b. 1 / ((g 0 b)\<^sup>2 * g a b * g (- a) b)) holomorphic_on {s. 0 < Re s}
[PROOF STEP]
by (intro holomorphic_intros) (auto simp: g_nz)
[PROOF STATE]
proof (state)
this:
(\<lambda>b. 1 / ((g 0 b)\<^sup>2 * g a b * g (- a) b)) holomorphic_on {s. 0 < Re s}

goal (8 subgoals):
 1. open ?s
 2. open {s. 0 < Re s}
 3. ?s \<noteq> {}
 4. connected {s. 0 < Re s}
 5. ?s \<subseteq> {s. 0 < Re s}
 6. eval_fds R_fds holomorphic_on {s. 0 < Re s}
 7. \<And>z. z \<in> ?s \<Longrightarrow> eval_fds R_fds z = 1 / ((g 0 z)\<^sup>2 * g a z * g (- a) z)
 8. s \<in> {s. 0 < Re s}
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (8 subgoals):
 1. open ?s
 2. open {s. 0 < Re s}
 3. ?s \<noteq> {}
 4. connected {s. 0 < Re s}
 5. ?s \<subseteq> {s. 0 < Re s}
 6. eval_fds R_fds holomorphic_on {s. 0 < Re s}
 7. \<And>z. z \<in> ?s \<Longrightarrow> eval_fds R_fds z = 1 / ((g 0 z)\<^sup>2 * g a z * g (- a) z)
 8. s \<in> {s. 0 < Re s}
[PROOF STEP]
fix z
[PROOF STATE]
proof (state)
goal (8 subgoals):
 1. open ?s
 2. open {s. 0 < Re s}
 3. ?s \<noteq> {}
 4. connected {s. 0 < Re s}
 5. ?s \<subseteq> {s. 0 < Re s}
 6. eval_fds R_fds holomorphic_on {s. 0 < Re s}
 7. \<And>z. z \<in> ?s \<Longrightarrow> eval_fds R_fds z = 1 / ((g 0 z)\<^sup>2 * g a z * g (- a) z)
 8. s \<in> {s. 0 < Re s}
[PROOF STEP]
assume z: "z \<in> {s. Re s > 1}"
[PROOF STATE]
proof (state)
this:
z \<in> {s. 1 < Re s}

goal (8 subgoals):
 1. open ?s
 2. open {s. 0 < Re s}
 3. ?s \<noteq> {}
 4. connected {s. 0 < Re s}
 5. ?s \<subseteq> {s. 0 < Re s}
 6. eval_fds R_fds holomorphic_on {s. 0 < Re s}
 7. \<And>z. z \<in> ?s \<Longrightarrow> eval_fds R_fds z = 1 / ((g 0 z)\<^sup>2 * g a z * g (- a) z)
 8. s \<in> {s. 0 < Re s}
[PROOF STEP]
have [simp]: "completely_multiplicative_function \<chi>" "fds_nth (fds \<chi>) = \<chi>"
          if "\<chi> \<in> dcharacters n" for \<chi>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. completely_multiplicative_function \<chi> &&& fds_nth (fds \<chi>) = \<chi>
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. completely_multiplicative_function \<chi>
 2. fds_nth (fds \<chi>) = \<chi>
[PROOF STEP]
from that
[PROOF STATE]
proof (chain)
picking this:
\<chi> \<in> dcharacters n
[PROOF STEP]
interpret dcharacter n G \<chi>
[PROOF STATE]
proof (prove)
using this:
\<chi> \<in> dcharacters n

goal (1 subgoal):
 1. dcharacter n \<chi> &&& G \<equiv> residue_mult_group n
[PROOF STEP]
by (simp_all add: G_def dcharacters_def)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. completely_multiplicative_function \<chi>
 2. fds_nth (fds \<chi>) = \<chi>
[PROOF STEP]
show "completely_multiplicative_function \<chi>" "fds_nth (fds \<chi>) = \<chi>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. completely_multiplicative_function \<chi> &&& fds_nth (fds \<chi>) = \<chi>
[PROOF STEP]
by (simp_all add: fds_nth_fds' mult.completely_multiplicative_function_axioms)
[PROOF STATE]
proof (state)
this:
completely_multiplicative_function \<chi>
fds_nth (fds \<chi>) = \<chi>

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
?\<chi>1 \<in> dcharacters n \<Longrightarrow> completely_multiplicative_function ?\<chi>1
?\<chi>1 \<in> dcharacters n \<Longrightarrow> fds_nth (fds ?\<chi>1) = ?\<chi>1

goal (8 subgoals):
 1. open ?s
 2. open {s. 0 < Re s}
 3. ?s \<noteq> {}
 4. connected {s. 0 < Re s}
 5. ?s \<subseteq> {s. 0 < Re s}
 6. eval_fds R_fds holomorphic_on {s. 0 < Re s}
 7. \<And>z. z \<in> ?s \<Longrightarrow> eval_fds R_fds z = 1 / ((g 0 z)\<^sup>2 * g a z * g (- a) z)
 8. s \<in> {s. 0 < Re s}
[PROOF STEP]
have [simp]: "dcharacter n \<chi>" if "\<chi> \<in> dcharacters n" for \<chi>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dcharacter n \<chi>
[PROOF STEP]
using that
[PROOF STATE]
proof (prove)
using this:
\<chi> \<in> dcharacters n

goal (1 subgoal):
 1. dcharacter n \<chi>
[PROOF STEP]
by (simp add: dcharacters_def)
[PROOF STATE]
proof (state)
this:
?\<chi>1 \<in> dcharacters n \<Longrightarrow> dcharacter n ?\<chi>1

goal (8 subgoals):
 1. open ?s
 2. open {s. 0 < Re s}
 3. ?s \<noteq> {}
 4. connected {s. 0 < Re s}
 5. ?s \<subseteq> {s. 0 < Re s}
 6. eval_fds R_fds holomorphic_on {s. 0 < Re s}
 7. \<And>z. z \<in> ?s \<Longrightarrow> eval_fds R_fds z = 1 / ((g 0 z)\<^sup>2 * g a z * g (- a) z)
 8. s \<in> {s. 0 < Re s}
[PROOF STEP]
from that
[PROOF STATE]
proof (chain)
picking this:
0 < Re s
[PROOF STEP]
have "abs_conv_abscissa (fds \<chi>) < ereal (Re z)" if "\<chi> \<in> dcharacters n" for \<chi>
[PROOF STATE]
proof (prove)
using this:
0 < Re s

goal (1 subgoal):
 1. abs_conv_abscissa (fds \<chi>) < ereal (Re z)
[PROOF STEP]
using that z
[PROOF STATE]
proof (prove)
using this:
0 < Re s
\<chi> \<in> dcharacters n
z \<in> {s. 1 < Re s}

goal (1 subgoal):
 1. abs_conv_abscissa (fds \<chi>) < ereal (Re z)
[PROOF STEP]
by (intro le_less_trans[OF dcharacter.abs_conv_abscissa_weak[of n \<chi>]]) auto
[PROOF STATE]
proof (state)
this:
?\<chi>1 \<in> dcharacters n \<Longrightarrow> abs_conv_abscissa (fds ?\<chi>1) < ereal (Re z)

goal (8 subgoals):
 1. open ?s
 2. open {s. 0 < Re s}
 3. ?s \<noteq> {}
 4. connected {s. 0 < Re s}
 5. ?s \<subseteq> {s. 0 < Re s}
 6. eval_fds R_fds holomorphic_on {s. 0 < Re s}
 7. \<And>z. z \<in> ?s \<Longrightarrow> eval_fds R_fds z = 1 / ((g 0 z)\<^sup>2 * g a z * g (- a) z)
 8. s \<in> {s. 0 < Re s}
[PROOF STEP]
thus "eval_fds R_fds z = ?f z"
[PROOF STATE]
proof (prove)
using this:
?\<chi>1 \<in> dcharacters n \<Longrightarrow> abs_conv_abscissa (fds ?\<chi>1) < ereal (Re z)

goal (1 subgoal):
 1. eval_fds R_fds z = 1 / ((g 0 z)\<^sup>2 * g a z * g (- a) z)
[PROOF STEP]
using z p
[PROOF STATE]
proof (prove)
using this:
?\<chi>1 \<in> dcharacters n \<Longrightarrow> abs_conv_abscissa (fds ?\<chi>1) < ereal (Re z)
z \<in> {s. 1 < Re s}
prime p
coprime p n

goal (1 subgoal):
 1. eval_fds R_fds z = 1 / ((g 0 z)\<^sup>2 * g a z * g (- a) z)
[PROOF STEP]
by (simp add: R_fds_def Q_fds_def Z_fds_def eval_fds_mult eval_fds_prod eval_fds_power
               fds_abs_converges_mult fds_abs_converges_power fds_abs_converges_prod g_def mult_ac
               fds_primepow_subseries_euler_product_cm powr_minus powr_diff powr_add  prod_dividef
               fds_abs_summable_zeta g_nz fds_abs_converges power_one_over divide_inverse [symmetric])
[PROOF STATE]
proof (state)
this:
eval_fds R_fds z = 1 / ((g 0 z)\<^sup>2 * g a z * g (- a) z)

goal (7 subgoals):
 1. open {s. 1 < Re s}
 2. open {s. 0 < Re s}
 3. {s. 1 < Re s} \<noteq> {}
 4. connected {s. 0 < Re s}
 5. {s. 1 < Re s} \<subseteq> {s. 0 < Re s}
 6. eval_fds R_fds holomorphic_on {s. 0 < Re s}
 7. s \<in> {s. 0 < Re s}
[PROOF STEP]
qed (insert that abscissa', auto intro!: exI[of _ 2] convex_connected open_halfspace_Re_gt
                                               convex_halfspace_Re_gt holomorphic_intros)
[PROOF STATE]
proof (state)
this:
eval_fds R_fds s = 1 / ((g 0 s)\<^sup>2 * g a s * g (- a) s)

goal:
No subgoals!
[PROOF STEP]
qed

    \<comment> \<open>We again have our contradiction: $R(s)$ is entire, but the right-hand side has a pole at 0
        since $g(0,0) = 0$.\<close>
[PROOF STATE]
proof (state)
this:
0 < Re ?s1 \<Longrightarrow> eval_fds R_fds ?s1 = 1 / ((g 0 ?s1)\<^sup>2 * g a ?s1 * g (- a) ?s1)

goal (1 subgoal):
 1. Dirichlet_L n \<chi> u = 0 \<Longrightarrow> False
[PROOF STEP]
show False
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. False
[PROOF STEP]
proof (rule not_tendsto_and_filterlim_at_infinity)
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. ?F \<noteq> bot
 2. (?f \<longlongrightarrow> ?c) ?F
 3. filterlim ?f at_infinity ?F
[PROOF STEP]
have g_limit: "(g a \<longlongrightarrow> g a 0) (at 0 within {s. Re s > 0})" for a
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (g a \<longlongrightarrow> g a 0) (at 0 within {s. 0 < Re s})
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. (g a \<longlongrightarrow> g a 0) (at 0 within {s. 0 < Re s})
[PROOF STEP]
have "continuous_on UNIV (g a)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. continuous_on UNIV (g a)
[PROOF STEP]
by (intro holomorphic_on_imp_continuous_on holomorphic_intros)
[PROOF STATE]
proof (state)
this:
continuous_on UNIV (g a)

goal (1 subgoal):
 1. (g a \<longlongrightarrow> g a 0) (at 0 within {s. 0 < Re s})
[PROOF STEP]
hence "isCont (g a) 0"
[PROOF STATE]
proof (prove)
using this:
continuous_on UNIV (g a)

goal (1 subgoal):
 1. isCont (g a) 0
[PROOF STEP]
by (rule continuous_on_interior) auto
[PROOF STATE]
proof (state)
this:
isCont (g a) 0

goal (1 subgoal):
 1. (g a \<longlongrightarrow> g a 0) (at 0 within {s. 0 < Re s})
[PROOF STEP]
hence "continuous (at 0 within {s. Re s > 0}) (g a)"
[PROOF STATE]
proof (prove)
using this:
isCont (g a) 0

goal (1 subgoal):
 1. continuous (at 0 within {s. 0 < Re s}) (g a)
[PROOF STEP]
by (rule continuous_within_subset) auto
[PROOF STATE]
proof (state)
this:
continuous (at 0 within {s. 0 < Re s}) (g a)

goal (1 subgoal):
 1. (g a \<longlongrightarrow> g a 0) (at 0 within {s. 0 < Re s})
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
continuous (at 0 within {s. 0 < Re s}) (g a)

goal (1 subgoal):
 1. (g a \<longlongrightarrow> g a 0) (at 0 within {s. 0 < Re s})
[PROOF STEP]
by (auto simp: continuous_within)
[PROOF STATE]
proof (state)
this:
(g a \<longlongrightarrow> g a 0) (at 0 within {s. 0 < Re s})

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(g ?a1 \<longlongrightarrow> g ?a1 0) (at 0 within {s. 0 < Re s})

goal (3 subgoals):
 1. ?F \<noteq> bot
 2. (?f \<longlongrightarrow> ?c) ?F
 3. filterlim ?f at_infinity ?F
[PROOF STEP]
have "((\<lambda>s. g 0 s ^ 2 * g a s * g (-a) s) \<longlongrightarrow> g 0 0 ^ 2 * g a 0 * g (-a) 0)
              (at 0 within {s. Re s > 0})"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ((\<lambda>s. (g 0 s)\<^sup>2 * g a s * g (- a) s) \<longlongrightarrow> (g 0 0)\<^sup>2 * g a 0 * g (- a) 0) (at 0 within {s. 0 < Re s})
[PROOF STEP]
by (intro tendsto_intros g_limit)
[PROOF STATE]
proof (state)
this:
((\<lambda>s. (g 0 s)\<^sup>2 * g a s * g (- a) s) \<longlongrightarrow> (g 0 0)\<^sup>2 * g a 0 * g (- a) 0) (at 0 within {s. 0 < Re s})

goal (3 subgoals):
 1. ?F \<noteq> bot
 2. (?f \<longlongrightarrow> ?c) ?F
 3. filterlim ?f at_infinity ?F
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
((\<lambda>s. (g 0 s)\<^sup>2 * g a s * g (- a) s) \<longlongrightarrow> (g 0 0)\<^sup>2 * g a 0 * g (- a) 0) (at 0 within {s. 0 < Re s})

goal (3 subgoals):
 1. ?F \<noteq> bot
 2. (?f \<longlongrightarrow> ?c) ?F
 3. filterlim ?f at_infinity ?F
[PROOF STEP]
have "g 0 0 = 0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. g 0 0 = 0
[PROOF STEP]
unfolding g_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<Prod>\<chi>\<in>dcharacters n. 1 - \<chi> p * of_nat p powr (- 0 + \<i> * complex_of_real 0)) = 0
[PROOF STEP]
proof (rule prod_zero)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. finite (dcharacters n)
 2. \<exists>a\<in>dcharacters n. 1 - a p * of_nat p powr (- 0 + \<i> * complex_of_real 0) = 0
[PROOF STEP]
from p and \<chi>\<^sub>0
[PROOF STATE]
proof (chain)
picking this:
prime p
coprime p n
\<chi>\<^sub>0 \<in> dcharacters n
[PROOF STEP]
show "\<exists>\<chi>\<in>dcharacters n. 1 - \<chi> p * of_nat p powr (- 0 + \<i> * of_real 0) = 0"
[PROOF STATE]
proof (prove)
using this:
prime p
coprime p n
\<chi>\<^sub>0 \<in> dcharacters n

goal (1 subgoal):
 1. \<exists>\<chi>\<in>dcharacters n. 1 - \<chi> p * of_nat p powr (- 0 + \<i> * complex_of_real 0) = 0
[PROOF STEP]
by (intro bexI[of _ \<chi>\<^sub>0]) (auto simp: principal_dchar_def)
[PROOF STATE]
proof (state)
this:
\<exists>\<chi>\<in>dcharacters n. 1 - \<chi> p * of_nat p powr (- 0 + \<i> * complex_of_real 0) = 0

goal (1 subgoal):
 1. finite (dcharacters n)
[PROOF STEP]
qed auto
[PROOF STATE]
proof (state)
this:
g 0 0 = 0

goal (3 subgoals):
 1. ?F \<noteq> bot
 2. (?f \<longlongrightarrow> ?c) ?F
 3. filterlim ?f at_infinity ?F
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
g 0 0 = 0

goal (3 subgoals):
 1. ?F \<noteq> bot
 2. (?f \<longlongrightarrow> ?c) ?F
 3. filterlim ?f at_infinity ?F
[PROOF STEP]
have "eventually (\<lambda>s. s \<in> {s. Re s > 0}) (at 0 within {s. Re s > 0})"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<forall>\<^sub>F s in at 0 within {s. 0 < Re s}. s \<in> {s. 0 < Re s}
[PROOF STEP]
by (auto simp: eventually_at_filter)
[PROOF STATE]
proof (state)
this:
\<forall>\<^sub>F s in at 0 within {s. 0 < Re s}. s \<in> {s. 0 < Re s}

goal (3 subgoals):
 1. ?F \<noteq> bot
 2. (?f \<longlongrightarrow> ?c) ?F
 3. filterlim ?f at_infinity ?F
[PROOF STEP]
hence "eventually (\<lambda>s. g 0 s ^ 2 * g a s * g (-a) s \<noteq> 0) (at 0 within {s. Re s > 0})"
[PROOF STATE]
proof (prove)
using this:
\<forall>\<^sub>F s in at 0 within {s. 0 < Re s}. s \<in> {s. 0 < Re s}

goal (1 subgoal):
 1. \<forall>\<^sub>F s in at 0 within {s. 0 < Re s}. (g 0 s)\<^sup>2 * g a s * g (- a) s \<noteq> 0
[PROOF STEP]
by eventually_elim (auto simp: g_nz)
[PROOF STATE]
proof (state)
this:
\<forall>\<^sub>F s in at 0 within {s. 0 < Re s}. (g 0 s)\<^sup>2 * g a s * g (- a) s \<noteq> 0

goal (3 subgoals):
 1. ?F \<noteq> bot
 2. (?f \<longlongrightarrow> ?c) ?F
 3. filterlim ?f at_infinity ?F
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
((\<lambda>s. (g 0 s)\<^sup>2 * g a s * g (- a) s) \<longlongrightarrow> (g 0 0)\<^sup>2 * g a 0 * g (- a) 0) (at 0 within {s. 0 < Re s})
g 0 0 = 0
\<forall>\<^sub>F s in at 0 within {s. 0 < Re s}. (g 0 s)\<^sup>2 * g a s * g (- a) s \<noteq> 0
[PROOF STEP]
have "filterlim (\<lambda>s. g 0 s ^ 2 * g a s * g (-a) s) (at 0)
                         (at 0 within {s. Re s > 0})"
[PROOF STATE]
proof (prove)
using this:
((\<lambda>s. (g 0 s)\<^sup>2 * g a s * g (- a) s) \<longlongrightarrow> (g 0 0)\<^sup>2 * g a 0 * g (- a) 0) (at 0 within {s. 0 < Re s})
g 0 0 = 0
\<forall>\<^sub>F s in at 0 within {s. 0 < Re s}. (g 0 s)\<^sup>2 * g a s * g (- a) s \<noteq> 0

goal (1 subgoal):
 1. LIM s at 0 within {s. 0 < Re s}. (g 0 s)\<^sup>2 * g a s * g (- a) s :> at 0
[PROOF STEP]
by (simp add: filterlim_at)
[PROOF STATE]
proof (state)
this:
LIM s at 0 within {s. 0 < Re s}. (g 0 s)\<^sup>2 * g a s * g (- a) s :> at 0

goal (3 subgoals):
 1. ?F \<noteq> bot
 2. (?f \<longlongrightarrow> ?c) ?F
 3. filterlim ?f at_infinity ?F
[PROOF STEP]
hence "filterlim ?f at_infinity (at 0 within {s. Re s > 0})" (is ?lim)
[PROOF STATE]
proof (prove)
using this:
LIM s at 0 within {s. 0 < Re s}. (g 0 s)\<^sup>2 * g a s * g (- a) s :> at 0

goal (1 subgoal):
 1. LIM b at 0 within {s. 0 < Re s}. 1 / ((g 0 b)\<^sup>2 * g a b * g (- a) b) :> at_infinity
[PROOF STEP]
by (intro filterlim_divide_at_infinity[OF tendsto_const]
                     tendsto_mult_filterlim_at_infinity) auto
[PROOF STATE]
proof (state)
this:
LIM b at 0 within {s. 0 < Re s}. 1 / ((g 0 b)\<^sup>2 * g a b * g (- a) b) :> at_infinity

goal (3 subgoals):
 1. ?F \<noteq> bot
 2. (?f \<longlongrightarrow> ?c) ?F
 3. filterlim ?f at_infinity ?F
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
LIM b at 0 within {s. 0 < Re s}. 1 / ((g 0 b)\<^sup>2 * g a b * g (- a) b) :> at_infinity

goal (3 subgoals):
 1. ?F \<noteq> bot
 2. (?f \<longlongrightarrow> ?c) ?F
 3. filterlim ?f at_infinity ?F
[PROOF STEP]
have ev: "eventually (\<lambda>s. Re s > 0) (at 0 within {s. Re s > 0})"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<forall>\<^sub>F s in at 0 within {s. 0 < Re s}. 0 < Re s
[PROOF STEP]
by (auto simp: eventually_at intro!: exI[of _ 1])
[PROOF STATE]
proof (state)
this:
\<forall>\<^sub>F s in at 0 within {s. 0 < Re s}. 0 < Re s

goal (3 subgoals):
 1. ?F \<noteq> bot
 2. (?f \<longlongrightarrow> ?c) ?F
 3. filterlim ?f at_infinity ?F
[PROOF STEP]
have "?lim \<longleftrightarrow> filterlim (eval_fds R_fds) at_infinity (at 0 within {s. Re s > 0})"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (LIM b at 0 within {s. 0 < Re s}. 1 / ((g 0 b)\<^sup>2 * g a b * g (- a) b) :> at_infinity) = filterlim (eval_fds R_fds) at_infinity (at 0 within {s. 0 < Re s})
[PROOF STEP]
by (intro filterlim_cong refl eventually_mono[OF ev]) (auto simp: eval_R)
[PROOF STATE]
proof (state)
this:
(LIM b at 0 within {s. 0 < Re s}. 1 / ((g 0 b)\<^sup>2 * g a b * g (- a) b) :> at_infinity) = filterlim (eval_fds R_fds) at_infinity (at 0 within {s. 0 < Re s})

goal (3 subgoals):
 1. ?F \<noteq> bot
 2. (?f \<longlongrightarrow> ?c) ?F
 3. filterlim ?f at_infinity ?F
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
filterlim (eval_fds R_fds) at_infinity (at 0 within {s. 0 < Re s})
[PROOF STEP]
show \<dots>
[PROOF STATE]
proof (prove)
using this:
filterlim (eval_fds R_fds) at_infinity (at 0 within {s. 0 < Re s})

goal (1 subgoal):
 1. filterlim (eval_fds R_fds) at_infinity (at 0 within {s. 0 < Re s})
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
filterlim (eval_fds R_fds) at_infinity (at 0 within {s. 0 < Re s})

goal (2 subgoals):
 1. at 0 within {s. 0 < Re s} \<noteq> bot
 2. (eval_fds R_fds \<longlongrightarrow> ?c) (at 0 within {s. 0 < Re s})
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. at 0 within {s. 0 < Re s} \<noteq> bot
 2. (eval_fds R_fds \<longlongrightarrow> ?c) (at 0 within {s. 0 < Re s})
[PROOF STEP]
have "continuous (at 0 within {s. Re s > 0}) (eval_fds R_fds)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. continuous (at 0 within {s. 0 < Re s}) (eval_fds R_fds)
[PROOF STEP]
by (intro continuous_intros) (auto simp: abscissa')
[PROOF STATE]
proof (state)
this:
continuous (at 0 within {s. 0 < Re s}) (eval_fds R_fds)

goal (2 subgoals):
 1. at 0 within {s. 0 < Re s} \<noteq> bot
 2. (eval_fds R_fds \<longlongrightarrow> ?c) (at 0 within {s. 0 < Re s})
[PROOF STEP]
thus "((eval_fds R_fds \<longlongrightarrow> eval_fds R_fds 0)) (at 0 within {s. Re s > 0})"
[PROOF STATE]
proof (prove)
using this:
continuous (at 0 within {s. 0 < Re s}) (eval_fds R_fds)

goal (1 subgoal):
 1. (eval_fds R_fds \<longlongrightarrow> eval_fds R_fds 0) (at 0 within {s. 0 < Re s})
[PROOF STEP]
by (auto simp: continuous_within)
[PROOF STATE]
proof (state)
this:
(eval_fds R_fds \<longlongrightarrow> eval_fds R_fds 0) (at 0 within {s. 0 < Re s})

goal (1 subgoal):
 1. at 0 within {s. 0 < Re s} \<noteq> bot
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. at 0 within {s. 0 < Re s} \<noteq> bot
[PROOF STEP]
have "0 \<in> {s. Re s \<ge> 0}"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 \<in> {s. 0 \<le> Re s}
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
0 \<in> {s. 0 \<le> Re s}

goal (1 subgoal):
 1. at 0 within {s. 0 < Re s} \<noteq> bot
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
0 \<in> {s. 0 \<le> Re s}

goal (1 subgoal):
 1. at 0 within {s. 0 < Re s} \<noteq> bot
[PROOF STEP]
have "{s. Re s \<ge> 0} = closure {s. Re s > 0}"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. {s. 0 \<le> Re s} = closure {s. 0 < Re s}
[PROOF STEP]
using closure_halfspace_gt[of "1::complex" 0]
[PROOF STATE]
proof (prove)
using this:
1 \<noteq> 0 \<Longrightarrow> closure {x. 0 < 1 \<bullet> x} = {x. 0 \<le> 1 \<bullet> x}

goal (1 subgoal):
 1. {s. 0 \<le> Re s} = closure {s. 0 < Re s}
[PROOF STEP]
by (simp add: inner_commute)
[PROOF STATE]
proof (state)
this:
{s. 0 \<le> Re s} = closure {s. 0 < Re s}

goal (1 subgoal):
 1. at 0 within {s. 0 < Re s} \<noteq> bot
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
0 \<in> closure {s. 0 < Re s}
[PROOF STEP]
have "0 \<in> \<dots>"
[PROOF STATE]
proof (prove)
using this:
0 \<in> closure {s. 0 < Re s}

goal (1 subgoal):
 1. 0 \<in> closure {s. 0 < Re s}
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
0 \<in> closure {s. 0 < Re s}

goal (1 subgoal):
 1. at 0 within {s. 0 < Re s} \<noteq> bot
[PROOF STEP]
thus "at 0 within {s. Re s > 0} \<noteq> bot"
[PROOF STATE]
proof (prove)
using this:
0 \<in> closure {s. 0 < Re s}

goal (1 subgoal):
 1. at 0 within {s. 0 < Re s} \<noteq> bot
[PROOF STEP]
by (subst at_within_eq_bot_iff) auto
[PROOF STATE]
proof (state)
this:
at 0 within {s. 0 < Re s} \<noteq> bot

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
False

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
Dirichlet_L n \<chi> u \<noteq> 0

goal (1 subgoal):
 1. 1 < Re u \<Longrightarrow> Dirichlet_L n \<chi> u \<noteq> 0
[PROOF STEP]
qed (fact Dirichlet_L_Re_gt_1_nonzero)