src/HOL/Hyperreal/HyperDef.ML
changeset 12018 ec054019c910
parent 11713 883d559b0b8c
child 13438 527811f00c56
equal deleted inserted replaced
12017:78b8f9e13300 12018:ec054019c910
   309 qed "hypreal_minus_zero";
   309 qed "hypreal_minus_zero";
   310 Addsimps [hypreal_minus_zero];
   310 Addsimps [hypreal_minus_zero];
   311 
   311 
   312 Goal "(-x = 0) = (x = (0::hypreal))"; 
   312 Goal "(-x = 0) = (x = (0::hypreal))"; 
   313 by (res_inst_tac [("z","x")] eq_Abs_hypreal 1);
   313 by (res_inst_tac [("z","x")] eq_Abs_hypreal 1);
   314 by (auto_tac (claset(),
   314 by (auto_tac (claset(), simpset() addsimps [hypreal_zero_def, hypreal_minus]));
   315        simpset() addsimps [hypreal_zero_def, hypreal_minus, eq_commute] @ 
       
   316                           real_add_ac));
       
   317 qed "hypreal_minus_zero_iff";
   315 qed "hypreal_minus_zero_iff";
   318 
       
   319 Addsimps [hypreal_minus_zero_iff];
   316 Addsimps [hypreal_minus_zero_iff];
   320 
   317 
   321 
   318 
   322 (**** hyperreal addition: hypreal_add  ****)
   319 (**** hyperreal addition: hypreal_add  ****)
   323 
   320 
   428 
   425 
   429 Goal "-(y + -(x::hypreal)) = x + -y";
   426 Goal "-(y + -(x::hypreal)) = x + -y";
   430 by (simp_tac (simpset() addsimps [hypreal_add_commute]) 1);
   427 by (simp_tac (simpset() addsimps [hypreal_add_commute]) 1);
   431 qed "hypreal_minus_distrib1";
   428 qed "hypreal_minus_distrib1";
   432 
   429 
   433 Goal "(x + - (y::hypreal)) + (y + - z) = x + -z";
       
   434 by (res_inst_tac [("w1","y")] (hypreal_add_commute RS subst) 1);
       
   435 by (simp_tac (simpset() addsimps [hypreal_add_left_commute,
       
   436                                   hypreal_add_assoc]) 1);
       
   437 by (simp_tac (simpset() addsimps [hypreal_add_commute]) 1);
       
   438 qed "hypreal_add_minus_cancel1";
       
   439 
       
   440 Goal "((x::hypreal) + y = x + z) = (y = z)";
   430 Goal "((x::hypreal) + y = x + z) = (y = z)";
   441 by (Step_tac 1);
   431 by (Step_tac 1);
   442 by (dres_inst_tac [("f","%t.-x + t")] arg_cong 1);
   432 by (dres_inst_tac [("f","%t.-x + t")] arg_cong 1);
   443 by (asm_full_simp_tac (simpset() addsimps [hypreal_add_assoc RS sym]) 1);
   433 by (asm_full_simp_tac (simpset() addsimps [hypreal_add_assoc RS sym]) 1);
   444 qed "hypreal_add_left_cancel";
   434 qed "hypreal_add_left_cancel";
   445 
   435 
   446 Goal "z + (x + (y + -z)) = x + (y::hypreal)";
       
   447 by (simp_tac (simpset() addsimps hypreal_add_ac) 1);
       
   448 qed "hypreal_add_minus_cancel2";
       
   449 Addsimps [hypreal_add_minus_cancel2];
       
   450 
       
   451 Goal "y + -(x + y) = -(x::hypreal)";
       
   452 by (Full_simp_tac 1);
       
   453 by (rtac (hypreal_add_left_commute RS subst) 1);
       
   454 by (Full_simp_tac 1);
       
   455 qed "hypreal_add_minus_cancel";
       
   456 Addsimps [hypreal_add_minus_cancel];
       
   457 
       
   458 Goal "y + -(y + x) = -(x::hypreal)";
       
   459 by (simp_tac (simpset() addsimps [hypreal_add_assoc RS sym]) 1);
       
   460 qed "hypreal_add_minus_cancelc";
       
   461 Addsimps [hypreal_add_minus_cancelc];
       
   462 
       
   463 Goal "(z + -x) + (y + -z) = (y + -(x::hypreal))";
       
   464 by (full_simp_tac
       
   465     (simpset() addsimps [hypreal_minus_add_distrib RS sym, 
       
   466                          hypreal_add_left_cancel] @ hypreal_add_ac 
       
   467                delsimps [hypreal_minus_add_distrib]) 1); 
       
   468 qed "hypreal_add_minus_cancel3";
       
   469 Addsimps [hypreal_add_minus_cancel3];
       
   470 
       
   471 Goal "(y + (x::hypreal)= z + x) = (y = z)";
   436 Goal "(y + (x::hypreal)= z + x) = (y = z)";
   472 by (simp_tac (simpset() addsimps [hypreal_add_commute,
   437 by (simp_tac (simpset() addsimps [hypreal_add_commute,
   473                                   hypreal_add_left_cancel]) 1);
   438                                   hypreal_add_left_cancel]) 1);
   474 qed "hypreal_add_right_cancel";
   439 qed "hypreal_add_right_cancel";
   475 
       
   476 Goal "z + (y + -z) = (y::hypreal)";
       
   477 by (simp_tac (simpset() addsimps hypreal_add_ac) 1);
       
   478 qed "hypreal_add_minus_cancel4";
       
   479 Addsimps [hypreal_add_minus_cancel4];
       
   480 
       
   481 Goal "z + (w + (x + (-z + y))) = w + x + (y::hypreal)";
       
   482 by (simp_tac (simpset() addsimps hypreal_add_ac) 1);
       
   483 qed "hypreal_add_minus_cancel5";
       
   484 Addsimps [hypreal_add_minus_cancel5];
       
   485 
   440 
   486 Goal "z + ((- z) + w) = (w::hypreal)";
   441 Goal "z + ((- z) + w) = (w::hypreal)";
   487 by (simp_tac (simpset() addsimps [hypreal_add_assoc RS sym]) 1);
   442 by (simp_tac (simpset() addsimps [hypreal_add_assoc RS sym]) 1);
   488 qed "hypreal_add_minus_cancelA";
   443 qed "hypreal_add_minus_cancelA";
   489 
   444 
   533 
   488 
   534 Goalw [hypreal_one_def] "(1::hypreal) * z = z";
   489 Goalw [hypreal_one_def] "(1::hypreal) * z = z";
   535 by (res_inst_tac [("z","z")] eq_Abs_hypreal 1);
   490 by (res_inst_tac [("z","z")] eq_Abs_hypreal 1);
   536 by (asm_full_simp_tac (simpset() addsimps [hypreal_mult]) 1);
   491 by (asm_full_simp_tac (simpset() addsimps [hypreal_mult]) 1);
   537 qed "hypreal_mult_1";
   492 qed "hypreal_mult_1";
       
   493 Addsimps [hypreal_mult_1];
   538 
   494 
   539 Goal "z * (1::hypreal) = z";
   495 Goal "z * (1::hypreal) = z";
   540 by (simp_tac (simpset() addsimps [hypreal_mult_commute,
   496 by (simp_tac (simpset() addsimps [hypreal_mult_commute,
   541     hypreal_mult_1]) 1);
   497     hypreal_mult_1]) 1);
   542 qed "hypreal_mult_1_right";
   498 qed "hypreal_mult_1_right";
       
   499 Addsimps [hypreal_mult_1_right];
   543 
   500 
   544 Goalw [hypreal_zero_def] "0 * z = (0::hypreal)";
   501 Goalw [hypreal_zero_def] "0 * z = (0::hypreal)";
   545 by (res_inst_tac [("z","z")] eq_Abs_hypreal 1);
   502 by (res_inst_tac [("z","z")] eq_Abs_hypreal 1);
   546 by (asm_full_simp_tac (simpset() addsimps [hypreal_mult,real_mult_0]) 1);
   503 by (asm_full_simp_tac (simpset() addsimps [hypreal_mult]) 1);
   547 qed "hypreal_mult_0";
   504 qed "hypreal_mult_0";
       
   505 Addsimps [hypreal_mult_0];
   548 
   506 
   549 Goal "z * 0 = (0::hypreal)";
   507 Goal "z * 0 = (0::hypreal)";
   550 by (simp_tac (simpset() addsimps [hypreal_mult_commute, hypreal_mult_0]) 1);
   508 by (simp_tac (simpset() addsimps [hypreal_mult_commute]) 1);
   551 qed "hypreal_mult_0_right";
   509 qed "hypreal_mult_0_right";
   552 
   510 Addsimps [hypreal_mult_0_right];
   553 Addsimps [hypreal_mult_0,hypreal_mult_0_right];
       
   554 
   511 
   555 Goal "-(x * y) = -x * (y::hypreal)";
   512 Goal "-(x * y) = -x * (y::hypreal)";
   556 by (res_inst_tac [("z","x")] eq_Abs_hypreal 1);
   513 by (res_inst_tac [("z","x")] eq_Abs_hypreal 1);
   557 by (res_inst_tac [("z","y")] eq_Abs_hypreal 1);
   514 by (res_inst_tac [("z","y")] eq_Abs_hypreal 1);
   558 by (auto_tac (claset(),
   515 by (auto_tac (claset(),
   568 qed "hypreal_minus_mult_eq2";
   525 qed "hypreal_minus_mult_eq2";
   569 
   526 
   570 (*Pull negations out*)
   527 (*Pull negations out*)
   571 Addsimps [hypreal_minus_mult_eq2 RS sym, hypreal_minus_mult_eq1 RS sym];
   528 Addsimps [hypreal_minus_mult_eq2 RS sym, hypreal_minus_mult_eq1 RS sym];
   572 
   529 
   573 Goal "-x*y = (x::hypreal)*-y";
   530 Goal "(- (1::hypreal)) * z = -z";
       
   531 by (Simp_tac 1);
       
   532 qed "hypreal_mult_minus_1";
       
   533 Addsimps [hypreal_mult_minus_1];
       
   534 
       
   535 Goal "z * (- (1::hypreal)) = -z";
       
   536 by (stac hypreal_mult_commute 1);
       
   537 by (Simp_tac 1);
       
   538 qed "hypreal_mult_minus_1_right";
       
   539 Addsimps [hypreal_mult_minus_1_right];
       
   540 
       
   541 Goal "(-x) * y = (x::hypreal) * -y";
   574 by Auto_tac;
   542 by Auto_tac;
   575 qed "hypreal_minus_mult_commute";
   543 qed "hypreal_minus_mult_commute";
   576 
   544 
   577 (*-----------------------------------------------------------------------------
   545 (*-----------------------------------------------------------------------------
   578     A few more theorems
   546     A few more theorems
   597 
   565 
   598 Goal "(w::hypreal) * (z1 + z2) = (w * z1) + (w * z2)";
   566 Goal "(w::hypreal) * (z1 + z2) = (w * z1) + (w * z2)";
   599 by (simp_tac (simpset() addsimps [hypreal_mult_commute',hypreal_add_mult_distrib]) 1);
   567 by (simp_tac (simpset() addsimps [hypreal_mult_commute',hypreal_add_mult_distrib]) 1);
   600 qed "hypreal_add_mult_distrib2";
   568 qed "hypreal_add_mult_distrib2";
   601 
   569 
   602 bind_thms ("hypreal_mult_simps", [hypreal_mult_1, hypreal_mult_1_right]);
       
   603 Addsimps hypreal_mult_simps;
       
   604 
       
   605 (* 07/00 *)
       
   606 
   570 
   607 Goalw [hypreal_diff_def] "((z1::hypreal) - z2) * w = (z1 * w) - (z2 * w)";
   571 Goalw [hypreal_diff_def] "((z1::hypreal) - z2) * w = (z1 * w) - (z2 * w)";
   608 by (simp_tac (simpset() addsimps [hypreal_add_mult_distrib]) 1);
   572 by (simp_tac (simpset() addsimps [hypreal_add_mult_distrib]) 1);
   609 qed "hypreal_diff_mult_distrib";
   573 qed "hypreal_diff_mult_distrib";
   610 
   574 
   620 
   584 
   621 
   585 
   622 (**** multiplicative inverse on hypreal ****)
   586 (**** multiplicative inverse on hypreal ****)
   623 
   587 
   624 Goalw [congruent_def]
   588 Goalw [congruent_def]
   625   "congruent hyprel (%X. hyprel``{%n. if X n = Numeral0 then Numeral0 else inverse(X n)})";
   589   "congruent hyprel (%X. hyprel``{%n. if X n = 0 then 0 else inverse(X n)})";
   626 by (Auto_tac THEN Ultra_tac 1);
   590 by (Auto_tac THEN Ultra_tac 1);
   627 qed "hypreal_inverse_congruent";
   591 qed "hypreal_inverse_congruent";
   628 
   592 
   629 Goalw [hypreal_inverse_def]
   593 Goalw [hypreal_inverse_def]
   630       "inverse (Abs_hypreal(hyprel``{%n. X n})) = \
   594       "inverse (Abs_hypreal(hyprel``{%n. X n})) = \
   631 \      Abs_hypreal(hyprel `` {%n. if X n = Numeral0 then Numeral0 else inverse(X n)})";
   595 \      Abs_hypreal(hyprel `` {%n. if X n = 0 then 0 else inverse(X n)})";
   632 by (res_inst_tac [("f","Abs_hypreal")] arg_cong 1);
   596 by (res_inst_tac [("f","Abs_hypreal")] arg_cong 1);
   633 by (simp_tac (simpset() addsimps 
   597 by (simp_tac (simpset() addsimps 
   634    [hyprel_in_hypreal RS Abs_hypreal_inverse,
   598    [hyprel_in_hypreal RS Abs_hypreal_inverse,
   635     [equiv_hyprel, hypreal_inverse_congruent] MRS UN_equiv_class]) 1);
   599     [equiv_hyprel, hypreal_inverse_congruent] MRS UN_equiv_class]) 1);
   636 qed "hypreal_inverse";
   600 qed "hypreal_inverse";
   805 \      ({n. X n < Y n} : FreeUltrafilterNat)";
   769 \      ({n. X n < Y n} : FreeUltrafilterNat)";
   806 by (auto_tac (claset() addSIs [lemma_hyprel_refl], simpset()));
   770 by (auto_tac (claset() addSIs [lemma_hyprel_refl], simpset()));
   807 by (Ultra_tac 1);
   771 by (Ultra_tac 1);
   808 qed "hypreal_less";
   772 qed "hypreal_less";
   809 
   773 
   810 (*---------------------------------------------------------------------------------
   774 (*----------------------------------------------------------------------------
   811              Hyperreals as a linearly ordered field
   775 		 Trichotomy: the hyperreals are linearly ordered
   812  ---------------------------------------------------------------------------------*)
   776   ---------------------------------------------------------------------------*)
   813 (*** sum order 
   777 
   814 Goalw [hypreal_zero_def] 
   778 Goalw [hyprel_def] "EX x. x: hyprel `` {%n. 0}";
   815       "[| 0 < x; 0 < y |] ==> (0::hypreal) < x + y";
   779 by (res_inst_tac [("x","%n. 0")] exI 1);
   816 by (res_inst_tac [("z","x")] eq_Abs_hypreal 1);
       
   817 by (res_inst_tac [("z","y")] eq_Abs_hypreal 1);
       
   818 by (auto_tac (claset(),simpset() addsimps
       
   819     [hypreal_less_def,hypreal_add]));
       
   820 by (auto_tac (claset() addSIs [exI],simpset() addsimps
       
   821     [hypreal_less_def,hypreal_add]));
       
   822 by (ultra_tac (claset() addIs [real_add_order],simpset()) 1);
       
   823 qed "hypreal_add_order";
       
   824 ***)
       
   825 
       
   826 (*** mult order 
       
   827 Goalw [hypreal_zero_def] 
       
   828           "[| 0 < x; 0 < y |] ==> (0::hypreal) < x * y";
       
   829 by (res_inst_tac [("z","x")] eq_Abs_hypreal 1);
       
   830 by (res_inst_tac [("z","y")] eq_Abs_hypreal 1);
       
   831 by (auto_tac (claset() addSIs [exI],simpset() addsimps
       
   832     [hypreal_less_def,hypreal_mult]));
       
   833 by (ultra_tac (claset() addIs [rename_numerals real_mult_order],
       
   834 	       simpset()) 1);
       
   835 qed "hypreal_mult_order";
       
   836 ****)
       
   837 
       
   838 
       
   839 (*---------------------------------------------------------------------------------
       
   840                          Trichotomy of the hyperreals
       
   841   --------------------------------------------------------------------------------*)
       
   842 
       
   843 Goalw [hyprel_def] "EX x. x: hyprel `` {%n. Numeral0}";
       
   844 by (res_inst_tac [("x","%n. Numeral0")] exI 1);
       
   845 by (Step_tac 1);
   780 by (Step_tac 1);
   846 by (auto_tac (claset() addSIs [FreeUltrafilterNat_Nat_set], simpset()));
   781 by (auto_tac (claset() addSIs [FreeUltrafilterNat_Nat_set], simpset()));
   847 qed "lemma_hyprel_0_mem";
   782 qed "lemma_hyprel_0_mem";
   848 
   783 
   849 Goalw [hypreal_zero_def]"0 <  x | x = 0 | x < (0::hypreal)";
   784 Goalw [hypreal_zero_def]"0 <  x | x = 0 | x < (0::hypreal)";
   922 Goal "(x ~= a) = (x + -a ~= (0::hypreal))";
   857 Goal "(x ~= a) = (x + -a ~= (0::hypreal))";
   923 by (auto_tac (claset() addDs [hypreal_eq_minus_iff RS iffD2],
   858 by (auto_tac (claset() addDs [hypreal_eq_minus_iff RS iffD2],
   924               simpset())); 
   859               simpset())); 
   925 qed "hypreal_not_eq_minus_iff";
   860 qed "hypreal_not_eq_minus_iff";
   926 
   861 
   927 Goal "(x+y = (0::hypreal)) = (x = -y)";
       
   928 by (stac hypreal_eq_minus_iff 1);
       
   929 by Auto_tac;
       
   930 qed "hypreal_add_eq_0_iff";
       
   931 AddIffs [hypreal_add_eq_0_iff];
       
   932 
       
   933 
   862 
   934 (*** linearity ***)
   863 (*** linearity ***)
   935 
   864 
   936 Goal "(x::hypreal) < y | x = y | y < x";
   865 Goal "(x::hypreal) < y | x = y | y < x";
   937 by (stac hypreal_eq_minus_iff2 1);
   866 by (stac hypreal_eq_minus_iff2 1);
  1046 by (res_inst_tac [("z","R")] eq_Abs_hypreal 1);
   975 by (res_inst_tac [("z","R")] eq_Abs_hypreal 1);
  1047 by (auto_tac (claset(),
   976 by (auto_tac (claset(),
  1048          simpset() addsimps [hypreal_zero_def, hypreal_less,hypreal_minus]));
   977          simpset() addsimps [hypreal_zero_def, hypreal_less,hypreal_minus]));
  1049 by (ALLGOALS(Ultra_tac));
   978 by (ALLGOALS(Ultra_tac));
  1050 qed "hypreal_minus_zero_less_iff2";
   979 qed "hypreal_minus_zero_less_iff2";
  1051 
   980 Addsimps [hypreal_minus_zero_less_iff2];
  1052 Goalw [hypreal_le_def] "((0::hypreal) <= -r) = (r <= (0::hypreal))";
   981 
       
   982 Goalw [hypreal_le_def] "((0::hypreal) <= -r) = (r <= 0)";
  1053 by (simp_tac (simpset() addsimps [hypreal_minus_zero_less_iff2]) 1);
   983 by (simp_tac (simpset() addsimps [hypreal_minus_zero_less_iff2]) 1);
  1054 qed "hypreal_minus_zero_le_iff";
   984 qed "hypreal_minus_zero_le_iff";
  1055 Addsimps [hypreal_minus_zero_le_iff];
   985 Addsimps [hypreal_minus_zero_le_iff];
       
   986 
       
   987 Goalw [hypreal_le_def] "(-r <= (0::hypreal)) = (0 <= r)";
       
   988 by (simp_tac (simpset() addsimps [hypreal_minus_zero_less_iff2]) 1);
       
   989 qed "hypreal_minus_zero_le_iff2";
       
   990 Addsimps [hypreal_minus_zero_le_iff2];
  1056 
   991 
  1057 (*----------------------------------------------------------
   992 (*----------------------------------------------------------
  1058   hypreal_of_real preserves field and order properties
   993   hypreal_of_real preserves field and order properties
  1059  -----------------------------------------------------------*)
   994  -----------------------------------------------------------*)
  1060 Goalw [hypreal_of_real_def] 
   995 Goalw [hypreal_of_real_def] 
  1096 Goalw [hypreal_of_real_def] "hypreal_of_real (-r) = - hypreal_of_real  r";
  1031 Goalw [hypreal_of_real_def] "hypreal_of_real (-r) = - hypreal_of_real  r";
  1097 by (auto_tac (claset(),simpset() addsimps [hypreal_minus]));
  1032 by (auto_tac (claset(),simpset() addsimps [hypreal_minus]));
  1098 qed "hypreal_of_real_minus";
  1033 qed "hypreal_of_real_minus";
  1099 Addsimps [hypreal_of_real_minus];
  1034 Addsimps [hypreal_of_real_minus];
  1100 
  1035 
  1101 (*DON'T insert this or the next one as default simprules.
  1036 Goalw [hypreal_of_real_def,hypreal_one_def] "hypreal_of_real 1 = (1::hypreal)";
  1102   They are used in both orientations and anyway aren't the ones we finally
  1037 by (Simp_tac 1); 
  1103   need, which would use binary literals.*)
       
  1104 Goalw [hypreal_of_real_def,hypreal_one_def] "hypreal_of_real  Numeral1 = (1::hypreal)";
       
  1105 by (Step_tac 1);
       
  1106 qed "hypreal_of_real_one";
  1038 qed "hypreal_of_real_one";
  1107 
  1039 Addsimps [hypreal_of_real_one];
  1108 Goalw [hypreal_of_real_def,hypreal_zero_def] "hypreal_of_real Numeral0 = 0";
  1040 
  1109 by (Step_tac 1);
  1041 Goalw [hypreal_of_real_def,hypreal_zero_def] "hypreal_of_real 0 = 0";
       
  1042 by (Simp_tac 1); 
  1110 qed "hypreal_of_real_zero";
  1043 qed "hypreal_of_real_zero";
  1111 
  1044 Addsimps [hypreal_of_real_zero];
  1112 Goal "(hypreal_of_real r = 0) = (r = Numeral0)";
  1045 
       
  1046 Goal "(hypreal_of_real r = 0) = (r = 0)";
  1113 by (auto_tac (claset() addIs [FreeUltrafilterNat_P],
  1047 by (auto_tac (claset() addIs [FreeUltrafilterNat_P],
  1114     simpset() addsimps [hypreal_of_real_def,
  1048     simpset() addsimps [hypreal_of_real_def,
  1115                         hypreal_zero_def,FreeUltrafilterNat_Nat_set]));
  1049                         hypreal_zero_def,FreeUltrafilterNat_Nat_set]));
  1116 qed "hypreal_of_real_zero_iff";
  1050 qed "hypreal_of_real_zero_iff";
  1117 
  1051 
  1118 Goal "hypreal_of_real (inverse r) = inverse (hypreal_of_real r)";
  1052 Goal "hypreal_of_real (inverse r) = inverse (hypreal_of_real r)";
  1119 by (case_tac "r=Numeral0" 1);
  1053 by (case_tac "r=0" 1);
  1120 by (asm_simp_tac (simpset() addsimps [REAL_DIVIDE_ZERO, INVERSE_ZERO, 
  1054 by (asm_simp_tac (simpset() addsimps [REAL_DIVIDE_ZERO, INVERSE_ZERO, 
  1121                               HYPREAL_INVERSE_ZERO, hypreal_of_real_zero]) 1);
  1055                               HYPREAL_INVERSE_ZERO]) 1);
  1122 by (res_inst_tac [("c1","hypreal_of_real r")] 
  1056 by (res_inst_tac [("c1","hypreal_of_real r")] 
  1123     (hypreal_mult_left_cancel RS iffD1) 1);
  1057     (hypreal_mult_left_cancel RS iffD1) 1);
  1124 by (stac (hypreal_of_real_mult RS sym) 2); 
  1058 by (stac (hypreal_of_real_mult RS sym) 2); 
  1125 by (auto_tac (claset(), 
  1059 by (auto_tac (claset(), simpset() addsimps [hypreal_of_real_zero_iff]));
  1126          simpset() addsimps [hypreal_of_real_one, hypreal_of_real_zero_iff]));
       
  1127 qed "hypreal_of_real_inverse";
  1060 qed "hypreal_of_real_inverse";
  1128 Addsimps [hypreal_of_real_inverse];
  1061 Addsimps [hypreal_of_real_inverse];
  1129 
  1062 
  1130 Goal "hypreal_of_real (z1 / z2) = hypreal_of_real z1 / hypreal_of_real z2";
  1063 Goal "hypreal_of_real (z1 / z2) = hypreal_of_real z1 / hypreal_of_real z2";
  1131 by (simp_tac (simpset() addsimps [hypreal_divide_def, real_divide_def]) 1);
  1064 by (simp_tac (simpset() addsimps [hypreal_divide_def, real_divide_def]) 1);