equal
deleted
inserted
replaced
927 } |
927 } |
928 with xe show ?thesis |
928 with xe show ?thesis |
929 by auto |
929 by auto |
930 qed |
930 qed |
931 |
931 |
932 subsection \<open>Orthogonality of a transformation and matrix.\<close> |
932 subsection \<open>Orthogonality of a transformation and matrix\<close> |
933 |
933 |
934 definition "orthogonal_transformation f \<longleftrightarrow> linear f \<and> (\<forall>v w. f v \<bullet> f w = v \<bullet> w)" |
934 definition "orthogonal_transformation f \<longleftrightarrow> linear f \<and> (\<forall>v w. f v \<bullet> f w = v \<bullet> w)" |
935 |
935 |
936 lemma orthogonal_transformation: |
936 lemma orthogonal_transformation: |
937 "orthogonal_transformation f \<longleftrightarrow> linear f \<and> (\<forall>v. norm (f v) = norm v)" |
937 "orthogonal_transformation f \<longleftrightarrow> linear f \<and> (\<forall>v. norm (f v) = norm v)" |
1085 fixes f :: "real^'n \<Rightarrow> real^'n" |
1085 fixes f :: "real^'n \<Rightarrow> real^'n" |
1086 shows "orthogonal_transformation f \<Longrightarrow> \<bar>det (matrix f)\<bar> = 1" |
1086 shows "orthogonal_transformation f \<Longrightarrow> \<bar>det (matrix f)\<bar> = 1" |
1087 using det_orthogonal_matrix orthogonal_transformation_matrix by fastforce |
1087 using det_orthogonal_matrix orthogonal_transformation_matrix by fastforce |
1088 |
1088 |
1089 |
1089 |
1090 subsection \<open>Linearity of scaling, and hence isometry, that preserves origin.\<close> |
1090 subsection \<open>Linearity of scaling, and hence isometry, that preserves origin\<close> |
1091 |
1091 |
1092 lemma scaling_linear: |
1092 lemma scaling_linear: |
1093 fixes f :: "'a::real_inner \<Rightarrow> 'a::real_inner" |
1093 fixes f :: "'a::real_inner \<Rightarrow> 'a::real_inner" |
1094 assumes f0: "f 0 = 0" |
1094 assumes f0: "f 0 = 0" |
1095 and fd: "\<forall>x y. dist (f x) (f y) = c * dist x y" |
1095 and fd: "\<forall>x y. dist (f x) (f y) = c * dist x y" |
1155 using assms orthogonal_transformation_surj by blast |
1155 using assms orthogonal_transformation_surj by blast |
1156 with y assms show "y \<in> f ` cball x r" |
1156 with y assms show "y \<in> f ` cball x r" |
1157 by (auto simp: orthogonal_transformation_isometry) |
1157 by (auto simp: orthogonal_transformation_isometry) |
1158 qed |
1158 qed |
1159 |
1159 |
1160 subsection\<open> We can find an orthogonal matrix taking any unit vector to any other.\<close> |
1160 subsection\<open> We can find an orthogonal matrix taking any unit vector to any other\<close> |
1161 |
1161 |
1162 lemma orthogonal_matrix_transpose [simp]: |
1162 lemma orthogonal_matrix_transpose [simp]: |
1163 "orthogonal_matrix(transpose A) \<longleftrightarrow> orthogonal_matrix A" |
1163 "orthogonal_matrix(transpose A) \<longleftrightarrow> orthogonal_matrix A" |
1164 by (auto simp: orthogonal_matrix_def) |
1164 by (auto simp: orthogonal_matrix_def) |
1165 |
1165 |
1249 using False by auto |
1249 using False by auto |
1250 qed (use f in auto) |
1250 qed (use f in auto) |
1251 qed |
1251 qed |
1252 |
1252 |
1253 |
1253 |
1254 subsection \<open>Can extend an isometry from unit sphere.\<close> |
1254 subsection \<open>Can extend an isometry from unit sphere\<close> |
1255 |
1255 |
1256 lemma isometry_sphere_extend: |
1256 lemma isometry_sphere_extend: |
1257 fixes f:: "'a::real_inner \<Rightarrow> 'a" |
1257 fixes f:: "'a::real_inner \<Rightarrow> 'a" |
1258 assumes f1: "\<forall>x. norm x = 1 \<longrightarrow> norm (f x) = 1" |
1258 assumes f1: "\<forall>x. norm x = 1 \<longrightarrow> norm (f x) = 1" |
1259 and fd1: "\<forall> x y. norm x = 1 \<longrightarrow> norm y = 1 \<longrightarrow> dist (f x) (f y) = dist x y" |
1259 and fd1: "\<forall> x y. norm x = 1 \<longrightarrow> norm y = 1 \<longrightarrow> dist (f x) (f y) = dist x y" |
1347 using g0 thfg thd |
1347 using g0 thfg thd |
1348 apply metis |
1348 apply metis |
1349 done |
1349 done |
1350 qed |
1350 qed |
1351 |
1351 |
1352 subsection \<open>Rotation, reflection, rotoinversion.\<close> |
1352 subsection \<open>Rotation, reflection, rotoinversion\<close> |
1353 |
1353 |
1354 definition "rotation_matrix Q \<longleftrightarrow> orthogonal_matrix Q \<and> det Q = 1" |
1354 definition "rotation_matrix Q \<longleftrightarrow> orthogonal_matrix Q \<and> det Q = 1" |
1355 definition "rotoinversion_matrix Q \<longleftrightarrow> orthogonal_matrix Q \<and> det Q = - 1" |
1355 definition "rotoinversion_matrix Q \<longleftrightarrow> orthogonal_matrix Q \<and> det Q = - 1" |
1356 |
1356 |
1357 lemma orthogonal_rotation_or_rotoinversion: |
1357 lemma orthogonal_rotation_or_rotoinversion: |