src/HOL/Analysis/Infinite_Products.thy
changeset 68651 16d98ef49a2c
parent 68616 cedf3480fdad
child 69529 4ab9657b3257
equal deleted inserted replaced
68650:7538b5f301ea 68651:16d98ef49a2c
     7 section \<open>Infinite Products\<close>
     7 section \<open>Infinite Products\<close>
     8 theory Infinite_Products
     8 theory Infinite_Products
     9   imports Topology_Euclidean_Space Complex_Transcendental
     9   imports Topology_Euclidean_Space Complex_Transcendental
    10 begin
    10 begin
    11 
    11 
    12 subsection\<open>Preliminaries\<close>
    12 subsection%unimportant \<open>Preliminaries\<close>
    13 
    13 
    14 lemma sum_le_prod:
    14 lemma sum_le_prod:
    15   fixes f :: "'a \<Rightarrow> 'b :: linordered_semidom"
    15   fixes f :: "'a \<Rightarrow> 'b :: linordered_semidom"
    16   assumes "\<And>x. x \<in> A \<Longrightarrow> f x \<ge> 0"
    16   assumes "\<And>x. x \<in> A \<Longrightarrow> f x \<ge> 0"
    17   shows   "sum f A \<le> (\<Prod>x\<in>A. 1 + f x)"
    17   shows   "sum f A \<le> (\<Prod>x\<in>A. 1 + f x)"
    52     by (rule tendsto_eq_intros refl | simp)+
    52     by (rule tendsto_eq_intros refl | simp)+
    53 qed auto
    53 qed auto
    54 
    54 
    55 subsection\<open>Definitions and basic properties\<close>
    55 subsection\<open>Definitions and basic properties\<close>
    56 
    56 
    57 definition raw_has_prod :: "[nat \<Rightarrow> 'a::{t2_space, comm_semiring_1}, nat, 'a] \<Rightarrow> bool" 
    57 definition%important raw_has_prod :: "[nat \<Rightarrow> 'a::{t2_space, comm_semiring_1}, nat, 'a] \<Rightarrow> bool" 
    58   where "raw_has_prod f M p \<equiv> (\<lambda>n. \<Prod>i\<le>n. f (i+M)) \<longlonglongrightarrow> p \<and> p \<noteq> 0"
    58   where "raw_has_prod f M p \<equiv> (\<lambda>n. \<Prod>i\<le>n. f (i+M)) \<longlonglongrightarrow> p \<and> p \<noteq> 0"
    59 
    59 
    60 text\<open>The nonzero and zero cases, as in \emph{Complex Analysis} by Joseph Bak and Donald J.Newman, page 241\<close>
    60 text\<open>The nonzero and zero cases, as in \emph{Complex Analysis} by Joseph Bak and Donald J.Newman, page 241\<close>
    61 definition has_prod :: "(nat \<Rightarrow> 'a::{t2_space, comm_semiring_1}) \<Rightarrow> 'a \<Rightarrow> bool" (infixr "has'_prod" 80)
    61 definition%important
       
    62   has_prod :: "(nat \<Rightarrow> 'a::{t2_space, comm_semiring_1}) \<Rightarrow> 'a \<Rightarrow> bool" (infixr "has'_prod" 80)
    62   where "f has_prod p \<equiv> raw_has_prod f 0 p \<or> (\<exists>i q. p = 0 \<and> f i = 0 \<and> raw_has_prod f (Suc i) q)"
    63   where "f has_prod p \<equiv> raw_has_prod f 0 p \<or> (\<exists>i q. p = 0 \<and> f i = 0 \<and> raw_has_prod f (Suc i) q)"
    63 
    64 
    64 definition convergent_prod :: "(nat \<Rightarrow> 'a :: {t2_space,comm_semiring_1}) \<Rightarrow> bool" where
    65 definition%important convergent_prod :: "(nat \<Rightarrow> 'a :: {t2_space,comm_semiring_1}) \<Rightarrow> bool" where
    65   "convergent_prod f \<equiv> \<exists>M p. raw_has_prod f M p"
    66   "convergent_prod f \<equiv> \<exists>M p. raw_has_prod f M p"
    66 
    67 
    67 definition prodinf :: "(nat \<Rightarrow> 'a::{t2_space, comm_semiring_1}) \<Rightarrow> 'a"
    68 definition%important prodinf :: "(nat \<Rightarrow> 'a::{t2_space, comm_semiring_1}) \<Rightarrow> 'a"
    68     (binder "\<Prod>" 10)
    69     (binder "\<Prod>" 10)
    69   where "prodinf f = (THE p. f has_prod p)"
    70   where "prodinf f = (THE p. f has_prod p)"
    70 
    71 
    71 lemmas prod_defs = raw_has_prod_def has_prod_def convergent_prod_def prodinf_def
    72 lemmas prod_defs = raw_has_prod_def has_prod_def convergent_prod_def prodinf_def
    72 
    73 
   144 qed (auto simp: prod_defs)
   145 qed (auto simp: prod_defs)
   145 
   146 
   146 
   147 
   147 subsection\<open>Absolutely convergent products\<close>
   148 subsection\<open>Absolutely convergent products\<close>
   148 
   149 
   149 definition abs_convergent_prod :: "(nat \<Rightarrow> _) \<Rightarrow> bool" where
   150 definition%important abs_convergent_prod :: "(nat \<Rightarrow> _) \<Rightarrow> bool" where
   150   "abs_convergent_prod f \<longleftrightarrow> convergent_prod (\<lambda>i. 1 + norm (f i - 1))"
   151   "abs_convergent_prod f \<longleftrightarrow> convergent_prod (\<lambda>i. 1 + norm (f i - 1))"
   151 
   152 
   152 lemma abs_convergent_prodI:
   153 lemma abs_convergent_prodI:
   153   assumes "convergent (\<lambda>n. \<Prod>i\<le>n. 1 + norm (f i - 1))"
   154   assumes "convergent (\<lambda>n. \<Prod>i\<le>n. 1 + norm (f i - 1))"
   154   shows   "abs_convergent_prod f"
   155   shows   "abs_convergent_prod f"
   218   assume ?rhs then show ?lhs
   219   assume ?rhs then show ?lhs
   219     unfolding prod_defs
   220     unfolding prod_defs
   220     by (rule_tac x=0 in exI) auto
   221     by (rule_tac x=0 in exI) auto
   221 qed
   222 qed
   222 
   223 
   223 lemma convergent_prod_iff_convergent: 
   224 lemma%important convergent_prod_iff_convergent: 
   224   fixes f :: "nat \<Rightarrow> 'a :: {topological_semigroup_mult,t2_space,idom}"
   225   fixes f :: "nat \<Rightarrow> 'a :: {topological_semigroup_mult,t2_space,idom}"
   225   assumes "\<And>i. f i \<noteq> 0"
   226   assumes "\<And>i. f i \<noteq> 0"
   226   shows "convergent_prod f \<longleftrightarrow> convergent (\<lambda>n. \<Prod>i\<le>n. f i) \<and> lim (\<lambda>n. \<Prod>i\<le>n. f i) \<noteq> 0"
   227   shows "convergent_prod f \<longleftrightarrow> convergent (\<lambda>n. \<Prod>i\<le>n. f i) \<and> lim (\<lambda>n. \<Prod>i\<le>n. f i) \<noteq> 0"
   227   by (force simp: convergent_prod_iff_nz_lim assms convergent_def limI)
   228   by (force simp: convergent_prod_iff_nz_lim assms convergent_def limI)
   228 
   229 
   365     thus "Bseq (\<lambda>n. exp (\<Sum>i\<le>n. norm (f i - 1)))"
   366     thus "Bseq (\<lambda>n. exp (\<Sum>i\<le>n. norm (f i - 1)))"
   366       by (rule convergent_imp_Bseq)
   367       by (rule convergent_imp_Bseq)
   367   qed
   368   qed
   368 qed
   369 qed
   369 
   370 
   370 lemma abs_convergent_prod_conv_summable:
   371 theorem abs_convergent_prod_conv_summable:
   371   fixes f :: "nat \<Rightarrow> 'a :: real_normed_div_algebra"
   372   fixes f :: "nat \<Rightarrow> 'a :: real_normed_div_algebra"
   372   shows "abs_convergent_prod f \<longleftrightarrow> summable (\<lambda>i. norm (f i - 1))"
   373   shows "abs_convergent_prod f \<longleftrightarrow> summable (\<lambda>i. norm (f i - 1))"
   373   by (blast intro: abs_convergent_prod_imp_summable summable_imp_abs_convergent_prod)
   374   by (blast intro: abs_convergent_prod_imp_summable summable_imp_abs_convergent_prod)
   374 
   375 
   375 lemma abs_convergent_prod_imp_LIMSEQ:
   376 lemma abs_convergent_prod_imp_LIMSEQ:
   394   hence "eventually (\<lambda>n. dist (f n) 1 < 1) at_top"
   395   hence "eventually (\<lambda>n. dist (f n) 1 < 1) at_top"
   395     by (auto simp: tendsto_iff)
   396     by (auto simp: tendsto_iff)
   396   thus ?thesis by eventually_elim auto
   397   thus ?thesis by eventually_elim auto
   397 qed
   398 qed
   398 
   399 
       
   400 subsection%unimportant \<open>Ignoring initial segments\<close>
       
   401 
   399 lemma convergent_prod_offset:
   402 lemma convergent_prod_offset:
   400   assumes "convergent_prod (\<lambda>n. f (n + m))"  
   403   assumes "convergent_prod (\<lambda>n. f (n + m))"  
   401   shows   "convergent_prod f"
   404   shows   "convergent_prod f"
   402 proof -
   405 proof -
   403   from assms obtain M L where "(\<lambda>n. \<Prod>k\<le>n. f (k + (M + m))) \<longlonglongrightarrow> L" "L \<noteq> 0"
   406   from assms obtain M L where "(\<lambda>n. \<Prod>k\<le>n. f (k + (M + m))) \<longlonglongrightarrow> L" "L \<noteq> 0"
   409 lemma abs_convergent_prod_offset:
   412 lemma abs_convergent_prod_offset:
   410   assumes "abs_convergent_prod (\<lambda>n. f (n + m))"  
   413   assumes "abs_convergent_prod (\<lambda>n. f (n + m))"  
   411   shows   "abs_convergent_prod f"
   414   shows   "abs_convergent_prod f"
   412   using assms unfolding abs_convergent_prod_def by (rule convergent_prod_offset)
   415   using assms unfolding abs_convergent_prod_def by (rule convergent_prod_offset)
   413 
   416 
   414 subsection\<open>Ignoring initial segments\<close>
       
   415 
   417 
   416 lemma raw_has_prod_ignore_initial_segment:
   418 lemma raw_has_prod_ignore_initial_segment:
   417   fixes f :: "nat \<Rightarrow> 'a :: real_normed_field"
   419   fixes f :: "nat \<Rightarrow> 'a :: real_normed_field"
   418   assumes "raw_has_prod f M p" "N \<ge> M"
   420   assumes "raw_has_prod f M p" "N \<ge> M"
   419   obtains q where  "raw_has_prod f N q"
   421   obtains q where  "raw_has_prod f N q"
   445   moreover from \<open>p \<noteq> 0\<close> have "p / C \<noteq> 0" by simp
   447   moreover from \<open>p \<noteq> 0\<close> have "p / C \<noteq> 0" by simp
   446   ultimately show ?thesis
   448   ultimately show ?thesis
   447     using raw_has_prod_def that by blast 
   449     using raw_has_prod_def that by blast 
   448 qed
   450 qed
   449 
   451 
   450 corollary convergent_prod_ignore_initial_segment:
   452 corollary%unimportant convergent_prod_ignore_initial_segment:
   451   fixes f :: "nat \<Rightarrow> 'a :: real_normed_field"
   453   fixes f :: "nat \<Rightarrow> 'a :: real_normed_field"
   452   assumes "convergent_prod f"
   454   assumes "convergent_prod f"
   453   shows   "convergent_prod (\<lambda>n. f (n + m))"
   455   shows   "convergent_prod (\<lambda>n. f (n + m))"
   454   using assms
   456   using assms
   455   unfolding convergent_prod_def 
   457   unfolding convergent_prod_def 
   456   apply clarify
   458   apply clarify
   457   apply (erule_tac N="M+m" in raw_has_prod_ignore_initial_segment)
   459   apply (erule_tac N="M+m" in raw_has_prod_ignore_initial_segment)
   458   apply (auto simp add: raw_has_prod_def add_ac)
   460   apply (auto simp add: raw_has_prod_def add_ac)
   459   done
   461   done
   460 
   462 
   461 corollary convergent_prod_ignore_nonzero_segment:
   463 corollary%unimportant convergent_prod_ignore_nonzero_segment:
   462   fixes f :: "nat \<Rightarrow> 'a :: real_normed_field"
   464   fixes f :: "nat \<Rightarrow> 'a :: real_normed_field"
   463   assumes f: "convergent_prod f" and nz: "\<And>i. i \<ge> M \<Longrightarrow> f i \<noteq> 0"
   465   assumes f: "convergent_prod f" and nz: "\<And>i. i \<ge> M \<Longrightarrow> f i \<noteq> 0"
   464   shows "\<exists>p. raw_has_prod f M p"
   466   shows "\<exists>p. raw_has_prod f M p"
   465   using convergent_prod_ignore_initial_segment [OF f]
   467   using convergent_prod_ignore_initial_segment [OF f]
   466   by (metis convergent_LIMSEQ_iff convergent_prod_iff_convergent le_add_same_cancel2 nz prod_defs(1) zero_order(1))
   468   by (metis convergent_LIMSEQ_iff convergent_prod_iff_convergent le_add_same_cancel2 nz prod_defs(1) zero_order(1))
   467 
   469 
   468 corollary abs_convergent_prod_ignore_initial_segment:
   470 corollary%unimportant abs_convergent_prod_ignore_initial_segment:
   469   assumes "abs_convergent_prod f"
   471   assumes "abs_convergent_prod f"
   470   shows   "abs_convergent_prod (\<lambda>n. f (n + m))"
   472   shows   "abs_convergent_prod (\<lambda>n. f (n + m))"
   471   using assms unfolding abs_convergent_prod_def 
   473   using assms unfolding abs_convergent_prod_def 
   472   by (rule convergent_prod_ignore_initial_segment)
   474   by (rule convergent_prod_ignore_initial_segment)
   473 
   475 
   474 lemma abs_convergent_prod_imp_convergent_prod:
   476 subsection\<open>More elementary properties\<close>
       
   477 
       
   478 theorem abs_convergent_prod_imp_convergent_prod:
   475   fixes f :: "nat \<Rightarrow> 'a :: {real_normed_div_algebra,complete_space,comm_ring_1}"
   479   fixes f :: "nat \<Rightarrow> 'a :: {real_normed_div_algebra,complete_space,comm_ring_1}"
   476   assumes "abs_convergent_prod f"
   480   assumes "abs_convergent_prod f"
   477   shows   "convergent_prod f"
   481   shows   "convergent_prod f"
   478 proof -
   482 proof -
   479   from assms have "eventually (\<lambda>n. f n \<noteq> 0) sequentially"
   483   from assms have "eventually (\<lambda>n. f n \<noteq> 0) sequentially"
   596     qed simp_all
   600     qed simp_all
   597     thus False by simp
   601     thus False by simp
   598   qed
   602   qed
   599   with L show ?thesis by (auto simp: prod_defs)
   603   with L show ?thesis by (auto simp: prod_defs)
   600 qed
   604 qed
   601 
       
   602 subsection\<open>More elementary properties\<close>
       
   603 
   605 
   604 lemma raw_has_prod_cases:
   606 lemma raw_has_prod_cases:
   605   fixes f :: "nat \<Rightarrow> 'a :: {idom,topological_semigroup_mult,t2_space}"
   607   fixes f :: "nat \<Rightarrow> 'a :: {idom,topological_semigroup_mult,t2_space}"
   606   assumes "raw_has_prod f M p"
   608   assumes "raw_has_prod f M p"
   607   obtains i where "i<M" "f i = 0" | p where "raw_has_prod f 0 p"
   609   obtains i where "i<M" "f i = 0" | p where "raw_has_prod f 0 p"
   756         using Max_in [of ?Z] \<open>finite N\<close> \<open>f k = 0\<close> \<open>k \<in> N\<close> by auto
   758         using Max_in [of ?Z] \<open>finite N\<close> \<open>f k = 0\<close> \<open>k \<in> N\<close> by auto
   757     qed (use q in auto)
   759     qed (use q in auto)
   758   qed
   760   qed
   759 qed
   761 qed
   760 
   762 
   761 corollary has_prod_0:
   763 corollary%unimportant has_prod_0:
   762   fixes f :: "nat \<Rightarrow> 'a::{semidom,t2_space}"
   764   fixes f :: "nat \<Rightarrow> 'a::{semidom,t2_space}"
   763   assumes "\<And>n. f n = 1"
   765   assumes "\<And>n. f n = 1"
   764   shows "f has_prod 1"
   766   shows "f has_prod 1"
   765   by (simp add: assms has_prod_cong)
   767   by (simp add: assms has_prod_cong)
   766 
   768 
   849 lemma convergent_prod_LIMSEQ:
   851 lemma convergent_prod_LIMSEQ:
   850   shows "convergent_prod f \<Longrightarrow> (\<lambda>n. \<Prod>i\<le>n. f i) \<longlonglongrightarrow> prodinf f"
   852   shows "convergent_prod f \<Longrightarrow> (\<lambda>n. \<Prod>i\<le>n. f i) \<longlonglongrightarrow> prodinf f"
   851   by (metis convergent_LIMSEQ_iff convergent_prod_has_prod convergent_prod_imp_convergent 
   853   by (metis convergent_LIMSEQ_iff convergent_prod_has_prod convergent_prod_imp_convergent 
   852       convergent_prod_to_zero_iff raw_has_prod_eq_0 has_prod_def prodinf_eq_lim zero_le)
   854       convergent_prod_to_zero_iff raw_has_prod_eq_0 has_prod_def prodinf_eq_lim zero_le)
   853 
   855 
   854 lemma has_prod_iff: "f has_prod x \<longleftrightarrow> convergent_prod f \<and> prodinf f = x"
   856 theorem has_prod_iff: "f has_prod x \<longleftrightarrow> convergent_prod f \<and> prodinf f = x"
   855 proof
   857 proof
   856   assume "f has_prod x"
   858   assume "f has_prod x"
   857   then show "convergent_prod f \<and> prodinf f = x"
   859   then show "convergent_prod f \<and> prodinf f = x"
   858     apply safe
   860     apply safe
   859     using convergent_prod_def has_prod_def apply blast
   861     using convergent_prod_def has_prod_def apply blast
   869   shows "prodinf f = (\<Prod>n\<in>N. f n)"
   871   shows "prodinf f = (\<Prod>n\<in>N. f n)"
   870   using has_prod_finite[OF assms, THEN has_prod_unique] by simp
   872   using has_prod_finite[OF assms, THEN has_prod_unique] by simp
   871 
   873 
   872 end
   874 end
   873 
   875 
   874 subsection \<open>Infinite products on ordered, topological monoids\<close>
   876 subsection%unimportant \<open>Infinite products on ordered topological monoids\<close>
   875 
   877 
   876 lemma LIMSEQ_prod_0: 
   878 lemma LIMSEQ_prod_0: 
   877   fixes f :: "nat \<Rightarrow> 'a::{semidom,topological_space}"
   879   fixes f :: "nat \<Rightarrow> 'a::{semidom,topological_space}"
   878   assumes "f i = 0"
   880   assumes "f i = 0"
   879   shows "(\<lambda>n. prod f {..n}) \<longlonglongrightarrow> 0"
   881   shows "(\<lambda>n. prod f {..n}) \<longlonglongrightarrow> 0"
  1070   assumes "\<And>n. 1 \<le> f n" "\<And>n. (\<Prod>i<n. f i) \<le> x"
  1072   assumes "\<And>n. 1 \<le> f n" "\<And>n. (\<Prod>i<n. f i) \<le> x"
  1071   shows "convergent_prod f"
  1073   shows "convergent_prod f"
  1072   using convergent_prod_def raw_has_prodI_bounded [OF assms] by blast
  1074   using convergent_prod_def raw_has_prodI_bounded [OF assms] by blast
  1073 
  1075 
  1074 
  1076 
  1075 subsection \<open>Infinite products on topological spaces\<close>
  1077 subsection%unimportant \<open>Infinite products on topological spaces\<close>
  1076 
  1078 
  1077 context
  1079 context
  1078   fixes f g :: "nat \<Rightarrow> 'a::{t2_space,topological_semigroup_mult,idom}"
  1080   fixes f g :: "nat \<Rightarrow> 'a::{t2_space,topological_semigroup_mult,idom}"
  1079 begin
  1081 begin
  1080 
  1082 
  1171 lemma convergent_prod_prod: "(\<And>i. i \<in> I \<Longrightarrow> convergent_prod (f i)) \<Longrightarrow> convergent_prod (\<lambda>n. \<Prod>i\<in>I. f i n)"
  1173 lemma convergent_prod_prod: "(\<And>i. i \<in> I \<Longrightarrow> convergent_prod (f i)) \<Longrightarrow> convergent_prod (\<lambda>n. \<Prod>i\<in>I. f i n)"
  1172   using convergent_prod_has_prod_iff has_prod_prod prodinf_prod by force
  1174   using convergent_prod_has_prod_iff has_prod_prod prodinf_prod by force
  1173 
  1175 
  1174 end
  1176 end
  1175 
  1177 
  1176 subsection \<open>Infinite summability on real normed fields\<close>
  1178 subsection%unimportant \<open>Infinite summability on real normed fields\<close>
  1177 
  1179 
  1178 context
  1180 context
  1179   fixes f :: "nat \<Rightarrow> 'a::real_normed_field"
  1181   fixes f :: "nat \<Rightarrow> 'a::real_normed_field"
  1180 begin
  1182 begin
  1181 
  1183 
  1326     by (subst has_prod_Suc_iff) auto
  1328     by (subst has_prod_Suc_iff) auto
  1327   with Suc show ?case
  1329   with Suc show ?case
  1328     by (simp add: ac_simps)
  1330     by (simp add: ac_simps)
  1329 qed
  1331 qed
  1330 
  1332 
  1331 corollary has_prod_iff_shift':
  1333 corollary%unimportant has_prod_iff_shift':
  1332   assumes "\<And>i. i < n \<Longrightarrow> f i \<noteq> 0"
  1334   assumes "\<And>i. i < n \<Longrightarrow> f i \<noteq> 0"
  1333   shows "(\<lambda>i. f (i + n)) has_prod (a / (\<Prod>i<n. f i)) \<longleftrightarrow> f has_prod a"
  1335   shows "(\<lambda>i. f (i + n)) has_prod (a / (\<Prod>i<n. f i)) \<longleftrightarrow> f has_prod a"
  1334   by (simp add: assms has_prod_iff_shift)
  1336   by (simp add: assms has_prod_iff_shift)
  1335 
  1337 
  1336 lemma has_prod_one_iff_shift:
  1338 lemma has_prod_one_iff_shift:
  1428     by (rule has_prod_unique [symmetric])
  1430     by (rule has_prod_unique [symmetric])
  1429 qed
  1431 qed
  1430 
  1432 
  1431 end
  1433 end
  1432 
  1434 
  1433 lemma convergent_prod_iff_summable_real:
  1435 theorem convergent_prod_iff_summable_real:
  1434   fixes a :: "nat \<Rightarrow> real"
  1436   fixes a :: "nat \<Rightarrow> real"
  1435   assumes "\<And>n. a n > 0"
  1437   assumes "\<And>n. a n > 0"
  1436   shows "convergent_prod (\<lambda>k. 1 + a k) \<longleftrightarrow> summable a" (is "?lhs = ?rhs")
  1438   shows "convergent_prod (\<lambda>k. 1 + a k) \<longleftrightarrow> summable a" (is "?lhs = ?rhs")
  1437 proof
  1439 proof
  1438   assume ?lhs
  1440   assume ?lhs
  1554   assumes f: "convergent_prod f" and 0: "\<And>x. f x > 0"
  1556   assumes f: "convergent_prod f" and 0: "\<And>x. f x > 0"
  1555   shows "prodinf f = exp (suminf (\<lambda>i. ln (f i)))"
  1557   shows "prodinf f = exp (suminf (\<lambda>i. ln (f i)))"
  1556   by (simp add: "0" f less_0_prodinf suminf_ln_real)
  1558   by (simp add: "0" f less_0_prodinf suminf_ln_real)
  1557 
  1559 
  1558 
  1560 
  1559 lemma Ln_prodinf_complex:
  1561 theorem Ln_prodinf_complex:
  1560   fixes z :: "nat \<Rightarrow> complex"
  1562   fixes z :: "nat \<Rightarrow> complex"
  1561   assumes z: "\<And>j. z j \<noteq> 0" and \<xi>: "\<xi> \<noteq> 0"
  1563   assumes z: "\<And>j. z j \<noteq> 0" and \<xi>: "\<xi> \<noteq> 0"
  1562   shows "((\<lambda>n. \<Prod>j\<le>n. z j) \<longlonglongrightarrow> \<xi>) \<longleftrightarrow> (\<exists>k. (\<lambda>n. (\<Sum>j\<le>n. Ln (z j))) \<longlonglongrightarrow> Ln \<xi> + of_int k * (of_real(2*pi) * \<i>))" (is "?lhs = ?rhs")
  1564   shows "((\<lambda>n. \<Prod>j\<le>n. z j) \<longlonglongrightarrow> \<xi>) \<longleftrightarrow> (\<exists>k. (\<lambda>n. (\<Sum>j\<le>n. Ln (z j))) \<longlonglongrightarrow> Ln \<xi> + of_int k * (of_real(2*pi) * \<i>))" (is "?lhs = ?rhs")
  1563 proof
  1565 proof
  1564   assume L: ?lhs
  1566   assume L: ?lhs
  1767   assumes "convergent_prod z" "\<And>k. z k \<noteq> 0"
  1769   assumes "convergent_prod z" "\<And>k. z k \<noteq> 0"
  1768   shows "summable (\<lambda>k. Ln (z k))"
  1770   shows "summable (\<lambda>k. Ln (z k))"
  1769   using convergent_prod_def assms convergent_prod_iff_summable_complex by blast
  1771   using convergent_prod_def assms convergent_prod_iff_summable_complex by blast
  1770 
  1772 
  1771 
  1773 
  1772 subsection\<open>Embeddings from the reals into some complete real normed field\<close>
  1774 subsection%unimportant \<open>Embeddings from the reals into some complete real normed field\<close>
  1773 
  1775 
  1774 lemma tendsto_eq_of_real_lim:
  1776 lemma tendsto_eq_of_real_lim:
  1775   assumes "(\<lambda>n. of_real (f n) :: 'a::{complete_space,real_normed_field}) \<longlonglongrightarrow> q"
  1777   assumes "(\<lambda>n. of_real (f n) :: 'a::{complete_space,real_normed_field}) \<longlonglongrightarrow> q"
  1776   shows "q = of_real (lim f)"
  1778   shows "q = of_real (lim f)"
  1777 proof -
  1779 proof -