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
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 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)
unbundle no cross3_syntax
end
¤ 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.0.20Bemerkung:
(vorverarbeitet)
¤
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.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.