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" |
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 |
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: |
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 - |