| author | wenzelm | 
| Sun, 18 Aug 2024 18:08:16 +0200 | |
| changeset 80726 | 5f13872a33ea | 
| parent 80528 | 6dec6b1f31f5 | 
| child 82803 | 982e7128ce0f | 
| permissions | -rw-r--r-- | 
| 78890 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1 | chapter \<open>Kronecker's Theorem with Applications\<close> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 3 | theory Kronecker_Approximation_Theorem | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 4 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 5 | imports Complex_Transcendental Henstock_Kurzweil_Integration | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 6 | "HOL-Real_Asymp.Real_Asymp" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 7 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 8 | begin | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 9 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 10 | section \<open>Dirichlet's Approximation Theorem\<close> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 11 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 12 | text \<open>Simultaneous version. From Hardy and Wright, An Introduction to the Theory of Numbers, page 170.\<close> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 13 | theorem Dirichlet_approx_simult: | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 14 | fixes \<theta> :: "nat \<Rightarrow> real" and N n :: nat | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 15 | assumes "N > 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 16 | obtains q p where "0<q" "q \<le> int (N^n)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 17 | and "\<And>i. i<n \<Longrightarrow> \<bar>of_int q * \<theta> i - of_int(p i)\<bar> < 1/N" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 18 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 19 | have lessN: "nat \<lfloor>x * real N\<rfloor> < N" if "0 \<le> x" "x < 1" for x | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 20 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 21 | have "\<lfloor>x * real N\<rfloor> < N" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 22 | using that by (simp add: assms floor_less_iff) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 23 | with assms show ?thesis by linarith | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 24 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 25 |   define interv where "interv \<equiv> \<lambda>k. {real k/N..< Suc k/N}"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 26 | define fracs where "fracs \<equiv> \<lambda>k. map (\<lambda>i. frac (real k * \<theta> i)) [0..<n]" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 27 |   define X where "X \<equiv> fracs ` {..N^n}"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 28 | define Y where "Y \<equiv> set (List.n_lists n (map interv [0..<N]))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 29 | have interv_iff: "interv k = interv k' \<longleftrightarrow> k=k'" for k k' | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 30 | using assms by (auto simp: interv_def Ico_eq_Ico divide_strict_right_mono) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 31 | have in_interv: "x \<in> interv (nat \<lfloor>x * real N\<rfloor>)" if "x\<ge>0" for x | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 32 | using that assms by (simp add: interv_def divide_simps) linarith | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 33 | have False | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 34 | if non: "\<forall>a b. b \<le> N^n \<longrightarrow> a < b \<longrightarrow> \<not>(\<forall>i<n. \<bar>frac (real b * \<theta> i) - frac (real a * \<theta> i)\<bar> < 1/N)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 35 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 36 |     have "inj_on (\<lambda>k. map (\<lambda>i. frac (k * \<theta> i)) [0..<n]) {..N^n}"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 37 | using that assms by (intro linorder_inj_onI) fastforce+ | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 38 | then have caX: "card X = Suc (N^n)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 39 | by (simp add: X_def fracs_def card_image) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 40 | have caY: "card Y \<le> N^n" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 41 | by (metis Y_def card_length diff_zero length_map length_n_lists length_upt) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 42 | define f where "f \<equiv> \<lambda>l. map (\<lambda>x. interv (nat \<lfloor>x * real N\<rfloor>)) l" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 43 | have "f ` X \<subseteq> Y" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 44 | by (auto simp: f_def Y_def X_def fracs_def o_def set_n_lists frac_lt_1 lessN) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 45 | then have "\<not> inj_on f X" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 46 | using Y_def caX caY card_inj_on_le not_less_eq_eq by fastforce | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 47 | then obtain x x' where "x\<noteq>x'" "x \<in> X" "x' \<in> X" and eq: "f x = f x'" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 48 | by (auto simp: inj_on_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 49 | then obtain c c' where c: "c \<noteq> c'" "c \<le> N^n" "c' \<le> N^n" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 50 | and xeq: "x = fracs c" and xeq': "x' = fracs c'" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 51 | unfolding X_def by (metis atMost_iff image_iff) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 52 | have [simp]: "length x' = n" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 53 | by (auto simp: xeq' fracs_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 54 | have ge0: "x'!i \<ge> 0" if "i<n" for i | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 55 | using that \<open>x' \<in> X\<close> by (auto simp: X_def fracs_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 56 | have "f x \<in> Y" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 57 | using \<open>f ` X \<subseteq> Y\<close> \<open>x \<in> X\<close> by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 58 | define k where "k \<equiv> map (\<lambda>r. nat \<lfloor>r * real N\<rfloor>) x" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 59 | have "\<bar>frac (real c * \<theta> i) - frac (real c' * \<theta> i)\<bar> < 1/N" if "i < n" for i | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 60 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 61 | have k: "x!i \<in> interv(k!i)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 62 | using \<open>i<n\<close> assms by (auto simp: divide_simps k_def interv_def xeq fracs_def) linarith | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 63 | then have k': "x'!i \<in> interv(k!i)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 64 | using \<open>i<n\<close> eq assms ge0[OF \<open>i<n\<close>] | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 65 | by (auto simp: k_def f_def divide_simps map_equality_iff in_interv interv_iff) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 66 | with assms k show ?thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 67 | using \<open>i<n\<close> by (auto simp add: xeq xeq' fracs_def interv_def add_divide_distrib) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 68 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 69 | then show False | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 70 | by (metis c non nat_neq_iff abs_minus_commute) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 71 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 72 | then obtain a b where "a<b" "b \<le> N^n" and *: "\<And>i. i<n \<Longrightarrow> \<bar>frac (real b * \<theta> i) - frac (real a * \<theta> i)\<bar> < 1/N" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 73 | by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 74 | let ?k = "b-a" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 75 | let ?h = "\<lambda>i. \<lfloor>b * \<theta> i\<rfloor> - \<lfloor>a * \<theta> i\<rfloor>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 76 | show ?thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 77 | proof | 
| 80175 
200107cdd3ac
Some new simprules – and patches for proofs
 paulson <lp15@cam.ac.uk> parents: 
78890diff
changeset | 78 | show "int (b - a) \<le> int (N ^ n)" | 
| 
200107cdd3ac
Some new simprules – and patches for proofs
 paulson <lp15@cam.ac.uk> parents: 
78890diff
changeset | 79 | using \<open>b \<le> N ^ n\<close> by auto | 
| 
200107cdd3ac
Some new simprules – and patches for proofs
 paulson <lp15@cam.ac.uk> parents: 
