author | nipkow |
Tue, 17 Jun 2025 14:11:40 +0200 | |
changeset 82733 | 8b537e1af2ec |
parent 80528 | 6dec6b1f31f5 |
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 |