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) |