78890diff
changeset | 80 | next | 
| 78890 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 81 | fix i | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 82 | assume "i<n" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 83 | have "frac (b * \<theta> i) - frac (a * \<theta> i) = ?k * \<theta> i - ?h i" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 84 | using \<open>a < b\<close> by (simp add: frac_def left_diff_distrib' of_nat_diff) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 85 | then show "\<bar>of_int ?k * \<theta> i - ?h i\<bar> < 1/N" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 86 | by (metis "*" \<open>i < n\<close> of_int_of_nat_eq) | 
| 80175 
200107cdd3ac
Some new simprules – and patches for proofs
 paulson <lp15@cam.ac.uk> parents: 
78890diff
changeset | 87 | qed (use \<open>a < b\<close> in auto) | 
| 78890 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 88 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 89 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 90 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 91 | text \<open>Theorem 7.1\<close> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 92 | corollary Dirichlet_approx: | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 93 | fixes \<theta>:: real and N:: nat | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 94 | assumes "N > 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 95 | obtains h k where "0 < k" "k \<le> int N" "\<bar>of_int k * \<theta> - of_int h\<bar> < 1/N" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 96 | by (rule Dirichlet_approx_simult [OF assms, where n=1 and \<theta>="\<lambda>_. \<theta>"]) auto | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 97 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 98 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 99 | text \<open>Theorem 7.2\<close> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 100 | corollary Dirichlet_approx_coprime: | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 101 | fixes \<theta>:: real and N:: nat | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 102 | assumes "N > 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 103 | obtains h k where "coprime h k" "0 < k" "k \<le> int N" "\<bar>of_int k * \<theta> - of_int h\<bar> < 1/N" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 104 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 105 | obtain h' k' where k': "0 < k'" "k' \<le> int N" and *: "\<bar>of_int k' * \<theta> - of_int h'\<bar> < 1/N" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 106 | by (meson Dirichlet_approx assms) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 107 | let ?d = "gcd h' k'" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 108 | show thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 109 | proof (cases "?d = 1") | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 110 | case True | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 111 | with k' * that show ?thesis by auto | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 112 | next | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 113 | case False | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 114 | then have 1: "?d > 1" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 115 | by (smt (verit, ccfv_threshold) \<open>k'>0\<close> gcd_pos_int) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 116 | let ?k = "k' div ?d" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 117 | let ?h = "h' div ?d" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 118 | show ?thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 119 | proof | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 120 | show "coprime (?h::int) ?k" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 121 | by (metis "1" div_gcd_coprime gcd_eq_0_iff not_one_less_zero) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 122 | show k0: "0 < ?k" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 123 | using \<open>k'>0\<close> pos_imp_zdiv_pos_iff by force | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 124 | show "?k \<le> int N" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 125 | using k' "1" int_div_less_self by fastforce | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 126 | have "\<bar>\<theta> - of_int ?h / of_int ?k\<bar> = \<bar>\<theta> - of_int h' / of_int k'\<bar>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 127 | by (simp add: real_of_int_div) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 128 | also have "\<dots> < 1 / of_int (N * k')" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 129 | using k' * by (simp add: field_simps) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 130 | also have "\<dots> < 1 / of_int (N * ?k)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 131 | using assms \<open>k'>0\<close> k0 1 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 132 | by (simp add: frac_less2 int_div_less_self) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 133 | finally show "\<bar>of_int ?k * \<theta> - of_int ?h\<bar> < 1 / real N" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 134 | using k0 k' by (simp add: field_simps) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 135 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 136 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 137 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 138 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 139 | definition approx_set :: "real \<Rightarrow> (int \<times> int) set" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 140 | where "approx_set \<theta> \<equiv> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 141 |      {(h, k) | h k::int. k > 0 \<and> coprime h k \<and> \<bar>\<theta> - of_int h / of_int k\<bar> < 1/k\<^sup>2}" 
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 142 | for \<theta>::real | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 143 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 144 | text \<open>Theorem 7.3\<close> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 145 | lemma approx_set_nonempty: "approx_set \<theta> \<noteq> {}"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 146 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 147 | have "\<bar>\<theta> - of_int \<lfloor>\<theta>\<rfloor> / of_int 1\<bar> < 1 / (of_int 1)\<^sup>2" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 148 | by simp linarith | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 149 | then have "(\<lfloor>\<theta>\<rfloor>, 1) \<in> approx_set \<theta>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 150 | by (auto simp: approx_set_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 151 | then show ?thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 152 | by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 153 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 154 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 155 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 156 | text \<open>Theorem 7.4(c)\<close> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 157 | theorem infinite_approx_set: | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 158 | assumes "infinite (approx_set \<theta>)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 159 | shows "\<exists>h k. (h,k) \<in> approx_set \<theta> \<and> k > K" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 160 | proof (rule ccontr, simp add: not_less) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 161 | assume Kb [rule_format]: "\<forall>h k. (h, k) \<in> approx_set \<theta> \<longrightarrow> k \<le> K" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 162 | define H where "H \<equiv> 1 + \<bar>K * \<theta>\<bar>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 163 | have k0: "k > 0" if "(h,k) \<in> approx_set \<theta>" for h k | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 164 | using approx_set_def that by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 165 | have Hb: "of_int \<bar>h\<bar> < H" if "(h,k) \<in> approx_set \<theta>" for h k | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 166 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 167 | have *: "\<bar>k * \<theta> - h\<bar> < 1" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 168 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 169 | have "\<bar>k * \<theta> - h\<bar> < 1 / k" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 170 | using that by (auto simp: field_simps approx_set_def eval_nat_numeral) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 171 | also have "\<dots> \<le> 1" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 172 | using divide_le_eq_1 by fastforce | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 173 | finally show ?thesis . | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 174 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 175 | have "k > 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 176 | using approx_set_def that by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 177 | have "of_int \<bar>h\<bar> \<le> \<bar>k * \<theta> - h\<bar> + \<bar>k * \<theta>\<bar>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 178 | by force | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 179 | also have "\<dots> < 1 + \<bar>k * \<theta>\<bar>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 180 | using * that by simp | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 181 | also have "\<dots> \<le> H" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 182 | using Kb [OF that] \<open>k>0\<close> by (auto simp add: H_def abs_if mult_right_mono mult_less_0_iff) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 183 | finally show ?thesis . | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 184 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 185 |   have "approx_set \<theta> \<subseteq> {-(ceiling H)..ceiling H} \<times> {0..K}"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 186 | using Hb Kb k0 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 187 | apply (simp add: subset_iff) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 188 | by (smt (verit, best) ceiling_add_of_int less_ceiling_iff) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 189 | then have "finite (approx_set \<theta>)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 190 | by (meson finite_SigmaI finite_atLeastAtMost_int finite_subset) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 191 | then show False | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 192 | using assms by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 193 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 194 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 195 | text \<open>Theorem 7.4(b,d)\<close> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 196 | theorem rational_iff_finite_approx_set: | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 197 | shows "\<theta> \<in> \<rat> \<longleftrightarrow> finite (approx_set \<theta>)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 198 | proof | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 199 | assume "\<theta> \<in> \<rat>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 200 | then obtain a b where eq: "\<theta> = of_int a / of_int b" and "b>0" and "coprime a b" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 201 | by (meson Rats_cases') | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 202 | then have ab: "(a,b) \<in> approx_set \<theta>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 203 | by (auto simp: approx_set_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 204 | show "finite (approx_set \<theta>)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 205 | proof (rule ccontr) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 206 | assume "infinite (approx_set \<theta>)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 207 | then obtain h k where "(h,k) \<in> approx_set \<theta>" "k > b" "k>0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 208 | using infinite_approx_set by (smt (verit, best)) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 209 | then have "coprime h k" and hk: "\<bar>a/b - h/k\<bar> < 1 / (of_int k)\<^sup>2" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 210 | by (auto simp: approx_set_def eq) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 211 | have False if "a * k = h * b" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 212 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 213 | have "b dvd k" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 214 | using that \<open>coprime a b\<close> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 215 | by (metis coprime_commute coprime_dvd_mult_right_iff dvd_triv_right) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 216 | then obtain d where "k = b * d" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 217 | by (metis dvd_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 218 | then have "h = a * d" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 219 | using \<open>0 < b\<close> that by force | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 220 | then show False | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 221 | using \<open>0 < b\<close> \<open>b < k\<close> \<open>coprime h k\<close> \<open>k = b * d\<close> by auto | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 222 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 223 | then have 0: "0 < \<bar>a*k - b*h\<bar>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 224 | by auto | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 225 | have "\<bar>a*k - b*h\<bar> < b/k" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 226 | using \<open>k>0\<close> \<open>b>0\<close> hk by (simp add: field_simps eval_nat_numeral) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 227 | also have "\<dots> < 1" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 228 | by (simp add: \<open>0 < k\<close> \<open>b < k\<close>) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 229 | finally show False | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 230 | using 0 by linarith | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 231 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 232 | next | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 233 | assume fin: "finite (approx_set \<theta>)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 234 | show "\<theta> \<in> \<rat>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 235 | proof (rule ccontr) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 236 | assume irr: "\<theta> \<notin> \<rat>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 237 | define A where "A \<equiv> ((\<lambda>(h,k). \<bar>\<theta> - h/k\<bar>) ` approx_set \<theta>)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 238 | let ?\<alpha> = "Min A" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 239 | have "0 \<notin> A" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 240 | using irr by (auto simp: A_def approx_set_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 241 |     moreover have "\<forall>x\<in>A. x\<ge>0" and A: "finite A" "A \<noteq> {}"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 242 | using approx_set_nonempty by (auto simp: A_def fin) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 243 | ultimately have \<alpha>: "?\<alpha> > 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 244 | using Min_in by force | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 245 | then obtain N where N: "real N > 1 / ?\<alpha>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 246 | using reals_Archimedean2 by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 247 | have "0 < 1 / ?\<alpha>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 248 | using \<alpha> by auto | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 249 | also have "\<dots> < real N" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 250 | by (fact N) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 251 | finally have "N > 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 252 | by simp | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 253 | from N have "1/N < ?\<alpha>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 254 | by (simp add: \<alpha> divide_less_eq mult.commute) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 255 | then obtain h k where "coprime h k" "0 < k" "k \<le> int N" "\<bar>of_int k * \<theta> - of_int h\<bar> < 1/N" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 256 | by (metis Dirichlet_approx_coprime \<alpha> N divide_less_0_1_iff less_le not_less_iff_gr_or_eq of_nat_0_le_iff of_nat_le_iff of_nat_0) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 257 | then have \<section>: "\<bar>\<theta> - h/k\<bar> < 1 / (k*N)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 258 | by (simp add: field_simps) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 259 | also have "\<dots> \<le> 1/k\<^sup>2" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 260 | using \<open>k \<le> int N\<close> by (simp add: eval_nat_numeral divide_simps) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 261 | finally have hk_in: "(h,k) \<in> approx_set \<theta>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 262 | using \<open>0 < k\<close> \<open>coprime h k\<close> by (auto simp: approx_set_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 263 | then have "\<bar>\<theta> - h/k\<bar> \<in> A" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 264 | by (auto simp: A_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 265 | moreover have "1 / real_of_int (k * int N) < ?\<alpha>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 266 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 267 | have "1 / real_of_int (k * int N) = 1 / real N / of_int k" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 268 | by simp | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 269 | also have "\<dots> < ?\<alpha> / of_int k" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 270 | using \<open>k > 0\<close> \<alpha> \<open>N > 0\<close> N by (intro divide_strict_right_mono) (auto simp: field_simps) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 271 | also have "\<dots> \<le> ?\<alpha> / 1" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 272 | using \<alpha> \<open>k > 0\<close> by (intro divide_left_mono) auto | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 273 | finally show ?thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 274 | by simp | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 275 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 276 | ultimately show False using A \<section> by auto | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 277 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 278 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 279 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 280 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 281 | text \<open>No formalisation of Liouville's Approximation Theorem because this is already in the AFP | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 282 | as Liouville\_Numbers. Apostol's Theorem 7.5 should be exactly the theorem | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 283 | liouville\_irrational\_algebraic. There is a minor discrepancy in the definition | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 284 | of "Liouville number" between Apostol and Eberl: he requires the denominator to be | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 285 | positive, while Eberl require it to exceed 1.\<close> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 286 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 287 | section \<open>Kronecker's Approximation Theorem: the One-dimensional Case\<close> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 288 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 289 | lemma frac_int_mult: | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 290 | assumes "m > 0" and le: "1-frac r \<le> 1/m" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 291 | shows "1 - frac (of_int m * r) = m * (1 - frac r)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 292 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 293 | have "frac (of_int m * r) = 1 - m * (1 - frac r)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 294 | proof (subst frac_unique_iff, intro conjI) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 295 | show "of_int m * r - (1 - of_int m * (1 - frac r)) \<in> \<int>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 296 | by (simp add: algebra_simps frac_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 297 | qed (use assms in \<open>auto simp: divide_simps mult_ac frac_lt_1\<close>) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 298 | then show ?thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 299 | by simp | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 300 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 301 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 302 | text \<open>Concrete statement of Theorem 7.7, and the real proof\<close> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 303 | theorem Kronecker_approx_1_explicit: | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 304 | fixes \<theta> :: real | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 305 | assumes "\<theta> \<notin> \<rat>" and \<alpha>: "0 \<le> \<alpha>" "\<alpha> \<le> 1" and "\<epsilon> > 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 306 | obtains k where "k>0" "\<bar>frac(real k * \<theta>) - \<alpha>\<bar> < \<epsilon>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 307 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 308 | obtain N::nat where "1/N < \<epsilon>" "N > 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 309 | by (metis \<open>\<epsilon> > 0\<close> gr_zeroI inverse_eq_divide real_arch_inverse) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 310 | then obtain h k where "0 < k" and hk: "\<bar>of_int k * \<theta> - of_int h\<bar> < \<epsilon>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 311 | using Dirichlet_approx that by (metis less_trans) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 312 | have irrat: "of_int n * \<theta> \<in> \<rat> \<Longrightarrow> n = 0" for n | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 313 | by (metis Rats_divide Rats_of_int assms(1) nonzero_mult_div_cancel_left of_int_0_eq_iff) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 314 | then consider "of_int k * \<theta> < of_int h" | "of_int k * \<theta> > of_int h" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 315 | by (metis Rats_of_int \<open>0 < k\<close> less_irrefl linorder_neqE_linordered_idom) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 316 | then show thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 317 | proof cases | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 318 | case 1 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 319 | define \<xi> where "\<xi> \<equiv> 1 - frac (of_int k * \<theta>)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 320 | have pos: "\<xi> > 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 321 | by (simp add: \<xi>_def frac_lt_1) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 322 | define N where "N \<equiv> \<lfloor>1/\<xi>\<rfloor>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 323 | have "N > 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 324 | by (simp add: N_def \<xi>_def frac_lt_1) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 325 | have False if "1/\<xi> \<in> \<int>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 326 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 327 | from that of_int_ceiling | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 328 | obtain r where r: "of_int r = 1/\<xi>" by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 329 | then obtain s where s: "of_int k * \<theta> = of_int s + 1 - 1/r" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 330 | by (simp add: \<xi>_def frac_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 331 | from r pos s \<open>k > 0\<close> have "\<theta> = (of_int s + 1 - 1/r) / k" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 332 | by (auto simp: field_simps) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 333 | with assms show False | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 334 | by simp | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 335 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 336 | then have N0: "N < 1/\<xi>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 337 | unfolding N_def by (metis Ints_of_int floor_correct less_le) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 338 | then have N2: "1/(N+1) < \<xi>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 339 | unfolding N_def by (smt (verit) divide_less_0_iff divide_less_eq floor_correct mult.commute pos) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 340 | have "\<xi> * (N+1) > 1" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 341 | by (smt (verit) N2 \<open>0 < N\<close> of_int_1_less_iff pos_divide_less_eq) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 342 | then have ex: "\<exists>m. int m \<le> N+1 \<and> 1-\<alpha> < m * \<xi>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 343 | by (smt (verit, best) \<open>0 < N\<close> \<open>0 \<le> \<alpha>\<close> floor_of_int floor_of_nat mult.commute of_nat_nat) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 344 | define m where "m \<equiv> LEAST m. int m \<le> N+1 \<and> 1-\<alpha> < m * \<xi>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 345 | have m: "int m \<le> N+1 \<and> 1-\<alpha> < m * \<xi>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 346 | using LeastI_ex [OF ex] unfolding m_def by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 347 | have "m > 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 348 | using m gr0I \<open>\<alpha> \<le> 1\<close> by force | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 349 | have k\<theta>: "\<xi> < \<epsilon>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 350 | using hk 1 by (smt (verit, best) floor_eq_iff frac_def \<xi>_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 351 | show thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 352 | proof (cases "m=1") | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 353 | case True | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 354 | then have "\<bar>frac (real (nat k) * \<theta>) - \<alpha>\<bar> < \<epsilon>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 355 | using m \<open>\<alpha> \<le> 1\<close> \<open>0 < k\<close> \<xi>_def k\<theta> by force | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 356 | with \<open>0 < k\<close> zero_less_nat_eq that show thesis by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 357 | next | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 358 | case False | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 359 | with \<open>0 < m\<close> have "m>1" by linarith | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 360 | have "\<xi> < 1 / N" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 361 | by (metis N0 \<open>0 < N\<close> mult_of_int_commute of_int_pos pos pos_less_divide_eq) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 362 | also have "\<dots> \<le> 1 / (real m - 1)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 363 | using \<open>m > 1\<close> m by (simp add: divide_simps) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 364 | finally have "\<xi> < 1 / (real m - 1)" . | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 365 | then have m1_eq: "(int m - 1) * \<xi> = 1 - frac (of_int ((int m - 1) * k) * \<theta>)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 366 | using frac_int_mult [of "(int m - 1)" "k * \<theta>"] \<open>1 < m\<close> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 367 | by (simp add: \<xi>_def mult.assoc) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 368 | then | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 369 | have m1_eq': "frac (of_int ((int m - 1) * k) * \<theta>) = 1 - (int m - 1) * \<xi>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 370 | by simp | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 371 | moreover have "(m - Suc 0) * \<xi> \<le> 1-\<alpha>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 372 | using Least_le [where k="m-Suc 0"] m | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 373 | by (smt (verit, best) Suc_n_not_le_n Suc_pred \<open>0 < m\<close> m_def of_nat_le_iff) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 374 | ultimately have le\<alpha>: " \<alpha> \<le> frac (of_int ((int m - 1) * k) * \<theta>)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 375 | by (simp add: Suc_leI \<open>0 < m\<close> of_nat_diff) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 376 | moreover have "m * \<xi> + frac (of_int ((int m - 1) * k) * \<theta>) = \<xi> + 1" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 377 | by (subst m1_eq') (simp add: \<xi>_def algebra_simps) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 378 | ultimately have "\<bar>frac ((int (m - 1) * k) * \<theta>) - \<alpha>\<bar> < \<epsilon>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 379 | by (smt (verit, best) One_nat_def Suc_leI \<open>0 < m\<close> int_ops(2) k\<theta> m of_nat_diff) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 380 | with that show thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 381 | by (metis \<open>0 < k\<close> \<open>1 < m\<close> mult_pos_pos of_int_of_nat_eq of_nat_mult pos_int_cases zero_less_diff) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 382 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 383 | next | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 384 | case 2 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 385 | define \<xi> where "\<xi> \<equiv> frac (of_int k * \<theta>)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 386 | have recip_frac: False if "1/\<xi> \<in> \<int>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 387 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 388 | have "frac (of_int k * \<theta>) \<in> \<rat>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 389 | using that unfolding \<xi>_def | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 390 | by (metis Ints_cases Rats_1 Rats_divide Rats_of_int div_by_1 divide_divide_eq_right mult_cancel_right2) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 391 | then show False | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 392 | using \<open>0 < k\<close> frac_in_Rats_iff irrat by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 393 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 394 | have pos: "\<xi> > 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 395 | by (metis \<xi>_def Ints_0 division_ring_divide_zero frac_unique_iff less_le recip_frac) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 396 | define N where "N \<equiv> \<lfloor>1 / \<xi>\<rfloor>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 397 | have "N > 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 398 | unfolding N_def | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 399 | by (smt (verit) \<xi>_def divide_less_eq_1_pos floor_less_one frac_lt_1 pos) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 400 | have N0: "N < 1 / \<xi>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 401 | unfolding N_def by (metis Ints_of_int floor_eq_iff less_le recip_frac) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 402 | then have N2: "1/(N+1) < \<xi>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 403 | unfolding N_def | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 404 | by (smt (verit, best) divide_less_0_iff divide_less_eq floor_correct mult.commute pos) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 405 | have "\<xi> * (N+1) > 1" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 406 | by (smt (verit) N2 \<open>0 < N\<close> of_int_1_less_iff pos_divide_less_eq) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 407 | then have ex: "\<exists>m. int m \<le> N+1 \<and> \<alpha> < m * \<xi>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 408 | by (smt (verit, best) mult.commute \<open>\<alpha> \<le> 1\<close> \<open>0 < N\<close> of_int_of_nat_eq pos_int_cases) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 409 | define m where "m \<equiv> LEAST m. int m \<le> N+1 \<and> \<alpha> < m * \<xi>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 410 | have m: "int m \<le> N+1 \<and> \<alpha> < m * \<xi>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 411 | using LeastI_ex [OF ex] unfolding m_def by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 412 | have "m > 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 413 | using \<open>0 \<le> \<alpha>\<close> m gr0I by force | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 414 | have k\<theta>: "\<xi> < \<epsilon>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 415 | using hk 2 unfolding \<xi>_def by (smt (verit, best) floor_eq_iff frac_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 416 | have mk_eq: "frac (of_int (m*k) * \<theta>) = m * frac (of_int k * \<theta>)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 417 | if "m>0" "frac (of_int k * \<theta>) < 1/m" for m k | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 418 | proof (subst frac_unique_iff , intro conjI) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 419 | show "real_of_int (m * k) * \<theta> - real_of_int m * frac (real_of_int k * \<theta>) \<in> \<int>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 420 | by (simp add: algebra_simps frac_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 421 | qed (use that in \<open>auto simp: divide_simps mult_ac\<close>) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 422 | show thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 423 | proof (cases "m=1") | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 424 | case True | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 425 | then have "\<bar>frac (real (nat k) * \<theta>) - \<alpha>\<bar> < \<epsilon>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 426 | using m \<alpha> \<open>0 < k\<close> \<xi>_def k\<theta> by force | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 427 | with \<open>0 < k\<close> zero_less_nat_eq that show ?thesis by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 428 | next | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 429 | case False | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 430 | with \<open>0 < m\<close> have "m>1" by linarith | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 431 | with \<open>0 < k\<close> have mk_pos:"(m - Suc 0) * nat k > 0" by force | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 432 | have "real_of_int (int m - 1) < 1 / frac (real_of_int k * \<theta>)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 433 | using N0 \<xi>_def m by force | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 434 | then | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 435 | have m1_eq: "(int m - 1) * \<xi> = frac (((int m - 1) * k) * \<theta>)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 436 | using m mk_eq [of "int m-1" k] pos \<open>m>1\<close> by (simp add: divide_simps mult_ac \<xi>_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 437 | moreover have "(m - Suc 0) * \<xi> \<le> \<alpha>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 438 | using Least_le [where k="m-Suc 0"] m | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 439 | by (smt (verit, best) Suc_n_not_le_n Suc_pred \<open>0 < m\<close> m_def of_nat_le_iff) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 440 | ultimately have le\<alpha>: "frac (of_int ((int m - 1) * k) * \<theta>) \<le> \<alpha>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 441 | by (simp add: Suc_leI \<open>0 < m\<close> of_nat_diff) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 442 | moreover have "(m * \<xi> - frac (of_int ((int m - 1) * k) * \<theta>)) < \<epsilon>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 443 | by (metis m1_eq add_diff_cancel_left' diff_add_cancel k\<theta> left_diff_distrib' | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 444 | mult_cancel_right2 of_int_1 of_int_diff of_int_of_nat_eq) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 445 | ultimately have "\<bar>frac (real( (m - 1) * nat k) * \<theta>) - \<alpha>\<bar> < \<epsilon>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 446 | using \<open>0 < k\<close> \<open>0 < m\<close> by simp (smt (verit, best) One_nat_def Suc_leI m of_nat_1 of_nat_diff) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 447 | with \<open>m > 0\<close> that show thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 448 | using mk_pos One_nat_def by presburger | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 449 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 450 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 451 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 452 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 453 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 454 | text \<open>Theorem 7.7 expressed more abstractly using @{term closure}\<close>
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 455 | corollary Kronecker_approx_1: | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 456 | fixes \<theta> :: real | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 457 | assumes "\<theta> \<notin> \<rat>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 458 |   shows "closure (range (\<lambda>n. frac (real n * \<theta>))) = {0..1}"  (is "?C = _")
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 459 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 460 | have "\<exists>k>0. \<bar>frac(real k * \<theta>) - \<alpha>\<bar> < \<epsilon>" if "0 \<le> \<alpha>" "\<alpha> \<le> 1" "\<epsilon> > 0" for \<alpha> \<epsilon> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 461 | by (meson Kronecker_approx_1_explicit assms that) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 462 | then have "x \<in> ?C" if "0 \<le> x" "x \<le> 1" for x :: real | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 463 | using that by (auto simp add: closure_approachable dist_real_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 464 | moreover | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 465 |   have "(range (\<lambda>n. frac (real n * \<theta>))) \<subseteq> {0..1}"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 466 | by (smt (verit) atLeastAtMost_iff frac_unique_iff image_subset_iff) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 467 |   then have "?C \<subseteq> {0..1}"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 468 | by (simp add: closure_minimal) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 469 | ultimately show ?thesis by auto | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 470 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 471 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 472 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 473 | text \<open>The next theorem removes the restriction $0 \leq \alpha \leq 1$.\<close> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 474 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 475 | text \<open>Theorem 7.8\<close> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 476 | corollary sequence_of_fractional_parts_is_dense: | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 477 | fixes \<theta> :: real | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 478 | assumes "\<theta> \<notin> \<rat>" "\<epsilon> > 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 479 | obtains h k where "k > 0" "\<bar>of_int k * \<theta> - of_int h - \<alpha>\<bar> < \<epsilon>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 480 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 481 | obtain k where "k>0" "\<bar>frac(real k * \<theta>) - frac \<alpha>\<bar> < \<epsilon>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 482 | by (metis Kronecker_approx_1_explicit assms frac_ge_0 frac_lt_1 less_le_not_le) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 483 | then have "\<bar>real_of_int k * \<theta> - real_of_int (\<lfloor>k * \<theta>\<rfloor> - \<lfloor>\<alpha>\<rfloor>) - \<alpha>\<bar> < \<epsilon>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 484 | by (auto simp: frac_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 485 | then show thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 486 | by (meson \<open>0 < k\<close> of_nat_0_less_iff that) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 487 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 488 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 489 | section \<open>Extension of Kronecker's Theorem to Simultaneous Approximation\<close> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 490 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 491 | subsection \<open>Towards Lemma 1\<close> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 492 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 493 | lemma integral_exp: | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 494 | assumes "T \<ge> 0" "a\<noteq>0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 495 |   shows "integral {0..T} (\<lambda>t. exp(a * complex_of_real t)) = (exp(a * of_real T) - 1) / a"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 496 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 497 |   have "\<And>t. t \<in> {0..T} \<Longrightarrow> ((\<lambda>x. exp (a * x) / a) has_vector_derivative exp (a * t)) (at t within {0..T})"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 498 | using assms | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 499 | by (intro derivative_eq_intros has_complex_derivative_imp_has_vector_derivative [unfolded o_def] | simp)+ | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 500 |   then have "((\<lambda>t. exp(a * of_real t)) has_integral exp(a * complex_of_real T)/a - exp(a * of_real 0)/a)  {0..T}"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 501 | by (meson fundamental_theorem_of_calculus \<open>T \<ge> 0\<close>) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 502 | then show ?thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 503 | by (simp add: diff_divide_distrib integral_unique) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 504 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 505 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 506 | lemma Kronecker_simult_aux1: | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 507 | fixes \<eta>:: "nat \<Rightarrow> real" and c:: "nat \<Rightarrow> complex" and N::nat | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 508 |   assumes inj: "inj_on \<eta> {..N}" and "k \<le> N"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 509 | defines "f \<equiv> \<lambda>t. \<Sum>r\<le>N. c r * exp(\<i> * of_real t * \<eta> r)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 510 |   shows "((\<lambda>T. (1/T) * integral {0..T} (\<lambda>t. f t * exp(-\<i> * of_real t * \<eta> k))) \<longlongrightarrow> c k) at_top"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 511 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 512 | define F where "F \<equiv> \<lambda>k t. f t * exp(-\<i> * of_real t * \<eta> k)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 513 | have f: "F k = (\<lambda>t. \<Sum>r\<le>N. c r * exp(\<i> * (\<eta> r - \<eta> k) * of_real t))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 514 | by (simp add: F_def f_def sum_distrib_left field_simps exp_diff exp_minus) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 515 |   have *: "integral {0..T} (F k)
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 516 |       = c k * T + (\<Sum>r \<in> {..N}-{k}. c r * integral {0..T} (\<lambda>t. exp(\<i> * (\<eta> r - \<eta> k) * of_real t)))"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 517 | if "T > 0" for T | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 518 | using \<open>k \<le> N\<close> that | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 519 | by (simp add: f integral_sum integrable_continuous_interval continuous_intros Groups_Big.sum_diff scaleR_conv_of_real) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 520 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 521 |   have **: "(1/T) * integral {0..T} (F k)
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 522 |        = c k + (\<Sum>r \<in> {..N}-{k}. c r * (exp(\<i> * (\<eta> r - \<eta> k) * of_real T) - 1) / (\<i> * (\<eta> r - \<eta> k) * of_real T))"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 523 | if "T > 0" for T | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 524 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 525 |     have I: "integral {0..T} (\<lambda>t. exp (\<i> * (complex_of_real t * \<eta> r) - \<i> * (complex_of_real t * \<eta> k))) 
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 526 | = (exp(\<i> * (\<eta> r - \<eta> k) * T) - 1) / (\<i> * (\<eta> r - \<eta> k))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 527 | if "r \<le> N" "r \<noteq> k" for r | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 528 | using that \<open>k \<le> N\<close> inj \<open>T > 0\<close> integral_exp [of T "\<i> * (\<eta> r - \<eta> k)"] | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 529 | by (simp add: inj_on_eq_iff algebra_simps) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 530 | show ?thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 531 | using that by (subst *) (auto simp add: algebra_simps sum_divide_distrib I) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 532 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 533 | have "((\<lambda>T. c r * (exp(\<i> * (\<eta> r - \<eta> k) * of_real T) - 1) / (\<i> * (\<eta> r - \<eta> k) * of_real T)) \<longlongrightarrow> 0) at_top" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 534 | for r | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 535 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 536 | have "((\<lambda>x. (cos ((\<eta> r - \<eta> k) * x) - 1) / x) \<longlongrightarrow> 0) at_top" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 537 | "((\<lambda>x. sin ((\<eta> r - \<eta> k) * x) / x) \<longlongrightarrow> 0) at_top" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 538 | by real_asymp+ | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 539 | hence "((\<lambda>T. (exp (\<i> * (\<eta> r - \<eta> k) * of_real T) - 1) / of_real T) \<longlongrightarrow> 0) at_top" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 540 | by (simp add: tendsto_complex_iff Re_exp Im_exp) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 541 | from tendsto_mult[OF this tendsto_const[of "c r / (\<i> * (\<eta> r - \<eta> k))"]] show ?thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 542 | by (simp add: field_simps) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 543 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 544 |   then have "((\<lambda>T. c k + (\<Sum>r \<in> {..N}-{k}. c r * (exp(\<i> * (\<eta> r - \<eta> k) * of_real T) - 1) / 
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 545 | (\<i> * (\<eta> r - \<eta> k) * of_real T))) \<longlongrightarrow> c k + 0) at_top" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 546 | by (intro tendsto_add tendsto_null_sum) auto | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 547 | also have "?this \<longleftrightarrow> ?thesis" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 548 | proof (rule filterlim_cong) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 549 |     show "\<forall>\<^sub>F x in at_top. c k + (\<Sum>r\<in>{..N} - {k}. c r * (exp (\<i> * of_real (\<eta> r - \<eta> k) * of_real x) - 1) /
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 550 | (\<i> * of_real (\<eta> r - \<eta> k) * of_real x)) = | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 551 |           1 / of_real x * integral {0..x} (\<lambda>t. f t * exp (- \<i> * of_real t * of_real (\<eta> k)))"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 552 | using eventually_gt_at_top[of 0] | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 553 | proof eventually_elim | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 554 | case (elim T) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 555 | show ?case | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 556 | using **[of T] elim by (simp add: F_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 557 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 558 | qed auto | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 559 | finally show ?thesis . | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 560 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 561 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 562 | text \<open>the version of Lemma 1 that we actually need\<close> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 563 | lemma Kronecker_simult_aux1_strict: | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 564 | fixes \<eta>:: "nat \<Rightarrow> real" and c:: "nat \<Rightarrow> complex" and N::nat | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 565 |   assumes \<eta>: "inj_on \<eta> {..<N}" "0 \<notin> \<eta> ` {..<N}" and "k < N"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 566 | defines "f \<equiv> \<lambda>t. 1 + (\<Sum>r<N. c r * exp(\<i> * of_real t * \<eta> r))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 567 |   shows "((\<lambda>T. (1/T) * integral {0..T} (\<lambda>t. f t * exp(-\<i> * of_real t * \<eta> k))) \<longlongrightarrow> c k) at_top"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 568 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 569 | define c' where "c' \<equiv> case_nat 1 c" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 570 | define \<eta>' where "\<eta>' \<equiv> case_nat 0 \<eta>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 571 | define f' where "f' \<equiv> \<lambda>t. (\<Sum>r\<le>N. c' r * exp(\<i> * of_real t * \<eta>' r))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 572 |   have "inj_on \<eta>' {..N}"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 573 | using \<eta> by (auto simp: \<eta>'_def inj_on_def split: nat.split_asm) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 574 | moreover have "Suc k \<le> N" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 575 | using \<open>k < N\<close> by auto | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 576 |   ultimately have "((\<lambda>T. 1 / T * integral {0..T} (\<lambda>t. (\<Sum>r\<le>N. c' r * exp (\<i> * of_real t * \<eta>' r)) *
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 577 | exp (- \<i> * t * \<eta>' (Suc k)))) \<longlongrightarrow> c' (Suc k)) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 578 | at_top" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 579 | by (intro Kronecker_simult_aux1) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 580 | moreover have "(\<Sum>r\<le>N. c' r * exp (\<i> * of_real t * \<eta>' r)) = 1 + (\<Sum>r<N. c r * exp (\<i> * of_real t * \<eta> r))" for t | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 581 | by (simp add: c'_def \<eta>'_def sum.atMost_shift) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 582 | ultimately show ?thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 583 | by (simp add: f_def c'_def \<eta>'_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 584 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 585 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 586 | subsection \<open>Towards Lemma 2\<close> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 587 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 588 | lemma cos_monotone_aux: "\<lbrakk>\<bar>2 * pi * of_int i + x\<bar> \<le> y; y \<le> pi\<rbrakk> \<Longrightarrow> cos y \<le> cos x" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 589 | by (metis add.commute abs_ge_zero cos_abs_real cos_monotone_0_pi_le sin_cos_eq_iff) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 590 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 591 | lemma Figure7_1: | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 592 | assumes "0 \<le> \<epsilon>" "\<epsilon> \<le> \<bar>x\<bar>" "\<bar>x\<bar> \<le> pi" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 593 | shows "cmod (1 + exp (\<i> * x)) \<le> cmod (1 + exp (\<i> * \<epsilon>))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 594 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 595 | have norm_eq: "sqrt (2 * (1 + cos t)) = cmod (1 + cis t)" for t | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 596 | by (simp add: norm_complex_def power2_eq_square algebra_simps) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 597 | have "cos \<bar>x\<bar> \<le> cos \<epsilon>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 598 | by (rule cos_monotone_0_pi_le) (use assms in auto) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 599 | hence "sqrt (2 * (1 + cos \<bar>x\<bar>)) \<le> sqrt (2 * (1 + cos \<epsilon>))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 600 | by simp | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 601 | also have "cos \<bar>x\<bar> = cos x" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 602 | by simp | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 603 | finally show ?thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 604 | unfolding norm_eq by (simp add: cis_conv_exp) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 605 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 606 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 607 | lemma Kronecker_simult_aux2: | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 608 | fixes \<alpha>:: "nat \<Rightarrow> real" and \<theta>:: "nat \<Rightarrow> real" and n::nat | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 609 | defines "F \<equiv> \<lambda>t. 1 + (\<Sum>r<n. exp(\<i> * of_real (2 * pi * (t * \<theta> r - \<alpha> r))))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 610 | defines "L \<equiv> Sup (range (norm \<circ> F))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 611 | shows "(\<forall>\<epsilon>>0. \<exists>t h. \<forall>r<n. \<bar>t * \<theta> r - \<alpha> r - of_int (h r)\<bar> < \<epsilon>) \<longleftrightarrow> L = Suc n" (is "?lhs = _") | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 612 | proof | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 613 | assume ?lhs | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 614 | then have "\<And>k. \<exists>t h. \<forall>r<n. \<bar>t * \<theta> r - \<alpha> r - of_int (h r)\<bar> < 1 / (2 * pi * Suc k)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 615 | by simp | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 616 | then obtain t h where th: "\<And>k r. r<n \<Longrightarrow> \<bar>t k * \<theta> r - \<alpha> r - of_int (h k r)\<bar> < 1 / (2 * pi * Suc k)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 617 | by metis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 618 | have Fle: "\<And>x. cmod (F x) \<le> real (Suc n)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 619 | by (force simp: F_def intro: order_trans [OF norm_triangle_ineq] order_trans [OF norm_sum]) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 620 | then have boundedF: "bounded (range F)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 621 | by (metis bounded_iff rangeE) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 622 | have leL: "1 + n * cos(1 / Suc k) \<le> L" for k | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 623 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 624 | have *: "cos (1 / Suc k) \<le> cos (2 * pi * (t k * \<theta> r - \<alpha> r))" if "r<n" for r | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 625 | proof (rule cos_monotone_aux) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 626 | have "\<bar>2 * pi * (- h k r) + 2 * pi * (t k * \<theta> r - \<alpha> r)\<bar> \<le> \<bar>t k * \<theta> r - \<alpha> r - h k r\<bar> * 2 * pi" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 627 | by (simp add: algebra_simps abs_mult_pos abs_mult_pos') | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 628 | also have "\<dots> \<le> 1 / real (Suc k)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 629 | using th [OF that, of k] by (simp add: divide_simps) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 630 | finally show "\<bar>2 * pi * real_of_int (- h k r) + 2 * pi * (t k * \<theta> r - \<alpha> r)\<bar> \<le> 1 / real (Suc k)" . | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 631 | have "1 / real (Suc k) \<le> 1" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 632 | by auto | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 633 | then show "1 / real (Suc k) \<le> pi" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 634 | using pi_ge_two by linarith | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 635 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 636 | have "1 + n * cos(1 / Suc k) = 1 + (\<Sum>r<n. cos(1 / Suc k))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 637 | by simp | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 638 | also have "\<dots> \<le> 1 + (\<Sum>r<n. cos (2 * pi * (t k * \<theta> r - \<alpha> r)))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 639 | using * by (intro add_mono sum_mono) auto | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 640 | also have "\<dots> \<le> Re (F(t k))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 641 | by (simp add: F_def Re_exp) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 642 | also have "\<dots> \<le> norm (F(t k))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 643 | by (simp add: complex_Re_le_cmod) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 644 | also have "\<dots> \<le> L" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 645 | by (simp add: L_def boundedF bounded_norm_le_SUP_norm) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 646 | finally show ?thesis . | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 647 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 648 | show "L = Suc n" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 649 | proof (rule antisym) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 650 | show "L \<le> Suc n" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 651 | using Fle by (auto simp add: L_def intro: cSup_least) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 652 | have "((\<lambda>k. 1 + real n * cos (1 / real (Suc k))) \<longlongrightarrow> 1 + real n) at_top" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 653 | by real_asymp | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 654 | with LIMSEQ_le_const2 leL show "Suc n \<le> L" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 655 | by fastforce | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 656 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 657 | next | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 658 | assume L: "L = Suc n" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 659 | show ?lhs | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 660 | proof (rule ccontr) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 661 | assume "\<not> ?lhs" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 662 | then obtain e0 where "e0>0" and e0: "\<And>t h. \<exists>k<n. \<bar>t * \<theta> k - \<alpha> k - of_int (h k)\<bar> \<ge> e0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 663 | by (force simp: not_less) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 664 | define \<epsilon> where "\<epsilon> \<equiv> min e0 (pi/4)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 665 | have \<epsilon>: "\<And>t h. \<exists>k<n. \<bar>t * \<theta> k - \<alpha> k - of_int (h k)\<bar> \<ge> \<epsilon>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 666 | unfolding \<epsilon>_def using e0 min.coboundedI1 by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 667 | have \<epsilon>_bounds: "\<epsilon> > 0" "\<epsilon> < pi" "\<epsilon> \<le> pi/4" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 668 | using \<open>e0 > 0\<close> by (auto simp: \<epsilon>_def min_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 669 | with sin_gt_zero have "sin \<epsilon> > 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 670 | by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 671 |     then have "\<not> collinear{0, 1, exp (\<i> * \<epsilon>)}"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 672 | using collinear_iff_Reals cis.sel cis_conv_exp complex_is_Real_iff by force | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 673 | then have "norm (1 + exp (\<i> * \<epsilon>)) < 2" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 674 | using norm_triangle_eq_imp_collinear | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 675 | by (smt (verit) linorder_not_le norm_exp_i_times norm_one norm_triangle_lt) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 676 | then obtain \<delta> where "\<delta> > 0" and \<delta>: "norm (1 + exp (\<i> * \<epsilon>)) = 2 - \<delta>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 677 | by (smt (verit, best)) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 678 | have "norm (F t) \<le> n+1-\<delta>" for t | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 679 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 680 | define h where "h \<equiv> \<lambda>r. round (t * \<theta> r - \<alpha> r)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 681 | define X where "X \<equiv> \<lambda>r. t * \<theta> r - \<alpha> r - h r" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 682 | have "exp (\<i> * (of_int j * (of_real pi * 2))) = 1" for j | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 683 | by (metis add_0 exp_plus_2pin exp_zero) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 684 | then have exp_X: "exp (\<i> * (2 * of_real pi * of_real (X r))) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 685 | = exp (\<i> * of_real (2 * pi * (t * \<theta> r - \<alpha> r)))" for r | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 686 | by (simp add: X_def right_diff_distrib exp_add exp_diff mult.commute) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 687 |       have norm_pr_12: "X r \<in> {-1/2..<1/2}" for r
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 688 | apply (simp add: X_def h_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 689 | by (smt (verit, best) abs_of_nonneg half_bounded_equal of_int_round_abs_le of_int_round_gt) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 690 | obtain k where "k<n" and 1: "\<bar>X k\<bar> \<ge> \<epsilon>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 691 | using X_def \<epsilon> [of t h] by auto | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 692 | have 2: "2*pi \<ge> 1" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 693 | using pi_ge_two by auto | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 694 | have "\<bar>2 * pi * X k\<bar> \<ge> \<epsilon>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 695 | using mult_mono [OF 2 1] pi_ge_zero by linarith | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 696 | moreover | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 697 | have "\<bar>2 * pi * X k\<bar> \<le> pi" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 698 | using norm_pr_12 [of k] apply (simp add: abs_if field_simps) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 699 | by (smt (verit, best) divide_le_eq_1_pos divide_minus_left m2pi_less_pi nonzero_mult_div_cancel_left) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 700 | ultimately | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 701 | have *: "norm (1 + exp (\<i> * of_real (2 * pi * X k))) \<le> norm (1 + exp (\<i> * \<epsilon>))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 702 | using Figure7_1[of \<epsilon> "2 * pi * X k"] \<epsilon>_bounds by linarith | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 703 | have "norm (F t) = norm (1 + (\<Sum>r<n. exp(\<i> * of_real (2 * pi * (X r)))))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 704 | by (auto simp: F_def exp_X) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 705 |       also have "\<dots> \<le> norm (1 + exp(\<i> * of_real (2 * pi * X k)) + (\<Sum>r \<in> {..<n}-{k}. exp(\<i> * of_real (2 * pi * X r))))"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 706 | by (simp add: comm_monoid_add_class.sum.remove [where x=k] \<open>k < n\<close> algebra_simps) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 707 |       also have "\<dots> \<le> norm (1 + exp(\<i> * of_real (2 * pi * X k))) + (\<Sum>r \<in> {..<n}-{k}. norm (exp(\<i> * of_real (2 * pi * X r))))"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 708 | by (intro norm_triangle_mono sum_norm_le order_refl) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 709 | also have "\<dots> \<le> (2 - \<delta>) + (n - 1)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 710 | using \<open>k < n\<close> \<delta> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 711 | by simp (metis "*" mult_2 of_real_add of_real_mult) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 712 | also have "\<dots> = n + 1 - \<delta>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 713 | using \<open>k < n\<close> by simp | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 714 | finally show ?thesis . | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 715 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 716 | then have "L \<le> 1 + real n - \<delta>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 717 | by (auto simp: L_def intro: cSup_least) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 718 | with L \<open>\<delta> > 0\<close> show False | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 719 | by linarith | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 720 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 721 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 722 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 723 | subsection \<open>Towards lemma 3\<close> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 724 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 725 | text \<open>The text doesn't say so, but the generated polynomial needs to be "clean": | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 726 | all coefficients nonzero, and with no exponent string mentioned more than once. | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 727 | And no constant terms (with all exponents zero).\<close> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 728 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 729 | text \<open>Some tools for combining integer-indexed sequences or splitting them into parts\<close> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 730 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 731 | lemma less_sum_nat_iff: | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 732 | fixes b::nat and k::nat | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 733 | shows "b < (\<Sum>i<k. a i) \<longleftrightarrow> (\<exists>j<k. (\<Sum>i<j. a i) \<le> b \<and> b < (\<Sum>i<j. a i) + a j)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 734 | proof (induction k arbitrary: b) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 735 | case (Suc k) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 736 | then show ?case | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 737 | by (simp add: less_Suc_eq) (metis not_less trans_less_add1) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 738 | qed auto | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 739 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 740 | lemma less_sum_nat_iff_uniq: | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 741 | fixes b::nat and k::nat | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 742 | shows "b < (\<Sum>i<k. a i) \<longleftrightarrow> (\<exists>!j. j<k \<and> (\<Sum>i<j. a i) \<le> b \<and> b < (\<Sum>i<j. a i) + a j)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 743 | unfolding less_sum_nat_iff by (meson leD less_sum_nat_iff nat_neq_iff) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 744 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 745 | definition part :: "(nat \<Rightarrow> nat) \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> nat" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 746 | where "part a k b \<equiv> (THE j. j<k \<and> (\<Sum>i<j. a i) \<le> b \<and> b < (\<Sum>i<j. a i) + a j)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 747 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 748 | lemma part: | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 749 | "b < (\<Sum>i<k. a i) \<longleftrightarrow> (let j = part a k b in j < k \<and> (\<Sum>i < j. a i) \<le> b \<and> b < (\<Sum>i < j. a i) + a j)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 750 | (is "?lhs = ?rhs") | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 751 | proof | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 752 | assume ?lhs | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 753 | then show ?rhs | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 754 | unfolding less_sum_nat_iff_uniq part_def by (metis (no_types, lifting) theI') | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 755 | qed (auto simp: less_sum_nat_iff Let_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 756 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 757 | lemma part_Suc: "part a (Suc k) b = (if sum a {..<k} \<le> b \<and> b < sum a {..<k} + a k then k else part a k b)"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 758 | using leD | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 759 | by (fastforce simp: part_def less_Suc_eq less_sum_nat_iff conj_disj_distribR cong: conj_cong) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 760 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 761 | text \<open>The polynomial expansions used in Lemma 3\<close> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 762 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 763 | definition gpoly :: "[nat, nat\<Rightarrow>complex, nat, nat\<Rightarrow>nat, [nat,nat]\<Rightarrow>nat] \<Rightarrow> complex" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 764 | where "gpoly n x N a r \<equiv> (\<Sum>k<N. a k * (\<Prod>i<n. x i ^ r k i))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 765 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 766 | lemma gpoly_cong: | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 767 | assumes "\<And>k. k < N \<Longrightarrow> a' k = a k" "\<And>k i. \<lbrakk>k < N; i<n\<rbrakk> \<Longrightarrow> r' k i = r k i" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 768 | shows "gpoly n x N a r = gpoly n x N a' r'" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 769 | using assms by (auto simp: gpoly_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 770 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 771 | lemma gpoly_inc: "gpoly n x N a r = gpoly (Suc n) x N a (\<lambda>k. (r k)(n:=0))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 772 | by (simp add: gpoly_def algebra_simps sum_distrib_left) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 773 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 774 | lemma monom_times_gpoly: "gpoly n x N a r * x n ^ q = gpoly (Suc n) x N a (\<lambda>k. (r k)(n:=q))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 775 | by (simp add: gpoly_def algebra_simps sum_distrib_left) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 776 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 777 | lemma const_times_gpoly: "e * gpoly n x N a r = gpoly n x N ((*)e \<circ> a) r" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 778 | by (simp add: gpoly_def sum_distrib_left mult.assoc) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 779 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 780 | lemma one_plus_gpoly: "1 + gpoly n x N a r = gpoly n x (Suc N) (a(N:=1)) (r(N:=(\<lambda>_. 0)))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 781 | by (simp add: gpoly_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 782 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 783 | lemma gpoly_add: | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 784 | "gpoly n x N a r + gpoly n x N' a' r' | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 785 | = gpoly n x (N+N') (\<lambda>k. if k<N then a k else a' (k-N)) (\<lambda>k. if k<N then r k else r' (k-N))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 786 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 787 |   have "{..<N+N'} = {..<N} \<union> {N..<N+N'}" "{..<N} \<inter> {N..<N + N'} = {}"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 788 | by auto | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 789 | then show ?thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 790 | by (simp add: gpoly_def sum.union_disjoint sum.atLeastLessThan_shift_0[of _ N] atLeast0LessThan) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 791 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 792 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 793 | lemma gpoly_sum: | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 794 | fixes n Nf af rf p | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 795 |   defines "N \<equiv> sum Nf {..<p}"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 796 |   defines "a \<equiv> \<lambda>k. let q = (part Nf p k) in af q (k - sum Nf {..<q})"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 797 |   defines "r \<equiv> \<lambda>k. let q = (part Nf p k) in rf q (k - sum Nf {..<q})"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 798 | shows "(\<Sum>q<p. gpoly n x (Nf q) (af q) (rf q)) = gpoly n x N a r" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 799 | unfolding N_def a_def r_def | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 800 | proof (induction p) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 801 | case 0 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 802 | then show ?case | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 803 | by (simp add: gpoly_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 804 | next | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 805 | case (Suc p) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 806 | then show ?case | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 807 | by (auto simp: gpoly_add Let_def part_Suc intro: gpoly_cong) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 808 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 809 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 810 | text \<open>For excluding constant terms: with all exponents zero\<close> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 811 | definition nontriv_exponents :: "[nat, nat, [nat,nat]\<Rightarrow>nat] \<Rightarrow> bool" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 812 | where "nontriv_exponents n N r \<equiv> \<forall>k<N. \<exists>i<n. r k i \<noteq> 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 813 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 814 | lemma nontriv_exponents_add: | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 815 | "\<lbrakk>nontriv_exponents n M r; nontriv_exponents (Suc n) N r'\<rbrakk> \<Longrightarrow> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 816 | nontriv_exponents (Suc n) (M + N) (\<lambda>k. if k<M then r k else r' (k-M))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 817 | by (force simp add: nontriv_exponents_def less_Suc_eq) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 818 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 819 | lemma nontriv_exponents_sum: | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 820 | assumes "\<And>q. q < p \<Longrightarrow> nontriv_exponents n (N q) (r q)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 821 |   shows "nontriv_exponents n (sum N {..<p}) (\<lambda>k. let q = part N p k in r q (k - sum N {..<q}))"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 822 | using assms by (simp add: nontriv_exponents_def less_diff_conv2 part Let_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 823 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 824 | definition uniq_exponents :: "[nat, nat, [nat,nat]\<Rightarrow>nat] \<Rightarrow> bool" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 825 | where "uniq_exponents n N r \<equiv> \<forall>k<N. \<forall>k'<k. \<exists>i<n. r k i \<noteq> r k' i" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 826 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 827 | lemma uniq_exponents_inj: "uniq_exponents n N r \<Longrightarrow> inj_on r {..<N}"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 828 | by (smt (verit, best) inj_on_def lessThan_iff linorder_cases uniq_exponents_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 829 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 830 | text \<open>All coefficients must be nonzero\<close> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 831 | definition nonzero_coeffs :: "[nat, nat\<Rightarrow>nat] \<Rightarrow> bool" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 832 | where "nonzero_coeffs N a \<equiv> \<forall>k<N. a k \<noteq> 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 833 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 834 | text \<open>Any polynomial expansion can be cleaned up, removing zero coeffs, etc.\<close> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 835 | lemma gpoly_uniq_exponents: | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 836 | obtains N' a' r' | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 837 | where "\<And>x. gpoly n x N a r = gpoly n x N' a' r'" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 838 | "uniq_exponents n N' r'" "nonzero_coeffs N' a'" "N' \<le> N" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 839 | "nontriv_exponents n N r \<Longrightarrow> nontriv_exponents n N' r'" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 840 | proof (cases "\<forall>k<N. a k = 0") | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 841 | case True | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 842 | show thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 843 | proof | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 844 | show "gpoly n x N a r = gpoly n x 0 a r" for x | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 845 | by (auto simp: gpoly_def True) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 846 | qed (auto simp: uniq_exponents_def nonzero_coeffs_def nontriv_exponents_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 847 | next | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 848 | case False | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 849 | define cut where "cut f i \<equiv> if i<n then f i else (0::nat)" for f i | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 850 |   define R where "R \<equiv> cut ` r ` ({..<N} \<inter> {k. a k > 0})"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 851 | define N' where "N' \<equiv> card R" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 852 | define r' where "r' \<equiv> from_nat_into R" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 853 | define a' where "a' \<equiv> \<lambda>k'. \<Sum>k<N. if r' k' = cut (r k) then a k else 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 854 | have "finite R" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 855 | using R_def by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 856 |   then have bij: "bij_betw r' {..<N'} R"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 857 | using bij_betw_from_nat_into_finite N'_def r'_def by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 858 |   have 1: "card {i. i < N' \<and> r' i = cut (r k)} = Suc 0"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 859 | if "k < N" "a k > 0" for k | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 860 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 861 |     have "card {i. i < N' \<and> r' i = cut (r k)} \<le> Suc 0"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 862 | using bij by (simp add: card_le_Suc0_iff_eq bij_betw_iff_bijections Ball_def) metis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 863 |     moreover have "card {i. i < N' \<and> r' i = cut (r k)} > 0" 
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 864 | using bij that by (auto simp: card_gt_0_iff bij_betw_iff_bijections R_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 865 |     ultimately show "card {i. i < N' \<and> r' i = cut (r k)} = Suc 0"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 866 | using that by auto | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 867 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 868 | show thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 869 | proof | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 870 | have "\<exists>i<n. r' k i \<noteq> r' k' i" if "k < N'" and "k' < k" for k k' | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 871 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 872 | have "k' < N'" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 873 | using order.strict_trans that by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 874 | then have "r' k \<noteq> r' k'" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 875 | by (metis bij bij_betw_iff_bijections lessThan_iff nat_neq_iff that) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 876 | moreover obtain sk sk' where "r' k = cut sk" "r' k' = cut sk'" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 877 | by (metis R_def \<open>k < N'\<close> \<open>k' < N'\<close> bij bij_betwE image_iff lessThan_iff) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 878 | ultimately show ?thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 879 | using local.cut_def by force | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 880 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 881 | then show "uniq_exponents n N' r'" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 882 | by (auto simp: uniq_exponents_def R_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 883 |     have "R \<subseteq> (cut \<circ> r) ` {..<N}"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 884 | by (auto simp: R_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 885 | then show "N' \<le> N" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 886 | unfolding N'_def by (metis card_lessThan finite_lessThan surj_card_le) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 887 | show "gpoly n x N a r = gpoly n x N' a' r'" for x | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 888 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 889 | have "a k * (\<Prod>i<n. x i ^ r k i) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 890 | = (\<Sum>i<N'. (if r' i = cut (r k) then of_nat (a k) else of_nat 0) * (\<Prod>j<n. x j ^ r' i j))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 891 | if "k<N" for k | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 892 | using that | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 893 | by (cases"a k = 0") | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 894 | (simp_all add: if_distrib [of "\<lambda>v. v * _"] 1 cut_def flip: sum.inter_filter cong: if_cong) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 895 | then show ?thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 896 |         by (simp add: gpoly_def a'_def sum_distrib_right sum.swap [where A="{..<N'}"] if_distrib [of of_nat])
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 897 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 898 | show "nontriv_exponents n N' r'" if ne: "nontriv_exponents n N r" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 899 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 900 | have "\<exists>i<n. 0 < r' k' i" if "k' < N'" for k' | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 901 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 902 | have "r' k' \<in> R" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 903 | using bij bij_betwE that by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 904 | then obtain k where "k<N" and k: "r' k' = cut (r k)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 905 | using R_def by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 906 | with ne obtain i where "i<n" "r k i > 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 907 | by (auto simp: nontriv_exponents_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 908 | then show ?thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 909 | using k local.cut_def by auto | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 910 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 911 | then show ?thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 912 | by (simp add: nontriv_exponents_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 913 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 914 | have "0 < a' k'" if "k' < N'" for k' | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 915 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 916 | have "r' k' \<in> R" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 917 | using bij bij_betwE that by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 918 | then obtain k where "k<N" "a k > 0" "r' k' = cut (r k)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 919 | using R_def by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 920 | then have False if "a' k' = 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 921 | using that by (force simp add: a'_def Ball_def ) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 922 | then show ?thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 923 | by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 924 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 925 | then show "nonzero_coeffs N' a'" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 926 | by (auto simp: nonzero_coeffs_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 927 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 928 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 929 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 930 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 931 | lemma Kronecker_simult_aux3: | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 932 | "\<exists>N a r. (\<forall>x. (1 + (\<Sum>i<n. x i))^p = 1 + gpoly n x N a r) \<and> Suc N \<le> (p+1)^n | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 933 | \<and> nontriv_exponents n N r" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 934 | proof (induction n arbitrary: p) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 935 | case 0 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 936 | then show ?case | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 937 | by (auto simp: gpoly_def nontriv_exponents_def nonzero_coeffs_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 938 | next | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 939 | case (Suc n) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 940 | then obtain Nf af rf | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 941 | where feq: "\<And>q x. (1 + (\<Sum>i<n. x i)) ^ q = 1 + gpoly n x (Nf q) (af q) (rf q)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 942 | and Nle: "\<And>q. Suc (Nf q) \<le> (q+1)^n" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 943 | and nontriv: "\<And>q. nontriv_exponents n (Nf q) (rf q)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 944 | by metis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 945 | define N where "N \<equiv> Nf p + (\<Sum>q<p. Suc (Nf q))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 946 | define a where "a \<equiv> \<lambda>k. if k < Nf p then af p k | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 947 | else let q = part (\<lambda>t. Suc (Nf t)) p (k - Nf p) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 948 | in (p choose q) * | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 949 | (if k - Nf p - (\<Sum>t<q. Suc (Nf t)) = Nf q then Suc 0 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 950 | else af q (k - Nf p - (\<Sum>t<q. Suc(Nf t))))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 951 | define r where "r \<equiv> \<lambda>k. if k < Nf p then (rf p k)(n := 0) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 952 | else let q = part (\<lambda>t. Suc (Nf t)) p (k - Nf p) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 953 | in (if k - Nf p - (\<Sum>t<q. Suc (Nf t)) = Nf q then \<lambda>_. 0 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 954 | else rf q (k - Nf p - (\<Sum>t<q. Suc(Nf t)))) (n := p-q)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 955 |   have peq: "{..p} = insert p {..<p}"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 956 | by auto | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 957 | have "nontriv_exponents n (Nf p) (\<lambda>i. (rf p i)(n := 0))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 958 | "\<And>q. q<p \<Longrightarrow> nontriv_exponents (Suc n) (Suc (Nf q)) (\<lambda>k. (if k = Nf q then \<lambda>_. 0 else rf q k) (n := p - q))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 959 | using nontriv by (fastforce simp: nontriv_exponents_def)+ | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 960 | then have "nontriv_exponents (Suc n) N r" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 961 | unfolding N_def r_def by (intro nontriv_exponents_add nontriv_exponents_sum) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 962 | moreover | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 963 |   { fix x :: "nat \<Rightarrow> complex"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 964 | have "(1 + (\<Sum>i < Suc n. x i)) ^ p = (1 + (\<Sum>i<n. x i) + x n) ^ p" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 965 | by (simp add: add_ac) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 966 | also have "\<dots> = (\<Sum>q\<le>p. (p choose q) * (1 + (\<Sum>i<n. x i))^q * x n^(p-q))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 967 | by (simp add: binomial_ring) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 968 | also have "\<dots> = (\<Sum>q\<le>p. (p choose q) * (1 + gpoly n x (Nf q) (af q) (rf q)) * x n^(p-q))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 969 | by (simp add: feq) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 970 | also have "\<dots> = 1 + (gpoly n x (Nf p) (af p) (rf p) + (\<Sum>q<p. (p choose q) * (1 + gpoly n x (Nf q) (af q) (rf q)) * x n^(p-q)))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 971 | by (simp add: algebra_simps sum.distrib peq) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 972 | also have "\<dots> = 1 + gpoly (Suc n) x N a r" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 973 | apply (subst one_plus_gpoly) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 974 | apply (simp add: const_times_gpoly monom_times_gpoly gpoly_sum) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 975 | apply (simp add: gpoly_inc [where n=n] gpoly_add N_def a_def r_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 976 | done | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 977 |     finally have "(1 + sum x {..<Suc n}) ^ p = 1 + gpoly (Suc n) x N a r" . 
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 978 | } | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 979 | moreover have "Suc N \<le> (p + 1) ^ Suc n" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 980 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 981 | have "Suc N = (\<Sum>q\<le>p. Suc (Nf q))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 982 | by (simp add: N_def peq) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 983 | also have "\<dots> \<le> (\<Sum>q\<le>p. (q+1)^n)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 984 | by (meson Nle sum_mono) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 985 | also have "\<dots> \<le> (\<Sum>q\<le>p. (p+1)^n)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 986 | by (force intro!: sum_mono power_mono) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 987 | also have "\<dots> \<le> (p + 1) ^ Suc n" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 988 | by simp | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 989 | finally show "Suc N \<le> (p + 1) ^ Suc n" . | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 990 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 991 | ultimately show ?case | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 992 | by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 993 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 994 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 995 | lemma Kronecker_simult_aux3_uniq_exponents: | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 996 | obtains N a r where "\<And>x. (1 + (\<Sum>i<n. x i))^p = 1 + gpoly n x N a r" "Suc N \<le> (p+1)^n" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 997 | "nontriv_exponents n N r" "uniq_exponents n N r" "nonzero_coeffs N a" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 998 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 999 | obtain N0 a0 r0 where "\<And>x. (1 + (\<Sum>r<n. x r)) ^ p = 1 + gpoly n x N0 a0 r0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1000 | and "Suc N0 \<le> (p+1)^n" "nontriv_exponents n N0 r0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1001 | using Kronecker_simult_aux3 by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1002 | with le_trans Suc_le_mono gpoly_uniq_exponents [of n N0 a0 r0] that show thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1003 | by (metis (no_types, lifting)) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1004 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1005 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1006 | subsection \<open>And finally Kroncker's theorem itself\<close> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1007 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1008 | text \<open>Statement of Theorem 7.9\<close> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1009 | theorem Kronecker_thm_1: | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1010 | fixes \<alpha> \<theta>:: "nat \<Rightarrow> real" and n:: nat | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1011 |   assumes indp: "module.independent (\<lambda>r. (*) (real_of_int r)) (\<theta> ` {..<n})"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1012 |     and inj\<theta>: "inj_on \<theta> {..<n}" and "\<epsilon> > 0"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1013 | obtains t h where "\<And>i. i < n \<Longrightarrow> \<bar>t * \<theta> i - of_int (h i) - \<alpha> i\<bar> < \<epsilon>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1014 | proof (cases "n>0") | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1015 | case False then show ?thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1016 | using that by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1017 | next | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1018 | case True | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1019 | interpret Modules.module "(\<lambda>r. (*) (real_of_int r))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1020 | by (simp add: Modules.module.intro distrib_left mult.commute) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1021 | define F where "F \<equiv> \<lambda>t. 1 + (\<Sum>i<n. exp(\<i> * of_real (2 * pi * (t * \<theta> i - \<alpha> i))))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1022 | define L where "L \<equiv> Sup (range (norm \<circ> F))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1023 |   have [continuous_intros]: "0 < T \<Longrightarrow> continuous_on {0..T} F" for T
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1024 | unfolding F_def by (intro continuous_intros) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1025 | have nft_Sucn: "norm (F t) \<le> Suc n" for t | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1026 | unfolding F_def by (rule norm_triangle_le order_trans [OF norm_sum] | simp)+ | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1027 | then have L_le: "L \<le> Suc n" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1028 | by (simp add: L_def cSUP_least) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1029 | have nft_L: "norm (F t) \<le> L" for t | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1030 | by (metis L_def UNIV_I bdd_aboveI2 cSUP_upper nft_Sucn o_apply) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1031 | have "L = Suc n" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1032 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1033 |     { fix p::nat
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1034 | assume "p>0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1035 | obtain N a r where 3: "\<And>x. (1 + (\<Sum>r<n. x r)) ^ p = 1 + gpoly n x N a r" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1036 | and SucN: "Suc N \<le> (p+1)^n" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1037 | and nontriv: "nontriv_exponents n N r" and uniq: "uniq_exponents n N r" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1038 | and apos: "nonzero_coeffs N a" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1039 | using Kronecker_simult_aux3_uniq_exponents by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1040 | have "N \<noteq> 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1041 | proof | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1042 | assume "N = 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1043 | have "2^p = (1::complex)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1044 | using 3 [of "(\<lambda>_. 0)(0:=1)"] True \<open>p>0\<close> \<open>N = 0\<close> by (simp add: gpoly_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1045 | then have "2 ^ p = Suc 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1046 | by (metis of_nat_1 One_nat_def of_nat_eq_iff of_nat_numeral of_nat_power) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1047 | with \<open>0 < p\<close> show False by force | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1048 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1049 | define x where "x \<equiv> \<lambda>t r. exp(\<i> * of_real (2 * pi * (t * \<theta> r - \<alpha> r)))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1050 | define f where "f \<equiv> \<lambda>t. (F t) ^ p" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1051 | have feq: "f t = 1 + gpoly n (x t) N a r" for t | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1052 | unfolding f_def F_def x_def by (simp flip: 3) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1053 | define c where "c \<equiv> \<lambda>k. a k / cis (\<Sum>i<n. (pi * (2 * (\<alpha> i * real (r k i)))))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1054 | define \<eta> where "\<eta> \<equiv> \<lambda>k. 2 * pi * (\<Sum>i<n. r k i * \<theta> i)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1055 |       define INTT where "INTT \<equiv> \<lambda>k T. (1/T) * integral {0..T} (\<lambda>t. f t * exp(-\<i> * of_real t * \<eta> k))"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1056 | have "a k * (\<Prod>i<n. x t i ^ r k i) = c k * exp (\<i> * t * \<eta> k)" if "k<N" for k t | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1057 | apply (simp add: x_def \<eta>_def sum_distrib_left flip: exp_of_nat_mult exp_sum) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1058 | apply (simp add: algebra_simps sum_subtractf exp_diff c_def sum_distrib_left cis_conv_exp) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1059 | done | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1060 | then have fdef: "f t = 1 + (\<Sum>k<N. c k * exp(\<i> * of_real t * \<eta> k))" for t | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1061 | by (simp add: feq gpoly_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1062 | have nzero: "\<theta> i \<noteq> 0" if "i<n" for i | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1063 | using indp that local.dependent_zero by force | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1064 |       have ind_disj: "\<And>u. (\<forall>x<n. u (\<theta> x) = 0) \<or> (\<Sum>v \<in> \<theta>`{..<n}. of_int (u v) * v) \<noteq> 0"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1065 | using indp by (auto simp: dependent_finite) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1066 |       have inj\<eta>: "inj_on \<eta> {..<N}"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1067 | proof | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1068 | fix k k' | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1069 |         assume k: "k \<in> {..<N}" "k' \<in> {..<N}" and "\<eta> k = \<eta> k'"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1070 | then have eq: "(\<Sum>i<n. real (r k i) * \<theta> i) = (\<Sum>i<n. real (r k' i) * \<theta> i)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1071 | by (auto simp: \<eta>_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1072 |         define f where "f \<equiv> \<lambda>z. let i = inv_into {..<n} \<theta> z in int (r k i) - int (r k' i)"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1073 | show "k = k'" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1074 | using ind_disj [of f] inj\<theta> uniq eq k | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1075 | apply (simp add: f_def Let_def sum.reindex sum_subtractf algebra_simps uniq_exponents_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1076 | by (metis not_less_iff_gr_or_eq) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1077 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1078 |       moreover have "0 \<notin> \<eta> ` {..<N}"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1079 | unfolding \<eta>_def | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1080 | proof clarsimp | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1081 | fix k | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1082 | assume *: "(\<Sum>i<n. real (r k i) * \<theta> i) = 0" "k < N" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1083 |         define f where "f \<equiv> \<lambda>z. let i = inv_into {..<n} \<theta> z in int (r k i)"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1084 | obtain i where "i<n" and "r k i > 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1085 | by (meson \<open>k < N\<close> nontriv nontriv_exponents_def zero_less_iff_neq_zero) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1086 | with * nzero show False | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1087 | using ind_disj [of f] inj\<theta> by (simp add: f_def sum.reindex) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1088 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1089 | ultimately have 15: "(INTT k \<longlongrightarrow> c k) at_top" if "k<N" for k | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1090 | unfolding fdef INTT_def using Kronecker_simult_aux1_strict that by presburger | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1091 | have norm_c: "norm (c k) \<le> L^p" if "k<N" for k | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1092 | proof (intro tendsto_le [of _ "\<lambda>_. L^p"]) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1093 | show "((norm \<circ> INTT k) \<longlongrightarrow> cmod (c k)) at_top" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1094 | using that 15 by (simp add: o_def tendsto_norm) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1095 | have "norm (INTT k T) \<le> L^p" if "T \<ge> 0" for T::real | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1096 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1097 | have "0 \<le> L ^ p" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1098 | by (meson nft_L norm_ge_zero order_trans zero_le_power) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1099 |           have "norm (integral {0..T} (\<lambda>t. f t * exp (- (\<i> *  t * \<eta> k)))) 
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1100 |                 \<le> integral {0..T} (\<lambda>t. L^p)" (is "?L \<le> ?R")  if "T>0"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1101 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1102 |             have "?L \<le> integral {0..T} (\<lambda>t. norm (f t * exp (- (\<i> *  t * \<eta> k))))"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1103 | unfolding f_def by (intro continuous_on_imp_absolutely_integrable_on continuous_intros that) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1104 | also have "\<dots> \<le> ?R" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1105 | unfolding f_def | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1106 | by (intro integral_le continuous_intros integrable_continuous_interval that | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1107 | | simp add: nft_L norm_mult norm_power power_mono)+ | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1108 | finally show ?thesis . | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1109 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1110 |           with \<open>T \<ge> 0\<close> have "norm (INTT k T) \<le> (1/T) * integral {0..T} (\<lambda>t. L ^ p)"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1111 | by (auto simp add: INTT_def norm_divide divide_simps simp del: integral_const_real) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1112 | also have "\<dots> \<le> L ^ p" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1113 | using \<open>T \<ge> 0\<close> \<open>0 \<le> L ^ p\<close> by simp | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1114 | finally show ?thesis . | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1115 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1116 | then show "\<forall>\<^sub>F x in at_top. (norm \<circ> INTT k) x \<le> L ^ p" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1117 | using eventually_at_top_linorder that by fastforce | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1118 | qed auto | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1119 | then have "(\<Sum>k<N. cmod (c k)) \<le> N * L^p" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1120 | by (metis sum_bounded_above card_lessThan lessThan_iff) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1121 | moreover | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1122 | have "Re((1 + (\<Sum>r<n. 1)) ^ p) = Re (1 + gpoly n (\<lambda>_. 1) N a r)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1123 | using 3 [of "\<lambda>_. 1"] by metis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1124 | then have 14: "1 + (\<Sum>k<N. norm (c k)) = (1 + real n) ^ p" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1125 | by (simp add: c_def norm_divide gpoly_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1126 | moreover | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1127 | have "L^p \<ge> 1" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1128 | using norm_c [of 0] \<open>N \<noteq> 0\<close> apos | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1129 | by (force simp add: c_def norm_divide nonzero_coeffs_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1130 | ultimately have *: "(1 + real n) ^ p \<le> Suc N * L^p" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1131 | by (simp add: algebra_simps) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1132 | have [simp]: "L>0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1133 | using \<open>1 \<le> L ^ p\<close> \<open>0 < p\<close> by (smt (verit, best) nft_L norm_ge_zero power_eq_0_iff) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1134 | have "Suc n ^ p \<le> (p+1)^n * L^p" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1135 | by (smt (verit, best) * mult.commute \<open>1 \<le> L ^ p\<close> SucN mult_left_mono of_nat_1 of_nat_add of_nat_power_eq_of_nat_cancel_iff of_nat_power_le_of_nat_cancel_iff plus_1_eq_Suc) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1136 | then have "(Suc n ^ p) powr (1/p) \<le> ((p+1)^n * L^p) powr (1/p)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1137 | by (simp add: powr_mono2) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1138 | then have "(Suc n) \<le> ((p+1)^n) powr (1/p) * L" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1139 | using \<open>p > 0\<close> \<open>0 < L\<close> by (simp add: powr_powr powr_mult flip: powr_realpow) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1140 | also have "\<dots> = ((p+1) powr n) powr (1/p) * L" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1141 | by (simp add: powr_realpow) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1142 | also have "\<dots> = (p+1) powr (n/p) * L" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1143 | by (simp add: powr_powr) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1144 | finally have "(n + 1) / L \<le> (p+1) powr (n/p)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1145 | by (simp add: divide_simps) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1146 | then have "ln ((n + 1) / L) \<le> ln (real (p + 1) powr (real n / real p))" | 
| 80521 
5c691b178e08
Totalisation of ln and therefore log and powr
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1147 | by (simp add: flip: ln_powr) | 
| 78890 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1148 | also have "\<dots> \<le> (n/p) * ln(p+1)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1149 | by (simp add: powr_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1150 | finally have "ln ((n + 1) / L) \<le> (n/p) * ln(p+1) \<and> L > 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1151 | by fastforce | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1152 | } note * = this | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1153 | then have [simp]: "L > 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1154 | by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1155 | have 0: "(\<lambda>p. (n/p) * ln(p+1)) \<longlonglongrightarrow> 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1156 | by real_asymp | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1157 | have "ln (real (n + 1) / L) \<le> 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1158 | using * eventually_at_top_dense by (intro tendsto_lowerbound [OF 0]) auto | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1159 | then have "n+1 \<le> L" | 
| 80528 
6dec6b1f31f5
Better multiplication and division rules for ln and log
 paulson <lp15@cam.ac.uk> parents: 
80521diff
changeset | 1160 | using \<open>0 < L\<close> by (simp add: ln_div) | 
| 78890 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1161 | then show ?thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1162 | using L_le by linarith | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1163 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1164 | with Kronecker_simult_aux2 [of n \<theta> \<alpha>] \<open>\<epsilon> > 0\<close> that show thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1165 | by (auto simp: F_def L_def add.commute diff_diff_eq) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1166 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1167 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1168 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1169 | text \<open>Theorem 7.10\<close> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1170 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1171 | corollary Kronecker_thm_2: | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1172 | fixes \<alpha> \<theta> :: "nat \<Rightarrow> real" and n :: nat | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1173 |   assumes indp: "module.independent (\<lambda>r x. of_int r * x) (\<theta> ` {..n})"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1174 |     and inj\<theta>: "inj_on \<theta> {..n}" and [simp]: "\<theta> n = 1" and "\<epsilon> > 0"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1175 | obtains k m where "\<And>i. i < n \<Longrightarrow> \<bar>of_int k * \<theta> i - of_int (m i) - \<alpha> i\<bar> < \<epsilon>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1176 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1177 | interpret Modules.module "(\<lambda>r. (*) (real_of_int r))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1178 | by (simp add: Modules.module.intro distrib_left mult.commute) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1179 |   have one_in_\<theta>: "1 \<in> \<theta> ` {..n}"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1180 | unfolding \<open>\<theta> n = 1\<close>[symmetric] by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1181 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1182 | have not_in_Ints: "\<theta> i \<notin> \<int>" if i: "i < n" for i | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1183 | proof | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1184 | assume "\<theta> i \<in> \<int>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1185 | then obtain m where m: "\<theta> i = of_int m" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1186 | by (auto elim!: Ints_cases) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1187 | have not_one: "\<theta> i \<noteq> 1" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1188 | using inj_onD[OF inj\<theta>, of i n] i by auto | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1189 | define u :: "real \<Rightarrow> int" where "u = (\<lambda>_. 0)(\<theta> i := 1, 1 := -m)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1190 | show False | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1191 |       using independentD[OF indp, of "\<theta> ` {i, n}" u "\<theta> i"] \<open>i < n\<close> not_one one_in_\<theta>
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1192 | by (auto simp: u_def simp flip: m) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1193 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1194 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1195 |   have inj\<theta>': "inj_on (frac \<circ> \<theta>) {..n}"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1196 | proof (rule linorder_inj_onI') | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1197 |     fix i j assume ij: "i \<in> {..n}" "j \<in> {..n}" "i < j"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1198 | show "(frac \<circ> \<theta>) i \<noteq> (frac \<circ> \<theta>) j" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1199 | proof (cases "j = n") | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1200 | case True | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1201 | thus ?thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1202 | using not_in_Ints[of i] ij by auto | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1203 | next | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1204 | case False | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1205 | hence "j < n" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1206 | using ij by auto | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1207 | have "inj_on \<theta> (set [i, j, n])" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1208 | using inj\<theta> by (rule inj_on_subset) (use ij in auto) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1209 | moreover have "distinct [i, j, n]" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1210 | using \<open>j < n\<close> ij by auto | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1211 | ultimately have "distinct (map \<theta> [i, j, n])" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1212 | unfolding distinct_map by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1213 | hence distinct: "distinct [\<theta> i, \<theta> j, 1]" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1214 | by simp | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1215 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1216 | show "(frac \<circ> \<theta>) i \<noteq> (frac \<circ> \<theta>) j" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1217 | proof | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1218 | assume eq: "(frac \<circ> \<theta>) i = (frac \<circ> \<theta>) j" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1219 | define u :: "real \<Rightarrow> int" where "u = (\<lambda>_. 0)(\<theta> i := 1, \<theta> j := -1, 1 := \<lfloor>\<theta> j\<rfloor> - \<lfloor>\<theta> i\<rfloor>)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1220 |         have "(\<Sum>v\<in>{\<theta> i, \<theta> j, 1}. real_of_int (u v) * v) = frac (\<theta> i) - frac (\<theta> j)"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1221 | using distinct by (simp add: u_def frac_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1222 | also have "\<dots> = 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1223 | using eq by simp | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1224 |         finally have eq0: "(\<Sum>v\<in>{\<theta> i, \<theta> j, 1}. real_of_int (u v) * v) = 0" .
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1225 | show False | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1226 | using independentD[OF indp _ _ eq0, of "\<theta> i"] one_in_\<theta> ij distinct | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1227 | by (auto simp: u_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1228 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1229 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1230 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1231 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1232 | have "frac (\<theta> n) = 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1233 | by auto | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1234 |   then have \<theta>no_int: "of_int r \<notin> \<theta> ` {..<n}" for r
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1235 | using inj\<theta>' frac_of_int | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1236 | apply (simp add: inj_on_def Ball_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1237 | by (metis \<open>frac (\<theta> n) = 0\<close> frac_of_int imageE le_less lessThan_iff less_irrefl) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1238 | define \<theta>' where "\<theta>' \<equiv> (frac \<circ> \<theta>)(n:=1)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1239 |   have [simp]: "{..<Suc n} \<inter> {x. x \<noteq> n} = {..<n}"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1240 | by auto | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1241 |   have \<theta>image[simp]: "\<theta> ` {..n} = insert 1 (\<theta> ` {..<n})"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1242 | using lessThan_Suc lessThan_Suc_atMost by force | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1243 |   have "module.independent (\<lambda>r. (*) (of_int r)) (\<theta>' ` {..<Suc n})"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1244 | unfolding dependent_explicit \<theta>'_def | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1245 | proof clarsimp | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1246 | fix T u v | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1247 |     assume T: "T \<subseteq> insert 1 ((\<lambda>i. frac (\<theta> i)) ` {..<n})"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1248 | and "finite T" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1249 | and uv_eq0: "(\<Sum>v\<in>T. of_int (u v) * v) = 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1250 | and "v \<in> T" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1251 |     define invf where "invf \<equiv> inv_into {..<n} (frac \<circ> \<theta>)"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1252 |     have "inj_on (\<lambda>x. frac (\<theta> x)) {..<n}"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1253 | using inj\<theta>' by (auto simp: inj_on_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1254 | then have invf [simp]: "invf (frac (\<theta> i)) = i" if "i<n" for i | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1255 | using frac_lt_1 [of "\<theta> i"] that by (auto simp: invf_def o_def inv_into_f_eq [where x=i]) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1256 |     define N where "N \<equiv> invf ` (T - {1})"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1257 |     have Nsub: "N \<subseteq> {..n}" and "finite N"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1258 | using T \<open>finite T\<close> by (auto simp: N_def subset_iff) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1259 |     have inj_invf: "inj_on invf (T - {1})"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1260 | using \<theta>no_int [of 1] \<open>\<theta> n = 1\<close> inv_into_injective T | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1261 | by (fastforce simp: inj_on_def invf_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1262 |     have invf_iff: "invf t = i \<longleftrightarrow> (i<n \<and> t = frac (\<theta> i))" if "t \<in> T-{1}" for i t
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1263 | using that T by auto | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1264 |     have sumN: "(\<Sum>i\<in>N. f i) = (\<Sum>x\<in>T - {1}. f (invf x))" for f :: "nat \<Rightarrow> int"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1265 | using inj_invf T by (simp add: N_def sum.reindex) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1266 | define T' where "T' \<equiv> insert 1 (\<theta> ` N)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1267 | have [simp]: "finite T'" "1 \<in> T'" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1268 | using T'_def N_def \<open>finite T\<close> by auto | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1269 |     have T'sub: "T' \<subseteq> \<theta> ` {..n}"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1270 | using Nsub T'_def \<theta>image by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1271 | have in_N_not1: "x \<in> N \<Longrightarrow> \<theta> x \<noteq> 1" for x | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1272 | using \<theta>no_int [of 1] by (metis N_def image_iff invf_iff lessThan_iff of_int_1) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1273 | define u' where "u' = (u \<circ> frac)(1:=(if 1\<in>T then u 1 else 0) + (\<Sum>i\<in>N. - \<lfloor>\<theta> i\<rfloor> * u (frac (\<theta> i))))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1274 | have "(\<Sum>v\<in>T'. real_of_int (u' v) * v) = u' 1 + (\<Sum>v \<in> \<theta> ` N. real_of_int (u' v) * v)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1275 | using \<open>finite N\<close> by (simp add: T'_def image_iff in_N_not1) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1276 | also have "\<dots> = u' 1 + sum ((\<lambda>v. real_of_int (u' v) * v) \<circ> \<theta>) N" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1277 | by (smt (verit) N_def \<open>finite N\<close> image_iff invf_iff sum.reindex_nontrivial) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1278 | also have "\<dots> = u' 1 + (\<Sum>i\<in>N. of_int ((u \<circ> frac) (\<theta> i)) * \<theta> i)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1279 | by (auto simp add: u'_def in_N_not1) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1280 | also have "\<dots> = u' 1 + (\<Sum>i\<in>N. of_int ((u \<circ> frac) (\<theta> i)) * (floor (\<theta> i) + frac(\<theta> i)))" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1281 | by (simp add: frac_def cong: if_cong) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1282 | also have "\<dots> = (\<Sum>v\<in>T. of_int (u v) * v)" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1283 | proof (cases "1 \<in> T") | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1284 | case True | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1285 |       then have T1: "(\<Sum>v\<in>T. real_of_int (u v) * v) = u 1 + (\<Sum>v\<in>T-{1}. real_of_int (u v) * v)"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1286 | by (simp add: \<open>finite T\<close> sum.remove) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1287 | show ?thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1288 | using inj_invf True T unfolding N_def u'_def | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1289 | by (auto simp: add.assoc distrib_left sum.reindex T1 simp flip: sum.distrib intro!: sum.cong) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1290 | next | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1291 | case False | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1292 | then show ?thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1293 | using inj_invf T unfolding N_def u'_def | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1294 | by (auto simp: algebra_simps sum.reindex simp flip: sum.distrib intro!: sum.cong) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1295 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1296 | also have "\<dots> = 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1297 | using uv_eq0 by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1298 | finally have 0: "(\<Sum>v\<in>T'. real_of_int (u' v) * v) = 0" . | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1299 | have "u v = 0" if T'0: "\<And>v. v\<in>T' \<Longrightarrow> u' v = 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1300 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1301 |       have [simp]: "u t = 0" if "t \<in> T - {1}" for t
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1302 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1303 | have "\<theta> (invf t) \<in> T'" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1304 | using N_def T'_def that by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1305 | then show ?thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1306 | using that T'0 [of "\<theta> (invf t)"] | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1307 | by (smt (verit, best) in_N_not1 N_def fun_upd_other imageI invf_iff o_apply u'_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1308 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1309 | show ?thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1310 | proof (cases "v = 1") | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1311 | case True | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1312 | then have "1 \<in> T" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1313 | using \<open>v \<in> T\<close> by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1314 |         have "(\<Sum>v\<in>T. real_of_int (u v) * v) = u 1 + (\<Sum>v\<in>T - {1}. real_of_int (u v) * v)"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1315 | using True \<open>finite T\<close> \<open>v \<in> T\<close> mk_disjoint_insert by fastforce | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1316 | then have "0 = u 1" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1317 | using uv_eq0 by auto | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1318 | with True show ?thesis by presburger | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1319 | next | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1320 | case False | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1321 | then have "\<theta> (invf v) \<in> \<theta> ` N" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1322 | using N_def \<open>v \<in> T\<close> by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1323 | then show ?thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1324 | using that [of "\<theta> (invf v)"] False \<open>v \<in> T\<close> T by (force simp: T'_def in_N_not1 u'_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1325 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1326 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1327 | with indp T'sub \<open>finite T'\<close> 0 show "u v = 0" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1328 | unfolding dependent_explicit by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1329 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1330 |   moreover have "inj_on \<theta>' {..<Suc n}"
 | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1331 | using inj\<theta>' | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1332 | unfolding \<theta>'_def inj_on_def | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1333 | by (metis comp_def frac_lt_1 fun_upd_other fun_upd_same lessThan_Suc_atMost less_irrefl) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1334 | ultimately obtain t h where th: "\<And>i. i < Suc n \<Longrightarrow> \<bar>t * \<theta>' i - of_int (h i) - (\<alpha>(n:=0)) i\<bar> < \<epsilon>/2" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1335 | using Kronecker_thm_1 [of \<theta>' "Suc n" "\<epsilon>/2"] lessThan_Suc_atMost assms using half_gt_zero by blast | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1336 | define k where "k = h n" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1337 | define m where "m \<equiv> \<lambda>i. h i + k * \<lfloor>\<theta> i\<rfloor>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1338 | show thesis | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1339 | proof | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1340 | fix i assume "i < n" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1341 | have "\<bar>k * frac (\<theta> i) - h i - \<alpha> i\<bar> < \<epsilon>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1342 | proof - | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1343 | have "\<bar>k * frac (\<theta> i) - h i - \<alpha> i\<bar> = \<bar>t * frac (\<theta> i) - h i - \<alpha> i + (k-t) * frac (\<theta> i)\<bar>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1344 | by (simp add: algebra_simps) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1345 | also have "\<dots> \<le> \<bar>t * frac (\<theta> i) - h i - \<alpha> i\<bar> + \<bar>(k-t) * frac (\<theta> i)\<bar>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1346 | by linarith | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1347 | also have "\<dots> \<le> \<bar>t * frac (\<theta> i) - h i - \<alpha> i\<bar> + \<bar>k-t\<bar>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1348 | using frac_lt_1 [of "\<theta> i"] le_less by (fastforce simp add: abs_mult) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1349 | also have "\<dots> < \<epsilon>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1350 | using th[of i] th[of n] \<open>i<n\<close> | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1351 | by (simp add: k_def \<theta>'_def) (smt (verit, best)) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1352 | finally show ?thesis . | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1353 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1354 | then show "\<bar>k * \<theta> i - m i - \<alpha> i\<bar> < \<epsilon>" | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1355 | by (simp add: algebra_simps frac_def m_def) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1356 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1357 | qed | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1358 | (* TODO: use something like module.independent_family instead *) | 
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1359 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1360 | |
| 
d8045bc0544e
Added Kronecker's approximation theorem. Requires adding Real_Asymp to HOL-Analysis. Funny syntax issue in Probability/Projective_Family
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1361 | end |