# HG changeset patch # User nipkow # Date 1536043253 -7200 # Node ID 8414bbd7bb46e5fbe76a0ba72ea6ddb5f673e121 # Parent 4824cc40f42e3356399d776f475c2ca67302a620 tuned diff -r 4824cc40f42e -r 8414bbd7bb46 src/HOL/Analysis/Cross3.thy --- a/src/HOL/Analysis/Cross3.thy Mon Sep 03 22:38:23 2018 +0200 +++ b/src/HOL/Analysis/Cross3.thy Tue Sep 04 08:40:53 2018 +0200 @@ -4,7 +4,7 @@ Ported from HOL Light *) -section\Vector Cross Products in 3 Dimensions.\ +section\Vector Cross Products in 3 Dimensions\ theory "Cross3" imports Determinants @@ -33,48 +33,48 @@ unbundle cross3_syntax -subsection%important\ Basic lemmas.\ +subsection%important\ Basic lemmas\ lemmas cross3_simps = cross3_def inner_vec_def sum_3 det_3 vec_eq_iff vector_def algebra_simps -lemma%unimportant dot_cross_self: "x \ (x \ y) = 0" "x \ (y \ x) = 0" "(x \ y) \ y = 0" "(y \ x) \ y = 0" +lemma dot_cross_self: "x \ (x \ y) = 0" "x \ (y \ x) = 0" "(x \ y) \ y = 0" "(y \ x) \ y = 0" by (simp_all add: orthogonal_def cross3_simps) -lemma%unimportant orthogonal_cross: "orthogonal (x \ y) x" "orthogonal (x \ y) y" +lemma orthogonal_cross: "orthogonal (x \ y) x" "orthogonal (x \ y) y" "orthogonal y (x \ y)" "orthogonal (x \ y) x" by (simp_all add: orthogonal_def dot_cross_self) -lemma%unimportant cross_zero_left [simp]: "0 \ x = 0" and cross_zero_right [simp]: "x \ 0 = 0" for x::"real^3" +lemma cross_zero_left [simp]: "0 \ x = 0" and cross_zero_right [simp]: "x \ 0 = 0" for x::"real^3" by (simp_all add: cross3_simps) -lemma%unimportant cross_skew: "(x \ y) = -(y \ x)" for x::"real^3" +lemma cross_skew: "(x \ y) = -(y \ x)" for x::"real^3" by (simp add: cross3_simps) -lemma%unimportant cross_refl [simp]: "x \ x = 0" for x::"real^3" +lemma cross_refl [simp]: "x \ x = 0" for x::"real^3" by (simp add: cross3_simps) -lemma%unimportant cross_add_left: "(x + y) \ z = (x \ z) + (y \ z)" for x::"real^3" +lemma cross_add_left: "(x + y) \ z = (x \ z) + (y \ z)" for x::"real^3" by (simp add: cross3_simps) -lemma%unimportant cross_add_right: "x \ (y + z) = (x \ y) + (x \ z)" for x::"real^3" +lemma cross_add_right: "x \ (y + z) = (x \ y) + (x \ z)" for x::"real^3" by (simp add: cross3_simps) -lemma%unimportant cross_mult_left: "(c *\<^sub>R x) \ y = c *\<^sub>R (x \ y)" for x::"real^3" +lemma cross_mult_left: "(c *\<^sub>R x) \ y = c *\<^sub>R (x \ y)" for x::"real^3" by (simp add: cross3_simps) -lemma%unimportant cross_mult_right: "x \ (c *\<^sub>R y) = c *\<^sub>R (x \ y)" for x::"real^3" +lemma cross_mult_right: "x \ (c *\<^sub>R y) = c *\<^sub>R (x \ y)" for x::"real^3" by (simp add: cross3_simps) -lemma%unimportant cross_minus_left [simp]: "(-x) \ y = - (x \ y)" for x::"real^3" +lemma cross_minus_left [simp]: "(-x) \ y = - (x \ y)" for x::"real^3" by (simp add: cross3_simps) -lemma%unimportant cross_minus_right [simp]: "x \ -y = - (x \ y)" for x::"real^3" +lemma cross_minus_right [simp]: "x \ -y = - (x \ y)" for x::"real^3" by (simp add: cross3_simps) -lemma%unimportant left_diff_distrib: "(x - y) \ z = x \ z - y \ z" for x::"real^3" +lemma left_diff_distrib: "(x - y) \ z = x \ z - y \ z" for x::"real^3" by (simp add: cross3_simps) -lemma%unimportant right_diff_distrib: "x \ (y - z) = x \ y - x \ z" for x::"real^3" +lemma right_diff_distrib: "x \ (y - z) = x \ y - x \ z" for x::"real^3" by (simp add: cross3_simps) hide_fact (open) left_diff_distrib right_diff_distrib @@ -85,24 +85,24 @@ lemma%important Lagrange: "x \ (y \ z) = (x \ z) *\<^sub>R y - (x \ y) *\<^sub>R z" by%unimportant (simp add: cross3_simps) (metis (full_types) exhaust_3) -lemma%unimportant cross_triple: "(x \ y) \ z = (y \ z) \ x" +lemma cross_triple: "(x \ y) \ z = (y \ z) \ x" by (simp add: cross3_def inner_vec_def sum_3 vec_eq_iff algebra_simps) -lemma%unimportant cross_components: +lemma cross_components: "(x \ y)$1 = x$2 * y$3 - y$2 * x$3" "(x \ y)$2 = x$3 * y$1 - y$3 * x$1" "(x \ y)$3 = x$1 * y$2 - y$1 * x$2" by (simp_all add: cross3_def inner_vec_def sum_3 vec_eq_iff algebra_simps) -lemma%unimportant cross_basis: "(axis 1 1) \ (axis 2 1) = axis 3 1" "(axis 2 1) \ (axis 1 1) = -(axis 3 1)" +lemma cross_basis: "(axis 1 1) \ (axis 2 1) = axis 3 1" "(axis 2 1) \ (axis 1 1) = -(axis 3 1)" "(axis 2 1) \ (axis 3 1) = axis 1 1" "(axis 3 1) \ (axis 2 1) = -(axis 1 1)" "(axis 3 1) \ (axis 1 1) = axis 2 1" "(axis 1 1) \ (axis 3 1) = -(axis 2 1)" using exhaust_3 by (force simp add: axis_def cross3_simps)+ -lemma%unimportant cross_basis_nonzero: +lemma cross_basis_nonzero: "u \ 0 \ ~(u \ axis 1 1 = 0) \ ~(u \ axis 2 1 = 0) \ ~(u \ axis 3 1 = 0)" by (clarsimp simp add: axis_def cross3_simps) (metis vector_3 exhaust_3) -lemma%unimportant cross_dot_cancel: +lemma cross_dot_cancel: fixes x::"real^3" assumes deq: "x \ y = x \ z" and veq: "x \ y = x \ z" and x: "x \ 0" shows "y = z" @@ -116,20 +116,20 @@ using eq_iff_diff_eq_0 by blast qed -lemma%unimportant norm_cross_dot: "(norm (x \ y))\<^sup>2 + (x \ y)\<^sup>2 = (norm x * norm y)\<^sup>2" +lemma norm_cross_dot: "(norm (x \ y))\<^sup>2 + (x \ y)\<^sup>2 = (norm x * norm y)\<^sup>2" unfolding power2_norm_eq_inner power_mult_distrib by (simp add: cross3_simps power2_eq_square) -lemma%unimportant dot_cross_det: "x \ (y \ z) = det(vector[x,y,z])" +lemma dot_cross_det: "x \ (y \ z) = det(vector[x,y,z])" by (simp add: cross3_simps) -lemma%unimportant cross_cross_det: "(w \ x) \ (y \ z) = det(vector[w,x,z]) *\<^sub>R y - det(vector[w,x,y]) *\<^sub>R z" +lemma cross_cross_det: "(w \ x) \ (y \ z) = det(vector[w,x,z]) *\<^sub>R y - det(vector[w,x,y]) *\<^sub>R z" using exhaust_3 by (force simp add: cross3_simps) lemma%important dot_cross: "(w \ x) \ (y \ z) = (w \ y) * (x \ z) - (w \ z) * (x \ y)" by%unimportant (force simp add: cross3_simps) -lemma%unimportant norm_cross: "(norm (x \ y))\<^sup>2 = (norm x)\<^sup>2 * (norm y)\<^sup>2 - (x \ y)\<^sup>2" +lemma norm_cross: "(norm (x \ y))\<^sup>2 = (norm x)\<^sup>2 * (norm y)\<^sup>2 - (x \ y)\<^sup>2" unfolding power2_norm_eq_inner power_mult_distrib by (simp add: cross3_simps power2_eq_square) @@ -147,11 +147,11 @@ finally show ?thesis . qed -lemma%unimportant cross_eq_self: "x \ y = x \ x = 0" "x \ y = y \ y = 0" +lemma cross_eq_self: "x \ y = x \ x = 0" "x \ y = y \ y = 0" apply (metis cross_zero_left dot_cross_self(1) inner_eq_zero_iff) by (metis cross_zero_right dot_cross_self(2) inner_eq_zero_iff) -lemma%unimportant norm_and_cross_eq_0: +lemma norm_and_cross_eq_0: "x \ y = 0 \ x \ y = 0 \ x = 0 \ y = 0" (is "?lhs = ?rhs") proof assume ?lhs @@ -159,7 +159,7 @@ by (metis cross_dot_cancel cross_zero_right inner_zero_right) qed auto -lemma%unimportant bilinear_cross: "bilinear(\)" +lemma bilinear_cross: "bilinear(\)" apply (auto simp add: bilinear_def linear_def) apply unfold_locales apply (simp add: cross_add_right) @@ -168,9 +168,9 @@ apply (simp add: cross_mult_left) done -subsection%important \Preservation by rotation, or other orthogonal transformation up to sign.\ +subsection%important \Preservation by rotation, or other orthogonal transformation up to sign\ -lemma%unimportant cross_matrix_mult: "transpose A *v ((A *v x) \ (A *v y)) = det A *\<^sub>R (x \ y)" +lemma cross_matrix_mult: "transpose A *v ((A *v x) \ (A *v y)) = det A *\<^sub>R (x \ y)" apply (simp add: vec_eq_iff ) apply (simp add: vector_matrix_mult_def matrix_vector_mult_def forall_3 cross3_simps) done @@ -185,10 +185,10 @@ by (metis (no_types) vector_matrix_mul_rid vector_transpose_matrix cross_matrix_mult matrix_vector_mul_assoc matrix_vector_mult_scaleR) qed -lemma%unimportant cross_rotation_matrix: "rotation_matrix A \ (A *v x) \ (A *v y) = A *v (x \ y)" +lemma cross_rotation_matrix: "rotation_matrix A \ (A *v x) \ (A *v y) = A *v (x \ y)" by (simp add: rotation_matrix_def cross_orthogonal_matrix) -lemma%unimportant cross_rotoinversion_matrix: "rotoinversion_matrix A \ (A *v x) \ (A *v y) = - A *v (x \ y)" +lemma cross_rotoinversion_matrix: "rotoinversion_matrix A \ (A *v x) \ (A *v y) = - A *v (x \ y)" by (simp add: rotoinversion_matrix_def cross_orthogonal_matrix scaleR_matrix_vector_assoc) lemma%important cross_orthogonal_transformation: @@ -203,20 +203,20 @@ by simp qed -lemma%unimportant cross_linear_image: +lemma cross_linear_image: "\linear f; \x. norm(f x) = norm x; det(matrix f) = 1\ \ (f x) \ (f y) = f(x \ y)" by (simp add: cross_orthogonal_transformation orthogonal_transformation) subsection%unimportant \Continuity\ -lemma%unimportant continuous_cross: "\continuous F f; continuous F g\ \ continuous F (\x. (f x) \ (g x))" +lemma continuous_cross: "\continuous F f; continuous F g\ \ continuous F (\x. (f x) \ (g x))" apply (subst continuous_componentwise) apply (clarsimp simp add: cross3_simps) apply (intro continuous_intros; simp) done -lemma%unimportant continuous_on_cross: +lemma continuous_on_cross: fixes f :: "'a::t2_space \ real^3" shows "\continuous_on S f; continuous_on S g\ \ continuous_on S (\x. (f x) \ (g x))" by (simp add: continuous_on_eq_continuous_within continuous_cross)