src/HOL/RealVector.thy
changeset 31285 0a3f9ee4117c
parent 31017 2c227493ea56
child 31289 847f00f435d4
equal deleted inserted replaced
31280:8ef7ba78bf26 31285:0a3f9ee4117c
   166 lemmas scaleR_eq_0_iff = real_vector.scale_eq_0_iff
   166 lemmas scaleR_eq_0_iff = real_vector.scale_eq_0_iff
   167 lemmas scaleR_left_imp_eq = real_vector.scale_left_imp_eq
   167 lemmas scaleR_left_imp_eq = real_vector.scale_left_imp_eq
   168 lemmas scaleR_right_imp_eq = real_vector.scale_right_imp_eq
   168 lemmas scaleR_right_imp_eq = real_vector.scale_right_imp_eq
   169 lemmas scaleR_cancel_left = real_vector.scale_cancel_left
   169 lemmas scaleR_cancel_left = real_vector.scale_cancel_left
   170 lemmas scaleR_cancel_right = real_vector.scale_cancel_right
   170 lemmas scaleR_cancel_right = real_vector.scale_cancel_right
       
   171 
       
   172 lemma scaleR_minus1_left [simp]:
       
   173   fixes x :: "'a::real_vector"
       
   174   shows "scaleR (-1) x = - x"
       
   175   using scaleR_minus_left [of 1 x] by simp
   171 
   176 
   172 class real_algebra = real_vector + ring +
   177 class real_algebra = real_vector + ring +
   173   assumes mult_scaleR_left [simp]: "scaleR a x * y = scaleR a (x * y)"
   178   assumes mult_scaleR_left [simp]: "scaleR a x * y = scaleR a (x * y)"
   174   and mult_scaleR_right [simp]: "x * scaleR a y = scaleR a (x * y)"
   179   and mult_scaleR_right [simp]: "x * scaleR a y = scaleR a (x * y)"
   175 
   180 
   631   fixes x :: "'a::{real_normed_div_algebra}"
   636   fixes x :: "'a::{real_normed_div_algebra}"
   632   shows "norm (x ^ n) = norm x ^ n"
   637   shows "norm (x ^ n) = norm x ^ n"
   633 by (induct n) (simp_all add: norm_mult)
   638 by (induct n) (simp_all add: norm_mult)
   634 
   639 
   635 
   640 
       
   641 subsection {* Distance function *}
       
   642 
       
   643 (* TODO: There should be a metric_space class for this,
       
   644 which should be a superclass of real_normed_vector. *)
       
   645 
       
   646 definition
       
   647   dist :: "'a::real_normed_vector \<Rightarrow> 'a \<Rightarrow> real"
       
   648 where
       
   649   "dist x y = norm (x - y)"
       
   650 
       
   651 lemma zero_le_dist [simp]: "0 \<le> dist x y"
       
   652 unfolding dist_def by (rule norm_ge_zero)
       
   653 
       
   654 lemma dist_eq_0_iff [simp]: "dist x y = 0 \<longleftrightarrow> x = y"
       
   655 unfolding dist_def by simp
       
   656 
       
   657 lemma dist_self [simp]: "dist x x = 0"
       
   658 unfolding dist_def by simp
       
   659 
       
   660 lemma zero_less_dist_iff: "0 < dist x y \<longleftrightarrow> x \<noteq> y"
       
   661 by (simp add: less_le)
       
   662 
       
   663 lemma dist_not_less_zero [simp]: "\<not> dist x y < 0"
       
   664 by (simp add: not_less)
       
   665 
       
   666 lemma dist_le_zero_iff [simp]: "dist x y \<le> 0 \<longleftrightarrow> x = y"
       
   667 by (simp add: le_less)
       
   668 
       
   669 lemma dist_commute: "dist x y = dist y x"
       
   670 unfolding dist_def by (rule norm_minus_commute)
       
   671 
       
   672 lemma dist_triangle: "dist x z \<le> dist x y + dist y z"
       
   673 unfolding dist_def
       
   674 apply (rule ord_eq_le_trans [OF _ norm_triangle_ineq])
       
   675 apply (simp add: diff_minus)
       
   676 done
       
   677 
       
   678 
   636 subsection {* Sign function *}
   679 subsection {* Sign function *}
   637 
   680 
   638 lemma norm_sgn:
   681 lemma norm_sgn:
   639   "norm (sgn(x::'a::real_normed_vector)) = (if x = 0 then 0 else 1)"
   682   "norm (sgn(x::'a::real_normed_vector)) = (if x = 0 then 0 else 1)"
   640 by (simp add: sgn_div_norm norm_scaleR)
   683 by (simp add: sgn_div_norm norm_scaleR)