541 by (simp add: hypreal_mult_less_mono2) |
541 by (simp add: hypreal_mult_less_mono2) |
542 show "\<bar>x\<bar> = (if x < 0 then -x else x)" |
542 show "\<bar>x\<bar> = (if x < 0 then -x else x)" |
543 by (auto dest: order_le_less_trans simp add: hrabs_def linorder_not_le) |
543 by (auto dest: order_le_less_trans simp add: hrabs_def linorder_not_le) |
544 qed |
544 qed |
545 |
545 |
546 lemma hypreal_mult_1_right: "z * (1::hypreal) = z" |
|
547 by (rule Ring_and_Field.mult_1_right) |
|
548 |
|
549 lemma hypreal_mult_minus_1 [simp]: "(- (1::hypreal)) * z = -z" |
|
550 by simp |
|
551 |
|
552 lemma hypreal_mult_minus_1_right [simp]: "z * (- (1::hypreal)) = -z" |
|
553 by (subst hypreal_mult_commute, simp) |
|
554 |
|
555 (*Used ONCE: in NSA.ML*) |
|
556 lemma hypreal_minus_distrib1: "-(y + -(x::hypreal)) = x + -y" |
|
557 by (simp add: hypreal_add_commute) |
|
558 |
|
559 (*Used ONCE: in Lim.ML*) |
|
560 lemma hypreal_eq_minus_iff3: "(x = y + z) = (x + -z = (y::hypreal))" |
|
561 by (auto simp add: hypreal_add_assoc) |
|
562 |
|
563 lemma hypreal_eq_minus_iff: "((x::hypreal) = y) = (x + - y = 0)" |
546 lemma hypreal_eq_minus_iff: "((x::hypreal) = y) = (x + - y = 0)" |
564 apply auto |
547 apply auto |
565 apply (rule Ring_and_Field.add_right_cancel [of _ "-y", THEN iffD1], auto) |
548 apply (rule Ring_and_Field.add_right_cancel [of _ "-y", THEN iffD1], auto) |
566 done |
549 done |
567 |
|
568 (*Used 3 TIMES: in Lim.ML*) |
|
569 lemma hypreal_not_eq_minus_iff: "(x \<noteq> a) = (x + -a \<noteq> (0::hypreal))" |
|
570 by (auto dest: hypreal_eq_minus_iff [THEN iffD2]) |
|
571 |
550 |
572 lemma hypreal_mult_left_cancel: "(c::hypreal) \<noteq> 0 ==> (c*a=c*b) = (a=b)" |
551 lemma hypreal_mult_left_cancel: "(c::hypreal) \<noteq> 0 ==> (c*a=c*b) = (a=b)" |
573 by auto |
552 by auto |
574 |
553 |
575 lemma hypreal_mult_right_cancel: "(c::hypreal) \<noteq> 0 ==> (a*c=b*c) = (a=b)" |
554 lemma hypreal_mult_right_cancel: "(c::hypreal) \<noteq> 0 ==> (a*c=b*c) = (a=b)" |
576 by auto |
555 by auto |
577 |
|
578 lemma hypreal_mult_not_0: "[| x \<noteq> 0; y \<noteq> 0 |] ==> x * y \<noteq> (0::hypreal)" |
|
579 by simp |
|
580 |
|
581 lemma hypreal_minus_inverse: "inverse(-x) = -inverse(x::hypreal)" |
|
582 by (rule Ring_and_Field.inverse_minus_eq) |
|
583 |
|
584 lemma hypreal_inverse_distrib: "inverse(x*y) = inverse(x)*inverse(y::hypreal)" |
|
585 by (rule Ring_and_Field.inverse_mult_distrib) |
|
586 |
|
587 |
|
588 subsection{* Division lemmas *} |
|
589 |
|
590 lemma hypreal_divide_one: "x/(1::hypreal) = x" |
|
591 by (simp add: hypreal_divide_def) |
|
592 |
|
593 |
|
594 (** As with multiplication, pull minus signs OUT of the / operator **) |
|
595 |
|
596 lemma hypreal_add_divide_distrib: "(x+y)/(z::hypreal) = x/z + y/z" |
|
597 by (rule Ring_and_Field.add_divide_distrib) |
|
598 |
|
599 lemma hypreal_inverse_add: |
|
600 "[|(x::hypreal) \<noteq> 0; y \<noteq> 0 |] |
|
601 ==> inverse(x) + inverse(y) = (x + y)*inverse(x*y)" |
|
602 by (simp add: Ring_and_Field.inverse_add mult_assoc) |
|
603 |
556 |
604 |
557 |
605 subsection{*The Embedding @{term hypreal_of_real} Preserves Field and |
558 subsection{*The Embedding @{term hypreal_of_real} Preserves Field and |
606 Order Properties*} |
559 Order Properties*} |
607 |
560 |
830 val hypreal_add_assoc = thm "hypreal_add_assoc"; |
783 val hypreal_add_assoc = thm "hypreal_add_assoc"; |
831 val hypreal_add_zero_left = thm "hypreal_add_zero_left"; |
784 val hypreal_add_zero_left = thm "hypreal_add_zero_left"; |
832 val hypreal_add_zero_right = thm "hypreal_add_zero_right"; |
785 val hypreal_add_zero_right = thm "hypreal_add_zero_right"; |
833 val hypreal_add_minus = thm "hypreal_add_minus"; |
786 val hypreal_add_minus = thm "hypreal_add_minus"; |
834 val hypreal_add_minus_left = thm "hypreal_add_minus_left"; |
787 val hypreal_add_minus_left = thm "hypreal_add_minus_left"; |
835 val hypreal_minus_distrib1 = thm "hypreal_minus_distrib1"; |
|
836 val hypreal_mult_congruent2 = thm "hypreal_mult_congruent2"; |
788 val hypreal_mult_congruent2 = thm "hypreal_mult_congruent2"; |
837 val hypreal_mult = thm "hypreal_mult"; |
789 val hypreal_mult = thm "hypreal_mult"; |
838 val hypreal_mult_commute = thm "hypreal_mult_commute"; |
790 val hypreal_mult_commute = thm "hypreal_mult_commute"; |
839 val hypreal_mult_assoc = thm "hypreal_mult_assoc"; |
791 val hypreal_mult_assoc = thm "hypreal_mult_assoc"; |
840 val hypreal_mult_1 = thm "hypreal_mult_1"; |
792 val hypreal_mult_1 = thm "hypreal_mult_1"; |
841 val hypreal_mult_1_right = thm "hypreal_mult_1_right"; |
|
842 val hypreal_mult_minus_1 = thm "hypreal_mult_minus_1"; |
|
843 val hypreal_mult_minus_1_right = thm "hypreal_mult_minus_1_right"; |
|
844 val hypreal_zero_not_eq_one = thm "hypreal_zero_not_eq_one"; |
793 val hypreal_zero_not_eq_one = thm "hypreal_zero_not_eq_one"; |
845 val hypreal_inverse_congruent = thm "hypreal_inverse_congruent"; |
794 val hypreal_inverse_congruent = thm "hypreal_inverse_congruent"; |
846 val hypreal_inverse = thm "hypreal_inverse"; |
795 val hypreal_inverse = thm "hypreal_inverse"; |
847 val hypreal_mult_inverse = thm "hypreal_mult_inverse"; |
796 val hypreal_mult_inverse = thm "hypreal_mult_inverse"; |
848 val hypreal_mult_inverse_left = thm "hypreal_mult_inverse_left"; |
797 val hypreal_mult_inverse_left = thm "hypreal_mult_inverse_left"; |
849 val hypreal_mult_left_cancel = thm "hypreal_mult_left_cancel"; |
798 val hypreal_mult_left_cancel = thm "hypreal_mult_left_cancel"; |
850 val hypreal_mult_right_cancel = thm "hypreal_mult_right_cancel"; |
799 val hypreal_mult_right_cancel = thm "hypreal_mult_right_cancel"; |
851 val hypreal_mult_not_0 = thm "hypreal_mult_not_0"; |
|
852 val hypreal_minus_inverse = thm "hypreal_minus_inverse"; |
|
853 val hypreal_inverse_distrib = thm "hypreal_inverse_distrib"; |
|
854 val hypreal_not_refl2 = thm "hypreal_not_refl2"; |
800 val hypreal_not_refl2 = thm "hypreal_not_refl2"; |
855 val hypreal_less = thm "hypreal_less"; |
801 val hypreal_less = thm "hypreal_less"; |
856 val hypreal_eq_minus_iff = thm "hypreal_eq_minus_iff"; |
802 val hypreal_eq_minus_iff = thm "hypreal_eq_minus_iff"; |
857 val hypreal_eq_minus_iff3 = thm "hypreal_eq_minus_iff3"; |
|
858 val hypreal_not_eq_minus_iff = thm "hypreal_not_eq_minus_iff"; |
|
859 val hypreal_le = thm "hypreal_le"; |
803 val hypreal_le = thm "hypreal_le"; |
860 val hypreal_le_refl = thm "hypreal_le_refl"; |
804 val hypreal_le_refl = thm "hypreal_le_refl"; |
861 val hypreal_le_linear = thm "hypreal_le_linear"; |
805 val hypreal_le_linear = thm "hypreal_le_linear"; |
862 val hypreal_le_trans = thm "hypreal_le_trans"; |
806 val hypreal_le_trans = thm "hypreal_le_trans"; |
863 val hypreal_le_anti_sym = thm "hypreal_le_anti_sym"; |
807 val hypreal_le_anti_sym = thm "hypreal_le_anti_sym"; |
870 val hypreal_of_real_minus = thm "hypreal_of_real_minus"; |
814 val hypreal_of_real_minus = thm "hypreal_of_real_minus"; |
871 val hypreal_of_real_one = thm "hypreal_of_real_one"; |
815 val hypreal_of_real_one = thm "hypreal_of_real_one"; |
872 val hypreal_of_real_zero = thm "hypreal_of_real_zero"; |
816 val hypreal_of_real_zero = thm "hypreal_of_real_zero"; |
873 val hypreal_of_real_inverse = thm "hypreal_of_real_inverse"; |
817 val hypreal_of_real_inverse = thm "hypreal_of_real_inverse"; |
874 val hypreal_of_real_divide = thm "hypreal_of_real_divide"; |
818 val hypreal_of_real_divide = thm "hypreal_of_real_divide"; |
875 val hypreal_divide_one = thm "hypreal_divide_one"; |
|
876 val hypreal_add_divide_distrib = thm "hypreal_add_divide_distrib"; |
|
877 val hypreal_inverse_add = thm "hypreal_inverse_add"; |
|
878 val hypreal_zero_num = thm "hypreal_zero_num"; |
819 val hypreal_zero_num = thm "hypreal_zero_num"; |
879 val hypreal_one_num = thm "hypreal_one_num"; |
820 val hypreal_one_num = thm "hypreal_one_num"; |
880 val hypreal_omega_gt_zero = thm "hypreal_omega_gt_zero"; |
821 val hypreal_omega_gt_zero = thm "hypreal_omega_gt_zero"; |
881 |
822 |
882 val hypreal_add_zero_less_le_mono = thm"hypreal_add_zero_less_le_mono"; |
823 val hypreal_add_zero_less_le_mono = thm"hypreal_add_zero_less_le_mono"; |