51 by clarsimp |
51 by clarsimp |
52 |
52 |
53 lemma (in euclidean_space) SOME_Basis: "(SOME i. i \<in> Basis) \<in> Basis" |
53 lemma (in euclidean_space) SOME_Basis: "(SOME i. i \<in> Basis) \<in> Basis" |
54 by (metis ex_in_conv nonempty_Basis someI_ex) |
54 by (metis ex_in_conv nonempty_Basis someI_ex) |
55 |
55 |
56 lemma (in euclidean_space) inner_setsum_left_Basis[simp]: |
56 lemma (in euclidean_space) inner_sum_left_Basis[simp]: |
57 "b \<in> Basis \<Longrightarrow> inner (\<Sum>i\<in>Basis. f i *\<^sub>R i) b = f b" |
57 "b \<in> Basis \<Longrightarrow> inner (\<Sum>i\<in>Basis. f i *\<^sub>R i) b = f b" |
58 by (simp add: inner_setsum_left inner_Basis if_distrib comm_monoid_add_class.setsum.If_cases) |
58 by (simp add: inner_sum_left inner_Basis if_distrib comm_monoid_add_class.sum.If_cases) |
59 |
59 |
60 lemma (in euclidean_space) euclidean_eqI: |
60 lemma (in euclidean_space) euclidean_eqI: |
61 assumes b: "\<And>b. b \<in> Basis \<Longrightarrow> inner x b = inner y b" shows "x = y" |
61 assumes b: "\<And>b. b \<in> Basis \<Longrightarrow> inner x b = inner y b" shows "x = y" |
62 proof - |
62 proof - |
63 from b have "\<forall>b\<in>Basis. inner (x - y) b = 0" |
63 from b have "\<forall>b\<in>Basis. inner (x - y) b = 0" |
68 |
68 |
69 lemma (in euclidean_space) euclidean_eq_iff: |
69 lemma (in euclidean_space) euclidean_eq_iff: |
70 "x = y \<longleftrightarrow> (\<forall>b\<in>Basis. inner x b = inner y b)" |
70 "x = y \<longleftrightarrow> (\<forall>b\<in>Basis. inner x b = inner y b)" |
71 by (auto intro: euclidean_eqI) |
71 by (auto intro: euclidean_eqI) |
72 |
72 |
73 lemma (in euclidean_space) euclidean_representation_setsum: |
73 lemma (in euclidean_space) euclidean_representation_sum: |
74 "(\<Sum>i\<in>Basis. f i *\<^sub>R i) = b \<longleftrightarrow> (\<forall>i\<in>Basis. f i = inner b i)" |
74 "(\<Sum>i\<in>Basis. f i *\<^sub>R i) = b \<longleftrightarrow> (\<forall>i\<in>Basis. f i = inner b i)" |
75 by (subst euclidean_eq_iff) simp |
75 by (subst euclidean_eq_iff) simp |
76 |
76 |
77 lemma (in euclidean_space) euclidean_representation_setsum': |
77 lemma (in euclidean_space) euclidean_representation_sum': |
78 "b = (\<Sum>i\<in>Basis. f i *\<^sub>R i) \<longleftrightarrow> (\<forall>i\<in>Basis. f i = inner b i)" |
78 "b = (\<Sum>i\<in>Basis. f i *\<^sub>R i) \<longleftrightarrow> (\<forall>i\<in>Basis. f i = inner b i)" |
79 by (auto simp add: euclidean_representation_setsum[symmetric]) |
79 by (auto simp add: euclidean_representation_sum[symmetric]) |
80 |
80 |
81 lemma (in euclidean_space) euclidean_representation: "(\<Sum>b\<in>Basis. inner x b *\<^sub>R b) = x" |
81 lemma (in euclidean_space) euclidean_representation: "(\<Sum>b\<in>Basis. inner x b *\<^sub>R b) = x" |
82 unfolding euclidean_representation_setsum by simp |
82 unfolding euclidean_representation_sum by simp |
83 |
83 |
84 lemma (in euclidean_space) choice_Basis_iff: |
84 lemma (in euclidean_space) choice_Basis_iff: |
85 fixes P :: "'a \<Rightarrow> real \<Rightarrow> bool" |
85 fixes P :: "'a \<Rightarrow> real \<Rightarrow> bool" |
86 shows "(\<forall>i\<in>Basis. \<exists>x. P i x) \<longleftrightarrow> (\<exists>x. \<forall>i\<in>Basis. P i (inner x i))" |
86 shows "(\<forall>i\<in>Basis. \<exists>x. P i x) \<longleftrightarrow> (\<exists>x. \<forall>i\<in>Basis. P i (inner x i))" |
87 unfolding bchoice_iff |
87 unfolding bchoice_iff |
94 lemma (in euclidean_space) bchoice_Basis_iff: |
94 lemma (in euclidean_space) bchoice_Basis_iff: |
95 fixes P :: "'a \<Rightarrow> real \<Rightarrow> bool" |
95 fixes P :: "'a \<Rightarrow> real \<Rightarrow> bool" |
96 shows "(\<forall>i\<in>Basis. \<exists>x\<in>A. P i x) \<longleftrightarrow> (\<exists>x. \<forall>i\<in>Basis. inner x i \<in> A \<and> P i (inner x i))" |
96 shows "(\<forall>i\<in>Basis. \<exists>x\<in>A. P i x) \<longleftrightarrow> (\<exists>x. \<forall>i\<in>Basis. inner x i \<in> A \<and> P i (inner x i))" |
97 by (simp add: choice_Basis_iff Bex_def) |
97 by (simp add: choice_Basis_iff Bex_def) |
98 |
98 |
99 lemma (in euclidean_space) euclidean_representation_setsum_fun: |
99 lemma (in euclidean_space) euclidean_representation_sum_fun: |
100 "(\<lambda>x. \<Sum>b\<in>Basis. inner (f x) b *\<^sub>R b) = f" |
100 "(\<lambda>x. \<Sum>b\<in>Basis. inner (f x) b *\<^sub>R b) = f" |
101 by (rule ext) (simp add: euclidean_representation_setsum) |
101 by (rule ext) (simp add: euclidean_representation_sum) |
102 |
102 |
103 lemma euclidean_isCont: |
103 lemma euclidean_isCont: |
104 assumes "\<And>b. b \<in> Basis \<Longrightarrow> isCont (\<lambda>x. (inner (f x) b) *\<^sub>R b) x" |
104 assumes "\<And>b. b \<in> Basis \<Longrightarrow> isCont (\<lambda>x. (inner (f x) b) *\<^sub>R b) x" |
105 shows "isCont f x" |
105 shows "isCont f x" |
106 apply (subst euclidean_representation_setsum_fun [symmetric]) |
106 apply (subst euclidean_representation_sum_fun [symmetric]) |
107 apply (rule isCont_setsum) |
107 apply (rule isCont_sum) |
108 apply (blast intro: assms) |
108 apply (blast intro: assms) |
109 done |
109 done |
110 |
110 |
111 lemma DIM_positive [simp]: "0 < DIM('a::euclidean_space)" |
111 lemma DIM_positive [simp]: "0 < DIM('a::euclidean_space)" |
112 by (simp add: card_gt_0_iff) |
112 by (simp add: card_gt_0_iff) |
113 |
113 |
114 lemma DIM_ge_Suc0 [simp]: "Suc 0 \<le> card Basis" |
114 lemma DIM_ge_Suc0 [simp]: "Suc 0 \<le> card Basis" |
115 by (meson DIM_positive Suc_leI) |
115 by (meson DIM_positive Suc_leI) |
116 |
116 |
117 |
117 |
118 lemma setsum_inner_Basis_scaleR [simp]: |
118 lemma sum_inner_Basis_scaleR [simp]: |
119 fixes f :: "'a::euclidean_space \<Rightarrow> 'b::real_vector" |
119 fixes f :: "'a::euclidean_space \<Rightarrow> 'b::real_vector" |
120 assumes "b \<in> Basis" shows "(\<Sum>i\<in>Basis. (inner i b) *\<^sub>R f i) = f b" |
120 assumes "b \<in> Basis" shows "(\<Sum>i\<in>Basis. (inner i b) *\<^sub>R f i) = f b" |
121 by (simp add: comm_monoid_add_class.setsum.remove [OF finite_Basis assms] |
121 by (simp add: comm_monoid_add_class.sum.remove [OF finite_Basis assms] |
122 assms inner_not_same_Basis comm_monoid_add_class.setsum.neutral) |
122 assms inner_not_same_Basis comm_monoid_add_class.sum.neutral) |
123 |
123 |
124 lemma setsum_inner_Basis_eq [simp]: |
124 lemma sum_inner_Basis_eq [simp]: |
125 assumes "b \<in> Basis" shows "(\<Sum>i\<in>Basis. (inner i b) * f i) = f b" |
125 assumes "b \<in> Basis" shows "(\<Sum>i\<in>Basis. (inner i b) * f i) = f b" |
126 by (simp add: comm_monoid_add_class.setsum.remove [OF finite_Basis assms] |
126 by (simp add: comm_monoid_add_class.sum.remove [OF finite_Basis assms] |
127 assms inner_not_same_Basis comm_monoid_add_class.setsum.neutral) |
127 assms inner_not_same_Basis comm_monoid_add_class.sum.neutral) |
128 |
128 |
129 subsection \<open>Subclass relationships\<close> |
129 subsection \<open>Subclass relationships\<close> |
130 |
130 |
131 instance euclidean_space \<subseteq> perfect_space |
131 instance euclidean_space \<subseteq> perfect_space |
132 proof |
132 proof |
186 begin |
186 begin |
187 |
187 |
188 definition |
188 definition |
189 "Basis = (\<lambda>u. (u, 0)) ` Basis \<union> (\<lambda>v. (0, v)) ` Basis" |
189 "Basis = (\<lambda>u. (u, 0)) ` Basis \<union> (\<lambda>v. (0, v)) ` Basis" |
190 |
190 |
191 lemma setsum_Basis_prod_eq: |
191 lemma sum_Basis_prod_eq: |
192 fixes f::"('a*'b)\<Rightarrow>('a*'b)" |
192 fixes f::"('a*'b)\<Rightarrow>('a*'b)" |
193 shows "setsum f Basis = setsum (\<lambda>i. f (i, 0)) Basis + setsum (\<lambda>i. f (0, i)) Basis" |
193 shows "sum f Basis = sum (\<lambda>i. f (i, 0)) Basis + sum (\<lambda>i. f (0, i)) Basis" |
194 proof - |
194 proof - |
195 have "inj_on (\<lambda>u. (u::'a, 0::'b)) Basis" "inj_on (\<lambda>u. (0::'a, u::'b)) Basis" |
195 have "inj_on (\<lambda>u. (u::'a, 0::'b)) Basis" "inj_on (\<lambda>u. (0::'a, u::'b)) Basis" |
196 by (auto intro!: inj_onI Pair_inject) |
196 by (auto intro!: inj_onI Pair_inject) |
197 thus ?thesis |
197 thus ?thesis |
198 unfolding Basis_prod_def |
198 unfolding Basis_prod_def |
199 by (subst setsum.union_disjoint) (auto simp: Basis_prod_def setsum.reindex) |
199 by (subst sum.union_disjoint) (auto simp: Basis_prod_def sum.reindex) |
200 qed |
200 qed |
201 |
201 |
202 instance proof |
202 instance proof |
203 show "(Basis :: ('a \<times> 'b) set) \<noteq> {}" |
203 show "(Basis :: ('a \<times> 'b) set) \<noteq> {}" |
204 unfolding Basis_prod_def by simp |
204 unfolding Basis_prod_def by simp |