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 exhaust_3)
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" proof - have"x \ x \ 0" by (simp add: x) thenhave"y - z = 0" using veq by (metis (no_types, lifting) Cross3.right_diff_distrib Lagrange deq eq_iff_diff_eq_0 inner_diff_right scale_eq_0_iff) thenshow ?thesis using eq_iff_diff_eq_0 by blast qed
lemma cross_eq_0: "x \ y = 0 \ collinear{0,x,y}" proof - have"x \ y = 0 \ norm (x \ y) = 0" by simp alsohave"... \ (norm x * norm y)\<^sup>2 = (x \ y)\<^sup>2" using norm_cross [of x y] by (auto simp: power_mult_distrib) alsohave"... \ \x \ y\ = norm x * norm y" using power2_eq_iff by (metis (mono_tags, opaque_lifting) abs_minus abs_norm_cancel abs_power2 norm_mult power_abs real_norm_def) alsohave"... \ collinear {0, x, y}" by (rule norm_cauchy_schwarz_equal) finallyshow ?thesis . qed
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 norm_and_cross_eq_0: "x \ y = 0 \ x \ y = 0 \ x = 0 \ y = 0" (is "?lhs = ?rhs") proof assume ?lhs thenshow ?rhs by (metis cross_dot_cancel cross_zero_right inner_zero_right) qed auto
subsection \<open>Preservation by rotation, or other orthogonal transformation up to sign\<close>
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
lemma cross_orthogonal_matrix: assumes"orthogonal_matrix A" shows"(A *v x) \ (A *v y) = det A *\<^sub>R (A *v (x \ y))" proof - have"mat 1 = transpose (A ** transpose A)" by (metis (no_types) assms orthogonal_matrix_def transpose_mat) thenshow ?thesis by (metis (no_types) vector_matrix_mul_rid vector_transpose_matrix cross_matrix_mult matrix_vector_mul_assoc matrix_vector_mult_scaleR) qed
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 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 cross_orthogonal_transformation: assumes"orthogonal_transformation f" shows"(f x) \ (f y) = det(matrix f) *\<^sub>R f(x \ y)" proof - have orth: "orthogonal_matrix (matrix f)" using assms orthogonal_transformation_matrix by blast have"matrix f *v z = f z"for z using assms orthogonal_transformation_matrix by force with cross_orthogonal_matrix [OF orth] show ?thesis by simp qed
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Formatika GbR, eine F&E Firma aus Norddeutschland
Die farbliche Syntaxdarstellung ist noch experimentell.