src/HOL/Real/RealOrd.ML
changeset 10752 c4f1bf2acf4c
parent 10712 351ba950d4d9
child 10778 2c6605049646
equal deleted inserted replaced
10751:a81ea5d3dd41 10752:c4f1bf2acf4c
    76 				real_of_preal_not_minus_gt_zero RS notE]) 1);
    76 				real_of_preal_not_minus_gt_zero RS notE]) 1);
    77 qed "real_gt_zero_preal_Ex";
    77 qed "real_gt_zero_preal_Ex";
    78 
    78 
    79 Goal "real_of_preal z < x ==> EX y. x = real_of_preal y";
    79 Goal "real_of_preal z < x ==> EX y. x = real_of_preal y";
    80 by (blast_tac (claset() addSDs [real_of_preal_zero_less RS real_less_trans]
    80 by (blast_tac (claset() addSDs [real_of_preal_zero_less RS real_less_trans]
    81                addIs [real_gt_zero_preal_Ex RS iffD1]) 1);
    81                         addIs [real_gt_zero_preal_Ex RS iffD1]) 1);
    82 qed "real_gt_preal_preal_Ex";
    82 qed "real_gt_preal_preal_Ex";
    83 
    83 
    84 Goal "real_of_preal z <= x ==> EX y. x = real_of_preal y";
    84 Goal "real_of_preal z <= x ==> EX y. x = real_of_preal y";
    85 by (blast_tac (claset() addDs [real_le_imp_less_or_eq,
    85 by (blast_tac (claset() addDs [order_le_imp_less_or_eq,
    86 			       real_gt_preal_preal_Ex]) 1);
    86 			       real_gt_preal_preal_Ex]) 1);
    87 qed "real_ge_preal_preal_Ex";
    87 qed "real_ge_preal_preal_Ex";
    88 
    88 
    89 Goal "y <= 0 ==> ALL x. y < real_of_preal x";
    89 Goal "y <= 0 ==> ALL x. y < real_of_preal x";
    90 by (auto_tac (claset() addEs [real_le_imp_less_or_eq RS disjE]
    90 by (auto_tac (claset() addEs [order_le_imp_less_or_eq RS disjE]
    91                        addIs [real_of_preal_zero_less RSN(2,real_less_trans)],
    91                        addIs [real_of_preal_zero_less RSN(2,real_less_trans)],
    92               simpset() addsimps [real_of_preal_zero_less]));
    92               simpset() addsimps [real_of_preal_zero_less]));
    93 qed "real_less_all_preal";
    93 qed "real_less_all_preal";
    94 
    94 
    95 Goal "~ 0 < y ==> ALL x. y < real_of_preal x";
    95 Goal "~ 0 < y ==> ALL x. y < real_of_preal x";
   111 				real_ex_add_positive_left_less]) 1);
   111 				real_ex_add_positive_left_less]) 1);
   112 qed "real_less_iff_add";
   112 qed "real_less_iff_add";
   113 
   113 
   114 Goal "(real_of_preal m1 <= real_of_preal m2) = (m1 <= m2)";
   114 Goal "(real_of_preal m1 <= real_of_preal m2) = (m1 <= m2)";
   115 by (auto_tac (claset() addSIs [preal_leI],
   115 by (auto_tac (claset() addSIs [preal_leI],
   116     simpset() addsimps [real_less_le_iff RS sym]));
   116               simpset() addsimps [real_less_le_iff RS sym]));
   117 by (dtac preal_le_less_trans 1 THEN assume_tac 1);
   117 by (dtac order_le_less_trans 1 THEN assume_tac 1);
   118 by (etac preal_less_irrefl 1);
   118 by (etac preal_less_irrefl 1);
   119 qed "real_of_preal_le_iff";
   119 qed "real_of_preal_le_iff";
   120 
   120 
   121 Goal "[| 0 < x; 0 < y |] ==> (0::real) < x * y";
   121 Goal "[| 0 < x; 0 < y |] ==> (0::real) < x * y";
   122 by (auto_tac (claset(), simpset() addsimps [real_gt_zero_preal_Ex]));  
   122 by (auto_tac (claset(), simpset() addsimps [real_gt_zero_preal_Ex]));  
   129 by (dtac real_mult_order 1 THEN assume_tac 1);
   129 by (dtac real_mult_order 1 THEN assume_tac 1);
   130 by (Asm_full_simp_tac 1);
   130 by (Asm_full_simp_tac 1);
   131 qed "real_mult_less_zero1";
   131 qed "real_mult_less_zero1";
   132 
   132 
   133 Goal "[| 0 <= x; 0 <= y |] ==> (0::real) <= x * y";
   133 Goal "[| 0 <= x; 0 <= y |] ==> (0::real) <= x * y";
   134 by (REPEAT(dtac real_le_imp_less_or_eq 1));
   134 by (REPEAT(dtac order_le_imp_less_or_eq 1));
   135 by (auto_tac (claset() addIs [real_mult_order, real_less_imp_le],
   135 by (auto_tac (claset() addIs [real_mult_order, order_less_imp_le],
   136 	      simpset()));
   136 	      simpset()));
   137 qed "real_le_mult_order";
   137 qed "real_le_mult_order";
   138 
   138 
   139 Goal "[| 0 < x; 0 <= y |] ==> (0::real) <= x * y";
   139 Goal "[| 0 < x; 0 <= y |] ==> (0::real) <= x * y";
   140 by (dtac real_le_imp_less_or_eq 1);
   140 by (dtac order_le_imp_less_or_eq 1);
   141 by (auto_tac (claset() addIs [real_mult_order,
   141 by (auto_tac (claset() addIs [real_mult_order, order_less_imp_le], 
   142 			      real_less_imp_le],simpset()));
   142               simpset()));
   143 qed "real_less_le_mult_order";
   143 qed "real_less_le_mult_order";
   144 
   144 
   145 Goal "[| x <= 0; y <= 0 |] ==> (0::real) <= x * y";
   145 Goal "[| x <= 0; y <= 0 |] ==> (0::real) <= x * y";
   146 by (rtac real_less_or_eq_imp_le 1);
   146 by (rtac real_less_or_eq_imp_le 1);
   147 by (dtac real_le_imp_less_or_eq 1 THEN etac disjE 1);
   147 by (dtac order_le_imp_less_or_eq 1 THEN etac disjE 1);
   148 by Auto_tac;
   148 by Auto_tac;
   149 by (dtac real_le_imp_less_or_eq 1);
   149 by (dtac order_le_imp_less_or_eq 1);
   150 by (auto_tac (claset() addDs [real_mult_less_zero1],simpset()));
   150 by (auto_tac (claset() addDs [real_mult_less_zero1],simpset()));
   151 qed "real_mult_le_zero1";
   151 qed "real_mult_le_zero1";
   152 
   152 
   153 Goal "[| 0 <= x; y < 0 |] ==> x * y <= (0::real)";
   153 Goal "[| 0 <= x; y < 0 |] ==> x * y <= (0::real)";
   154 by (rtac real_less_or_eq_imp_le 1);
   154 by (rtac real_less_or_eq_imp_le 1);
   155 by (dtac real_le_imp_less_or_eq 1 THEN etac disjE 1);
   155 by (dtac order_le_imp_less_or_eq 1 THEN etac disjE 1);
   156 by Auto_tac;
   156 by Auto_tac;
   157 by (dtac (real_minus_zero_less_iff RS iffD2) 1);
   157 by (dtac (real_minus_zero_less_iff RS iffD2) 1);
   158 by (rtac (real_minus_zero_less_iff RS subst) 1);
   158 by (rtac (real_minus_zero_less_iff RS subst) 1);
   159 by (blast_tac (claset() addDs [real_mult_order] 
   159 by (blast_tac (claset() addDs [real_mult_order] 
   160 	                addIs [real_minus_mult_eq2 RS ssubst]) 1);
   160 	                addIs [real_minus_mult_eq2 RS ssubst]) 1);
   199 
   199 
   200 (*"v<=w ==> v+z <= w+z"*)
   200 (*"v<=w ==> v+z <= w+z"*)
   201 bind_thm ("real_add_le_mono1", real_add_right_cancel_le RS iffD2);
   201 bind_thm ("real_add_le_mono1", real_add_right_cancel_le RS iffD2);
   202 
   202 
   203 Goal "!!z z'::real. [| w'<w; z'<=z |] ==> w' + z' < w + z";
   203 Goal "!!z z'::real. [| w'<w; z'<=z |] ==> w' + z' < w + z";
   204 by (etac (real_add_less_mono1 RS real_less_le_trans) 1);
   204 by (etac (real_add_less_mono1 RS order_less_le_trans) 1);
   205 by (Simp_tac 1);
   205 by (Simp_tac 1);
   206 qed "real_add_less_le_mono";
   206 qed "real_add_less_le_mono";
   207 
   207 
   208 Goal "!!z z'::real. [| w'<=w; z'<z |] ==> w' + z' < w + z";
   208 Goal "!!z z'::real. [| w'<=w; z'<z |] ==> w' + z' < w + z";
   209 by (etac (real_add_le_mono1 RS real_le_less_trans) 1);
   209 by (etac (real_add_le_mono1 RS order_le_less_trans) 1);
   210 by (Simp_tac 1);
   210 by (Simp_tac 1);
   211 qed "real_add_le_less_mono";
   211 qed "real_add_le_less_mono";
   212 
   212 
   213 Goal "!!(A::real). A < B ==> C + A < C + B";
   213 Goal "!!(A::real). A < B ==> C + A < C + B";
   214 by (Simp_tac 1);
   214 by (Simp_tac 1);
   229 Goal "!!(A::real). C + A <= C + B ==> A <= B";
   229 Goal "!!(A::real). C + A <= C + B ==> A <= B";
   230 by (Full_simp_tac 1);
   230 by (Full_simp_tac 1);
   231 qed "real_le_add_left_cancel";
   231 qed "real_le_add_left_cancel";
   232 
   232 
   233 Goal "[| 0 < x; 0 < y |] ==> (0::real) < x + y";
   233 Goal "[| 0 < x; 0 < y |] ==> (0::real) < x + y";
   234 by (etac real_less_trans 1);
   234 by (etac order_less_trans 1);
   235 by (dtac real_add_less_mono2 1);
   235 by (dtac real_add_less_mono2 1);
   236 by (Full_simp_tac 1);
   236 by (Full_simp_tac 1);
   237 qed "real_add_order";
   237 qed "real_add_order";
   238 
   238 
   239 Goal "[| 0 <= x; 0 <= y |] ==> (0::real) <= x + y";
   239 Goal "[| 0 <= x; 0 <= y |] ==> (0::real) <= x + y";
   240 by (REPEAT(dtac real_le_imp_less_or_eq 1));
   240 by (REPEAT(dtac order_le_imp_less_or_eq 1));
   241 by (auto_tac (claset() addIs [real_add_order, real_less_imp_le],
   241 by (auto_tac (claset() addIs [real_add_order, order_less_imp_le],
   242 	      simpset()));
   242 	      simpset()));
   243 qed "real_le_add_order";
   243 qed "real_le_add_order";
   244 
   244 
   245 Goal "[| R1 < S1; R2 < S2 |] ==> R1 + R2 < S1 + (S2::real)";
   245 Goal "[| R1 < S1; R2 < S2 |] ==> R1 + R2 < S1 + (S2::real)";
   246 by (dtac real_add_less_mono1 1);
   246 by (dtac real_add_less_mono1 1);
   247 by (etac real_less_trans 1);
   247 by (etac order_less_trans 1);
   248 by (etac real_add_less_mono2 1);
   248 by (etac real_add_less_mono2 1);
   249 qed "real_add_less_mono";
   249 qed "real_add_less_mono";
   250 
   250 
   251 Goal "!!(q1::real). q1 <= q2  ==> x + q1 <= x + q2";
   251 Goal "!!(q1::real). q1 <= q2  ==> x + q1 <= x + q2";
   252 by (Simp_tac 1);
   252 by (Simp_tac 1);
   253 qed "real_add_left_le_mono1";
   253 qed "real_add_left_le_mono1";
   254 
   254 
   255 Goal "[|i<=j;  k<=l |] ==> i + k <= j + (l::real)";
   255 Goal "[|i<=j;  k<=l |] ==> i + k <= j + (l::real)";
   256 by (dtac real_add_le_mono1 1);
   256 by (dtac real_add_le_mono1 1);
   257 by (etac real_le_trans 1);
   257 by (etac order_trans 1);
   258 by (Simp_tac 1);
   258 by (Simp_tac 1);
   259 qed "real_add_le_mono";
   259 qed "real_add_le_mono";
   260 
   260 
   261 Goal "EX (x::real). x < y";
   261 Goal "EX (x::real). x < y";
   262 by (rtac (real_add_zero_right RS subst) 1);
   262 by (rtac (real_add_zero_right RS subst) 1);
   281 by (auto_tac (claset(), simpset() addsimps [real_add_assoc]));
   281 by (auto_tac (claset(), simpset() addsimps [real_add_assoc]));
   282 qed "real_le_minus_iff";
   282 qed "real_le_minus_iff";
   283 Addsimps [real_le_minus_iff];
   283 Addsimps [real_le_minus_iff];
   284           
   284           
   285 Goal "0 <= 1r";
   285 Goal "0 <= 1r";
   286 by (rtac (real_zero_less_one RS real_less_imp_le) 1);
   286 by (rtac (real_zero_less_one RS order_less_imp_le) 1);
   287 qed "real_zero_le_one";
   287 qed "real_zero_le_one";
   288 Addsimps [real_zero_le_one];
   288 Addsimps [real_zero_le_one];
   289 
   289 
   290 Goal "(0::real) <= x*x";
   290 Goal "(0::real) <= x*x";
   291 by (res_inst_tac [("R2.0","0"),("R1.0","x")] real_linear_less2 1);
   291 by (res_inst_tac [("R2.0","0"),("R1.0","x")] real_linear_less2 1);
   292 by (auto_tac (claset() addIs [real_mult_order,
   292 by (auto_tac (claset() addIs [real_mult_order,
   293 			      real_mult_less_zero1,real_less_imp_le],
   293 			      real_mult_less_zero1,order_less_imp_le],
   294 	      simpset()));
   294 	      simpset()));
   295 qed "real_le_square";
   295 qed "real_le_square";
   296 Addsimps [real_le_square];
   296 Addsimps [real_le_square];
   297 
   297 
   298 (*----------------------------------------------------------------------------
   298 (*----------------------------------------------------------------------------
   351 Goal "1r <= real_of_posnat n";
   351 Goal "1r <= real_of_posnat n";
   352 by (simp_tac (simpset() addsimps [real_of_posnat_one RS sym]) 1);
   352 by (simp_tac (simpset() addsimps [real_of_posnat_one RS sym]) 1);
   353 by (induct_tac "n" 1);
   353 by (induct_tac "n" 1);
   354 by (auto_tac (claset(),
   354 by (auto_tac (claset(),
   355 	      simpset () addsimps [real_of_posnat_Suc,real_of_posnat_one,
   355 	      simpset () addsimps [real_of_posnat_Suc,real_of_posnat_one,
   356 			   real_of_posnat_gt_zero, real_less_imp_le]));
   356 			   real_of_posnat_gt_zero, order_less_imp_le]));
   357 qed "real_of_posnat_less_one";
   357 qed "real_of_posnat_less_one";
   358 Addsimps [real_of_posnat_less_one];
   358 Addsimps [real_of_posnat_less_one];
   359 
   359 
   360 Goal "inverse (real_of_posnat n) ~= 0";
   360 Goal "inverse (real_of_posnat n) ~= 0";
   361 by (rtac ((real_of_posnat_gt_zero RS 
   361 by (rtac ((real_of_posnat_gt_zero RS 
   376 Goal "0 < x ==> 0 < inverse (x::real)";
   376 Goal "0 < x ==> 0 < inverse (x::real)";
   377 by (EVERY1[rtac ccontr, dtac real_leI]);
   377 by (EVERY1[rtac ccontr, dtac real_leI]);
   378 by (forward_tac [real_minus_zero_less_iff2 RS iffD2] 1);
   378 by (forward_tac [real_minus_zero_less_iff2 RS iffD2] 1);
   379 by (forward_tac [real_not_refl2 RS not_sym] 1);
   379 by (forward_tac [real_not_refl2 RS not_sym] 1);
   380 by (dtac (real_not_refl2 RS not_sym RS real_inverse_not_zero) 1);
   380 by (dtac (real_not_refl2 RS not_sym RS real_inverse_not_zero) 1);
   381 by (EVERY1[dtac real_le_imp_less_or_eq, Step_tac]); 
   381 by (EVERY1[dtac order_le_imp_less_or_eq, Step_tac]); 
   382 by (dtac real_mult_less_zero1 1 THEN assume_tac 1);
   382 by (dtac real_mult_less_zero1 1 THEN assume_tac 1);
   383 by (auto_tac (claset() addIs [real_zero_less_one RS real_less_asym],
   383 by (auto_tac (claset() addIs [real_zero_less_one RS real_less_asym],
   384 	      simpset()));
   384 	      simpset()));
   385 qed "real_inverse_gt_zero";
   385 qed "real_inverse_gt_zero";
   386 
   386 
   416 Goal "1r < 1r + 1r";
   416 Goal "1r < 1r + 1r";
   417 by (rtac real_self_less_add_one 1);
   417 by (rtac real_self_less_add_one 1);
   418 qed "real_one_less_two";
   418 qed "real_one_less_two";
   419 
   419 
   420 Goal "0 < 1r + 1r";
   420 Goal "0 < 1r + 1r";
   421 by (rtac ([real_zero_less_one,
   421 by (rtac ([real_zero_less_one, real_one_less_two] MRS order_less_trans) 1);
   422 	   real_one_less_two] MRS real_less_trans) 1);
       
   423 qed "real_zero_less_two";
   422 qed "real_zero_less_two";
   424 
   423 
   425 Goal "1r + 1r ~= 0";
   424 Goal "1r + 1r ~= 0";
   426 by (rtac (real_zero_less_two RS real_not_refl2 RS not_sym) 1);
   425 by (rtac (real_zero_less_two RS real_not_refl2 RS not_sym) 1);
   427 qed "real_two_not_zero";
   426 qed "real_two_not_zero";
   428 
       
   429 Addsimps [real_two_not_zero];
   427 Addsimps [real_two_not_zero];
   430 
       
   431 Goal "x * inverse (1r + 1r) + x * inverse(1r + 1r) = x";
       
   432 by (stac real_add_self 1);
       
   433 by (full_simp_tac (simpset() addsimps [real_mult_assoc]) 1);
       
   434 qed "real_sum_of_halves";
       
   435 
   428 
   436 Goal "[| (0::real) < z; x < y |] ==> x*z < y*z";       
   429 Goal "[| (0::real) < z; x < y |] ==> x*z < y*z";       
   437 by (rotate_tac 1 1);
   430 by (rotate_tac 1 1);
   438 by (dtac real_less_sum_gt_zero 1);
   431 by (dtac real_less_sum_gt_zero 1);
   439 by (rtac real_sum_gt_zero_less 1);
   432 by (rtac real_sum_gt_zero_less 1);
   440 by (dtac real_mult_order 1 THEN assume_tac 1);
   433 by (dtac real_mult_order 1 THEN assume_tac 1);
   441 by (asm_full_simp_tac (simpset() addsimps [real_add_mult_distrib2,
   434 by (asm_full_simp_tac
   442 					   real_mult_commute ]) 1);
   435     (simpset() addsimps [real_add_mult_distrib2, real_mult_commute ]) 1);
   443 qed "real_mult_less_mono1";
   436 qed "real_mult_less_mono1";
   444 
   437 
   445 Goal "[| (0::real) < z; x < y |] ==> z * x < z * y";       
   438 Goal "[| (0::real) < z; x < y |] ==> z * x < z * y";       
   446 by (asm_simp_tac (simpset() addsimps [real_mult_commute,real_mult_less_mono1]) 1);
   439 by (asm_simp_tac
       
   440     (simpset() addsimps [real_mult_commute,real_mult_less_mono1]) 1);
   447 qed "real_mult_less_mono2";
   441 qed "real_mult_less_mono2";
   448 
   442 
   449 Goal "[| (0::real) < z; x * z < y * z |] ==> x < y";
   443 Goal "[| (0::real) < z; x * z < y * z |] ==> x < y";
   450 by (forw_inst_tac [("x","x*z")] (real_inverse_gt_zero 
   444 by (forw_inst_tac [("x","x*z")] 
   451                        RS real_mult_less_mono1) 1);
   445     (real_inverse_gt_zero RS real_mult_less_mono1) 1);
   452 by (auto_tac (claset(),
   446 by (auto_tac (claset(),
   453 	      simpset() addsimps 
   447 	      simpset() addsimps [real_mult_assoc,real_not_refl2 RS not_sym]));
   454      [real_mult_assoc,real_not_refl2 RS not_sym]));
       
   455 qed "real_mult_less_cancel1";
   448 qed "real_mult_less_cancel1";
   456 
   449 
   457 Goal "[| (0::real) < z; z*x < z*y |] ==> x < y";
   450 Goal "[| (0::real) < z; z*x < z*y |] ==> x < y";
   458 by (etac real_mult_less_cancel1 1);
   451 by (etac real_mult_less_cancel1 1);
   459 by (asm_full_simp_tac (simpset() addsimps [real_mult_commute]) 1);
   452 by (asm_full_simp_tac (simpset() addsimps [real_mult_commute]) 1);
   460 qed "real_mult_less_cancel2";
   453 qed "real_mult_less_cancel2";
   461 
   454 
   462 Goal "(0::real) < z ==> (x*z < y*z) = (x < y)";
   455 Goal "(0::real) < z ==> (x*z < y*z) = (x < y)";
   463 by (blast_tac (claset() addIs [real_mult_less_mono1,
   456 by (blast_tac
   464     real_mult_less_cancel1]) 1);
   457     (claset() addIs [real_mult_less_mono1, real_mult_less_cancel1]) 1);
   465 qed "real_mult_less_iff1";
   458 qed "real_mult_less_iff1";
   466 
   459 
   467 Goal "(0::real) < z ==> (z*x < z*y) = (x < y)";
   460 Goal "(0::real) < z ==> (z*x < z*y) = (x < y)";
   468 by (blast_tac (claset() addIs [real_mult_less_mono2,
   461 by (blast_tac
   469     real_mult_less_cancel2]) 1);
   462     (claset() addIs [real_mult_less_mono2, real_mult_less_cancel2]) 1);
   470 qed "real_mult_less_iff2";
   463 qed "real_mult_less_iff2";
   471 
   464 
   472 Addsimps [real_mult_less_iff1,real_mult_less_iff2];
   465 Addsimps [real_mult_less_iff1,real_mult_less_iff2];
   473 
   466 
   474 (* 05/00 *)
   467 (* 05/00 *)
   482 
   475 
   483 Addsimps [real_mult_le_cancel_iff1,real_mult_le_cancel_iff2];
   476 Addsimps [real_mult_le_cancel_iff1,real_mult_le_cancel_iff2];
   484 
   477 
   485 
   478 
   486 Goal "[| (0::real) <= z; x < y |] ==> x*z <= y*z";
   479 Goal "[| (0::real) <= z; x < y |] ==> x*z <= y*z";
   487 by (EVERY1 [rtac real_less_or_eq_imp_le, dtac real_le_imp_less_or_eq]);
   480 by (EVERY1 [rtac real_less_or_eq_imp_le, dtac order_le_imp_less_or_eq]);
   488 by (auto_tac (claset() addIs [real_mult_less_mono1],simpset()));
   481 by (auto_tac (claset() addIs [real_mult_less_mono1],simpset()));
   489 qed "real_mult_le_less_mono1";
   482 qed "real_mult_le_less_mono1";
   490 
   483 
   491 Goal "[| (0::real) <= z; x < y |] ==> z*x <= z*y";
   484 Goal "[| (0::real) <= z; x < y |] ==> z*x <= z*y";
   492 by (asm_simp_tac (simpset() addsimps [real_mult_commute,real_mult_le_less_mono1]) 1);
   485 by (asm_simp_tac (simpset() addsimps [real_mult_commute,real_mult_le_less_mono1]) 1);
   493 qed "real_mult_le_less_mono2";
   486 qed "real_mult_le_less_mono2";
   494 
   487 
   495 Goal "[| (0::real) <= z; x <= y |] ==> z*x <= z*y";
   488 Goal "[| (0::real) <= z; x <= y |] ==> z*x <= z*y";
   496 by (dres_inst_tac [("x","x")] real_le_imp_less_or_eq 1);
   489 by (dres_inst_tac [("x","x")] order_le_imp_less_or_eq 1);
   497 by (auto_tac (claset() addIs [real_mult_le_less_mono2], simpset()));
   490 by (auto_tac (claset() addIs [real_mult_le_less_mono2], simpset()));
   498 qed "real_mult_le_le_mono1";
   491 qed "real_mult_le_le_mono1";
   499 
   492 
   500 Goal "[| (0::real) < r1; r1 < r2; 0 < x; x < y|] ==> r1 * x < r2 * y";
   493 Goal "[| u<v;  x<y;  (0::real) < v;  0 < x |] ==> u*x < v* y";
   501 by (dres_inst_tac [("x","x")] real_mult_less_mono2 1);
   494 by (etac (real_mult_less_mono1 RS order_less_trans) 1);
   502 by (dres_inst_tac [("R1.0","0")] real_less_trans 2);
   495 by (assume_tac 1);
   503 by (dres_inst_tac [("x","r1")] real_mult_less_mono1 3);
   496 by (etac real_mult_less_mono2 1);
   504 by Auto_tac;
   497 by (assume_tac 1);
   505 by (blast_tac (claset() addIs [real_less_trans]) 1);
       
   506 qed "real_mult_less_mono";
   498 qed "real_mult_less_mono";
   507 
   499 
   508 Goal "[| (0::real) < r1; r1  < r2;  0 < y|] ==> 0 < r2 * y";
   500 Goal "[| x < y;  r1 < r2;  (0::real) <= r1;  0 <= x|] ==> r1 * x < r2 * y";
   509 by (rtac real_mult_order 1); 
   501 by (subgoal_tac "0<r2" 1);
   510 by (assume_tac 2);
   502 by (blast_tac (claset() addIs [order_le_less_trans]) 2); 
   511 by (blast_tac (claset() addIs [real_less_trans]) 1);
   503 by (case_tac "x=0" 1);
   512 qed "real_mult_order_trans";
   504 by (auto_tac (claset() addSDs [order_le_imp_less_or_eq] 
   513 
   505 	               addIs [real_mult_less_mono, real_mult_order],
   514 Goal "[| (0::real) < r1; r1  < r2;  0 <= x; x < y|] ==> r1 * x < r2 * y";
       
   515 by (auto_tac (claset() addSDs [real_le_imp_less_or_eq] 
       
   516 	               addIs [real_mult_less_mono,real_mult_order_trans],
       
   517               simpset()));
       
   518 qed "real_mult_less_mono3";
       
   519 
       
   520 Goal "[| (0::real) <= r1; r1  < r2;  0 <= x; x < y|] ==> r1 * x < r2 * y";
       
   521 by (auto_tac (claset() addSDs [real_le_imp_less_or_eq] 
       
   522 	               addIs [real_mult_less_mono,real_mult_order_trans,
       
   523 			      real_mult_order],
       
   524 	      simpset()));
   506 	      simpset()));
   525 by (dres_inst_tac [("R2.0","x")] real_less_trans 1);
   507 qed "real_mult_less_mono'";
   526 by (assume_tac 1);
   508 
   527 by (blast_tac (claset() addIs [real_mult_order]) 1);
   509 Goal "[| r1 <= r2;  x <= y;  (0::real) < r1;  0 <= x |] ==> r1 * x <= r2 * y";
   528 qed "real_mult_less_mono4";
   510 by (subgoal_tac "0<r2" 1);
   529 
   511 by (blast_tac (claset() addIs [order_less_le_trans]) 2); 
   530 Goal "[| (0::real) < r1; r1 <= r2;  0 <= x; x <= y |] ==> r1 * x <= r2 * y";
       
   531 by (rtac real_less_or_eq_imp_le 1);
   512 by (rtac real_less_or_eq_imp_le 1);
   532 by (REPEAT(dtac real_le_imp_less_or_eq 1));
   513 by (REPEAT(dtac order_le_imp_less_or_eq 1));
   533 by (auto_tac (claset() addIs [real_mult_less_mono,
   514 by (auto_tac (claset() addIs [real_mult_less_mono, real_mult_order],
   534 			      real_mult_order_trans,real_mult_order],
       
   535 	      simpset()));
   515 	      simpset()));
   536 qed "real_mult_le_mono";
   516 qed "real_mult_le_mono";
   537 
   517 
   538 Goal "[| (0::real) < r1; r1 < r2;  0 <= x; x <= y |] ==> r1 * x <= r2 * y";
   518 Goal "[| (0::real) < r1; r1 < r2;  0 <= x; x <= y |] ==> r1 * x <= r2 * y";
   539 by (rtac real_less_or_eq_imp_le 1);
   519 by (blast_tac (claset() addIs [real_mult_le_mono, order_less_imp_le]) 1); 
   540 by (REPEAT(dtac real_le_imp_less_or_eq 1));
       
   541 by (auto_tac (claset() addIs [real_mult_less_mono, real_mult_order_trans,
       
   542 			      real_mult_order],
       
   543 	      simpset()));
       
   544 qed "real_mult_le_mono2";
   520 qed "real_mult_le_mono2";
   545 
   521 
   546 Goal "[| (0::real) <= r1; r1 < r2;  0 <= x; x <= y |] ==> r1 * x <= r2 * y";
   522 Goal "[| (0::real) <= r1; r1 < r2;  0 <= x; x <= y |] ==> r1 * x <= r2 * y";
   547 by (dtac real_le_imp_less_or_eq 1);
   523 by (dtac order_le_imp_less_or_eq 1);
   548 by (auto_tac (claset() addIs [real_mult_le_mono2],simpset()));
   524 by (auto_tac (claset() addIs [real_mult_le_mono2],simpset()));
   549 by (dtac real_le_trans 1 THEN assume_tac 1);
   525 by (dtac order_trans 1 THEN assume_tac 1);
   550 by (auto_tac (claset() addIs [real_less_le_mult_order], simpset()));
   526 by (auto_tac (claset() addIs [real_less_le_mult_order], simpset()));
   551 qed "real_mult_le_mono3";
   527 qed "real_mult_le_mono3";
   552 
   528 
   553 Goal "[| (0::real) <= r1; r1 <= r2;  0 <= x; x <= y |] ==> r1 * x <= r2 * y";
   529 Goal "[| (0::real) <= r1; r1 <= r2;  0 <= x; x <= y |] ==> r1 * x <= r2 * y";
   554 by (dres_inst_tac [("x","r1")] real_le_imp_less_or_eq 1);
   530 by (dres_inst_tac [("x","r1")] order_le_imp_less_or_eq 1);
   555 by (auto_tac (claset() addIs [real_mult_le_mono3, real_mult_le_le_mono1],
   531 by (auto_tac (claset() addIs [real_mult_le_mono3, real_mult_le_le_mono1],
   556 	      simpset()));
   532 	      simpset()));
   557 qed "real_mult_le_mono4";
   533 qed "real_mult_le_mono4";
   558 
   534 
   559 Goal "1r <= x ==> 0 < x";
   535 Goal "1r <= x ==> 0 < x";
   560 by (rtac ccontr 1 THEN dtac real_leI 1);
   536 by (rtac ccontr 1 THEN dtac real_leI 1);
   561 by (dtac real_le_trans 1 THEN assume_tac 1);
   537 by (dtac order_trans 1 THEN assume_tac 1);
   562 by (auto_tac (claset() addDs [real_zero_less_one RSN (2,real_le_less_trans)],
   538 by (auto_tac (claset() addDs [real_zero_less_one RSN (2,order_le_less_trans)],
   563 	      simpset() addsimps [real_less_not_refl]));
   539 	      simpset()));
   564 qed "real_gt_zero";
   540 qed "real_gt_zero";
   565 
   541 
   566 Goal "[| 1r < r; 1r <= x |]  ==> x <= r * x";
   542 Goal "[| 1r < r; 1r <= x |]  ==> x <= r * x";
   567 by (dtac (real_gt_zero RS real_less_imp_le) 1);
   543 by (dtac (real_gt_zero RS order_less_imp_le) 1);
   568 by (auto_tac (claset() addSDs [real_mult_le_less_mono1],
   544 by (auto_tac (claset() addSDs [real_mult_le_less_mono1],
   569     simpset()));
   545     simpset()));
   570 qed "real_mult_self_le";
   546 qed "real_mult_self_le";
   571 
   547 
   572 Goal "[| 1r <= r; 1r <= x |]  ==> x <= r * x";
   548 Goal "[| 1r <= r; 1r <= x |]  ==> x <= r * x";
   573 by (dtac real_le_imp_less_or_eq 1);
   549 by (dtac order_le_imp_less_or_eq 1);
   574 by (auto_tac (claset() addIs [real_mult_self_le],
   550 by (auto_tac (claset() addIs [real_mult_self_le], simpset()));
   575 	      simpset() addsimps [real_le_refl]));
       
   576 qed "real_mult_self_le2";
   551 qed "real_mult_self_le2";
   577 
   552 
   578 Goal "(EX n. inverse (real_of_posnat n) < r) = (EX n. 1r < r * real_of_posnat n)";
   553 Goal "(EX n. inverse (real_of_posnat n) < r) = (EX n. 1r < r * real_of_posnat n)";
   579 by (Step_tac 1);
   554 by (Step_tac 1);
   580 by (dres_inst_tac [("n1","n")] (real_of_posnat_gt_zero 
   555 by (dres_inst_tac [("n1","n")] (real_of_posnat_gt_zero 
   597 qed "real_of_posnat_inverse_iff";
   572 qed "real_of_posnat_inverse_iff";
   598 
   573 
   599 Goal "(inverse (real_of_posnat n) <= r) = (1r <= r * real_of_posnat n)";
   574 Goal "(inverse (real_of_posnat n) <= r) = (1r <= r * real_of_posnat n)";
   600 by (Step_tac 1);
   575 by (Step_tac 1);
   601 by (dres_inst_tac [("n2","n")] (real_of_posnat_gt_zero RS 
   576 by (dres_inst_tac [("n2","n")] (real_of_posnat_gt_zero RS 
   602     real_less_imp_le RS real_mult_le_le_mono1) 1);
   577     order_less_imp_le RS real_mult_le_le_mono1) 1);
   603 by (dres_inst_tac [("n3","n")] (real_of_posnat_gt_zero RS 
   578 by (dres_inst_tac [("n3","n")] (real_of_posnat_gt_zero RS 
   604         real_inverse_gt_zero RS real_less_imp_le RS 
   579         real_inverse_gt_zero RS order_less_imp_le RS 
   605         real_mult_le_le_mono1) 2);
   580         real_mult_le_le_mono1) 2);
   606 by (auto_tac (claset(), simpset() addsimps real_mult_ac));
   581 by (auto_tac (claset(), simpset() addsimps real_mult_ac));
   607 qed "real_of_posnat_inverse_le_iff";
   582 qed "real_of_posnat_inverse_le_iff";
   608 
   583 
   609 Goalw [real_of_posnat_def] "(real_of_posnat n < real_of_posnat m) = (n < m)";
   584 Goalw [real_of_posnat_def] "(real_of_posnat n < real_of_posnat m) = (n < m)";
   634 	      simpset() addsimps [real_inverse_inverse, real_of_posnat_gt_zero, 
   609 	      simpset() addsimps [real_inverse_inverse, real_of_posnat_gt_zero, 
   635 				  real_not_refl2 RS not_sym]));
   610 				  real_not_refl2 RS not_sym]));
   636 qed "real_of_posnat_inverse_eq_iff";
   611 qed "real_of_posnat_inverse_eq_iff";
   637 
   612 
   638 Goal "[| 0 < r; r < x |] ==> inverse x < inverse (r::real)";
   613 Goal "[| 0 < r; r < x |] ==> inverse x < inverse (r::real)";
   639 by (ftac real_less_trans 1 THEN assume_tac 1);
   614 by (ftac order_less_trans 1 THEN assume_tac 1);
   640 by (ftac real_inverse_gt_zero 1);
   615 by (ftac real_inverse_gt_zero 1);
   641 by (forw_inst_tac [("x","x")] real_inverse_gt_zero 1);
   616 by (forw_inst_tac [("x","x")] real_inverse_gt_zero 1);
   642 by (forw_inst_tac [("x","r"),("z","inverse r")] real_mult_less_mono1 1);
   617 by (forw_inst_tac [("x","r"),("z","inverse r")] real_mult_less_mono1 1);
   643 by (assume_tac 1);
   618 by (assume_tac 1);
   644 by (asm_full_simp_tac (simpset() addsimps [real_not_refl2 RS 
   619 by (asm_full_simp_tac (simpset() addsimps [real_not_refl2 RS 
   655 by (full_simp_tac (simpset() addsimps [real_add_assoc RS sym]) 1);
   630 by (full_simp_tac (simpset() addsimps [real_add_assoc RS sym]) 1);
   656 qed "real_add_inverse_real_of_posnat_less";
   631 qed "real_add_inverse_real_of_posnat_less";
   657 Addsimps [real_add_inverse_real_of_posnat_less];
   632 Addsimps [real_add_inverse_real_of_posnat_less];
   658 
   633 
   659 Goal "r <= r + inverse (real_of_posnat n)";
   634 Goal "r <= r + inverse (real_of_posnat n)";
   660 by (rtac real_less_imp_le 1);
   635 by (rtac order_less_imp_le 1);
   661 by (Simp_tac 1);
   636 by (Simp_tac 1);
   662 qed "real_add_inverse_real_of_posnat_le";
   637 qed "real_add_inverse_real_of_posnat_le";
   663 Addsimps [real_add_inverse_real_of_posnat_le];
   638 Addsimps [real_add_inverse_real_of_posnat_le];
   664 
   639 
   665 Goal "r + (-inverse (real_of_posnat n)) < r";
   640 Goal "r + (-inverse (real_of_posnat n)) < r";
   668 				       real_minus_zero_less_iff2]) 1);
   643 				       real_minus_zero_less_iff2]) 1);
   669 qed "real_add_minus_inverse_real_of_posnat_less";
   644 qed "real_add_minus_inverse_real_of_posnat_less";
   670 Addsimps [real_add_minus_inverse_real_of_posnat_less];
   645 Addsimps [real_add_minus_inverse_real_of_posnat_less];
   671 
   646 
   672 Goal "r + (-inverse (real_of_posnat n)) <= r";
   647 Goal "r + (-inverse (real_of_posnat n)) <= r";
   673 by (rtac real_less_imp_le 1);
   648 by (rtac order_less_imp_le 1);
   674 by (Simp_tac 1);
   649 by (Simp_tac 1);
   675 qed "real_add_minus_inverse_real_of_posnat_le";
   650 qed "real_add_minus_inverse_real_of_posnat_le";
   676 Addsimps [real_add_minus_inverse_real_of_posnat_le];
   651 Addsimps [real_add_minus_inverse_real_of_posnat_le];
   677 
   652 
   678 Goal "0 < r ==> r*(1r + (-inverse (real_of_posnat n))) < r";
   653 Goal "0 < r ==> r*(1r + (-inverse (real_of_posnat n))) < r";