src/HOL/Hyperreal/HyperDef.thy
changeset 14477 cc61fd03e589
parent 14468 6be497cacab5
child 14565 c6dc17aab88a
equal deleted inserted replaced
14476:758e7acdea2f 14477:cc61fd03e589
   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";