| author | Manuel Eberl <eberlm@in.tum.de> | 
| Tue, 03 Jun 2025 12:22:58 +0200 | |
| changeset 82683 | 71304514891e | 
| 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: 
78890 
diff
changeset
 | 
78  | 
show "int (b - a) \<le> int (N ^ n)"  | 
| 
 
200107cdd3ac
Some new simprules – and patches for proofs
 
paulson <lp15@cam.ac.uk> 
parents: 
78890 
diff
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: 
78890 
diff
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: 
78890 
diff
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: 
80175 
diff
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: 
80521 
diff
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  |