src/HOL/Real/Real.ML
changeset 7292 dff3470c5c62
parent 7219 4e3f386c2e37
child 7322 d16d7ddcc842
equal deleted inserted replaced
7291:8aa66ddc0bea 7292:dff3470c5c62
   278     pnat_two_eq,real_add,prat_of_pnat_add RS sym,preal_of_prat_add RS sym
   278     pnat_two_eq,real_add,prat_of_pnat_add RS sym,preal_of_prat_add RS sym
   279     ] @ pnat_add_ac) 1);
   279     ] @ pnat_add_ac) 1);
   280 qed "real_of_posnat_two";
   280 qed "real_of_posnat_two";
   281 
   281 
   282 Goalw [real_of_posnat_def]
   282 Goalw [real_of_posnat_def]
   283           "real_of_posnat n1 + real_of_posnat n2 = real_of_posnat (n1 + n2) + 1r";
   283     "real_of_posnat n1 + real_of_posnat n2 = real_of_posnat (n1 + n2) + 1r";
   284 by (full_simp_tac (simpset() addsimps [real_of_posnat_one RS sym,
   284 by (full_simp_tac (simpset() addsimps [real_of_posnat_one RS sym,
   285     real_of_posnat_def,real_of_preal_add RS sym,preal_of_prat_add RS sym,
   285     real_of_posnat_def,real_of_preal_add RS sym,preal_of_prat_add RS sym,
   286     prat_of_pnat_add RS sym,pnat_of_nat_add]) 1);
   286     prat_of_pnat_add RS sym,pnat_of_nat_add]) 1);
   287 qed "real_of_posnat_add";
   287 qed "real_of_posnat_add";
   288 
   288 
   290 by (res_inst_tac [("x1","1r")] (real_add_right_cancel RS iffD1) 1);
   290 by (res_inst_tac [("x1","1r")] (real_add_right_cancel RS iffD1) 1);
   291 by (rtac (real_of_posnat_add RS subst) 1);
   291 by (rtac (real_of_posnat_add RS subst) 1);
   292 by (full_simp_tac (simpset() addsimps [real_of_posnat_two,real_add_assoc]) 1);
   292 by (full_simp_tac (simpset() addsimps [real_of_posnat_two,real_add_assoc]) 1);
   293 qed "real_of_posnat_add_one";
   293 qed "real_of_posnat_add_one";
   294 
   294 
   295 Goal "Suc n = n + 1";
       
   296 by Auto_tac;
       
   297 qed "lemmaS";
       
   298 
       
   299 Goal "real_of_posnat (Suc n) = real_of_posnat n + 1r";
   295 Goal "real_of_posnat (Suc n) = real_of_posnat n + 1r";
   300 by (stac lemmaS 1);
   296 by (stac (real_of_posnat_add_one RS sym) 1);
   301 by (rtac real_of_posnat_add_one 1);
   297 by (Simp_tac 1);
   302 qed "real_of_posnat_Suc";
   298 qed "real_of_posnat_Suc";
   303 
   299 
   304 Goal "inj(real_of_posnat)";
   300 Goal "inj(real_of_posnat)";
   305 by (rtac injI 1);
   301 by (rtac injI 1);
   306 by (rewtac real_of_posnat_def);
   302 by (rewtac real_of_posnat_def);
   367 Goal "0r < rinv(real_of_posnat n)";
   363 Goal "0r < rinv(real_of_posnat n)";
   368 by (rtac (real_of_posnat_less_zero RS real_rinv_gt_zero) 1);
   364 by (rtac (real_of_posnat_less_zero RS real_rinv_gt_zero) 1);
   369 qed "real_of_posnat_rinv_gt_zero";
   365 qed "real_of_posnat_rinv_gt_zero";
   370 Addsimps [real_of_posnat_rinv_gt_zero];
   366 Addsimps [real_of_posnat_rinv_gt_zero];
   371 
   367 
   372 Goal "x+x=x*(1r+1r)";
   368 Goal "x+x = x*(1r+1r)";
   373 by (simp_tac (simpset() addsimps 
   369 by (simp_tac (simpset() addsimps 
   374               [real_add_mult_distrib2]) 1);
   370               [real_add_mult_distrib2]) 1);
   375 qed "real_add_self";
   371 qed "real_add_self";
   376 
   372 
   377 Goal "x < x + 1r";
   373 Goal "x < x + 1r";
   450 Goal "[| 0r<=z; x<=y |] ==> z*x<=z*y";
   446 Goal "[| 0r<=z; x<=y |] ==> z*x<=z*y";
   451 by (dres_inst_tac [("x","x")] real_le_imp_less_or_eq 1);
   447 by (dres_inst_tac [("x","x")] real_le_imp_less_or_eq 1);
   452 by (auto_tac (claset() addIs [real_mult_le_less_mono2], simpset()));
   448 by (auto_tac (claset() addIs [real_mult_le_less_mono2], simpset()));
   453 qed "real_mult_le_le_mono1";
   449 qed "real_mult_le_le_mono1";
   454 
   450 
   455 Goal "[| 0r < r1; r1 <r2; 0r < x; x < y|] \
   451 Goal "[| 0r < r1; r1 <r2; 0r < x; x < y|] ==> r1 * x < r2 * y";
   456 \                  ==> r1 * x < r2 * y";
       
   457 by (dres_inst_tac [("x","x")] real_mult_less_mono2 1);
   452 by (dres_inst_tac [("x","x")] real_mult_less_mono2 1);
   458 by (dres_inst_tac [("R1.0","0r")] real_less_trans 2);
   453 by (dres_inst_tac [("R1.0","0r")] real_less_trans 2);
   459 by (dres_inst_tac [("x","r1")] real_mult_less_mono1 3);
   454 by (dres_inst_tac [("x","r1")] real_mult_less_mono1 3);
   460 by Auto_tac;
   455 by Auto_tac;
   461 by (blast_tac (claset() addIs [real_less_trans]) 1);
   456 by (blast_tac (claset() addIs [real_less_trans]) 1);
   462 qed "real_mult_less_mono";
   457 qed "real_mult_less_mono";
   463 
   458 
   464 Goal "[| 0r < r1; r1 <r2; 0r < y|] \
   459 Goal "[| 0r < r1; r1 <r2; 0r < y|] ==> 0r < r2 * y";
   465 \                           ==> 0r < r2 * y";
       
   466 by (dres_inst_tac [("R1.0","0r")] real_less_trans 1);
   460 by (dres_inst_tac [("R1.0","0r")] real_less_trans 1);
   467 by (assume_tac 1);
   461 by (assume_tac 1);
   468 by (blast_tac (claset() addIs [real_mult_order]) 1);
   462 by (blast_tac (claset() addIs [real_mult_order]) 1);
   469 qed "real_mult_order_trans";
   463 qed "real_mult_order_trans";
   470 
   464 
   471 Goal "[| 0r < r1; r1 <r2; 0r <= x; x < y|] \
   465 Goal "[| 0r < r1; r1 <r2; 0r <= x; x < y|] ==> r1 * x < r2 * y";
   472 \                  ==> r1 * x < r2 * y";
       
   473 by (auto_tac (claset() addSDs [real_le_imp_less_or_eq] 
   466 by (auto_tac (claset() addSDs [real_le_imp_less_or_eq] 
   474 	               addIs [real_mult_less_mono,real_mult_order_trans],
   467 	               addIs [real_mult_less_mono,real_mult_order_trans],
   475               simpset()));
   468               simpset()));
   476 qed "real_mult_less_mono3";
   469 qed "real_mult_less_mono3";
   477 
   470 
   478 Goal "[| 0r <= r1; r1 <r2; 0r <= x; x < y|] \
   471 Goal "[| 0r <= r1; r1 <r2; 0r <= x; x < y|] ==> r1 * x < r2 * y";
   479 \                  ==> r1 * x < r2 * y";
       
   480 by (auto_tac (claset() addSDs [real_le_imp_less_or_eq] 
   472 by (auto_tac (claset() addSDs [real_le_imp_less_or_eq] 
   481 	               addIs [real_mult_less_mono,real_mult_order_trans,
   473 	               addIs [real_mult_less_mono,real_mult_order_trans,
   482 			      real_mult_order],
   474 			      real_mult_order],
   483 	      simpset()));
   475 	      simpset()));
   484 by (dres_inst_tac [("R2.0","x")] real_less_trans 1);
   476 by (dres_inst_tac [("R2.0","x")] real_less_trans 1);
   485 by (assume_tac 1);
   477 by (assume_tac 1);
   486 by (blast_tac (claset() addIs [real_mult_order]) 1);
   478 by (blast_tac (claset() addIs [real_mult_order]) 1);
   487 qed "real_mult_less_mono4";
   479 qed "real_mult_less_mono4";
   488 
   480 
   489 Goal "[| 0r < r1; r1 <= r2; 0r <= x; x <= y |] \
   481 Goal "[| 0r < r1; r1 <= r2; 0r <= x; x <= y |] ==> r1 * x <= r2 * y";
   490 \                  ==> r1 * x <= r2 * y";
       
   491 by (rtac real_less_or_eq_imp_le 1);
   482 by (rtac real_less_or_eq_imp_le 1);
   492 by (REPEAT(dtac real_le_imp_less_or_eq 1));
   483 by (REPEAT(dtac real_le_imp_less_or_eq 1));
   493 by (auto_tac (claset() addIs [real_mult_less_mono,
   484 by (auto_tac (claset() addIs [real_mult_less_mono,
   494 			      real_mult_order_trans,real_mult_order],
   485 			      real_mult_order_trans,real_mult_order],
   495 	      simpset()));
   486 	      simpset()));
   496 qed "real_mult_le_mono";
   487 qed "real_mult_le_mono";
   497 
   488 
   498 Goal "[| 0r < r1; r1 < r2; 0r <= x; x <= y |] \
   489 Goal "[| 0r < r1; r1 < r2; 0r <= x; x <= y |] ==> r1 * x <= r2 * y";
   499 \                  ==> r1 * x <= r2 * y";
       
   500 by (rtac real_less_or_eq_imp_le 1);
   490 by (rtac real_less_or_eq_imp_le 1);
   501 by (REPEAT(dtac real_le_imp_less_or_eq 1));
   491 by (REPEAT(dtac real_le_imp_less_or_eq 1));
   502 by (auto_tac (claset() addIs [real_mult_less_mono, real_mult_order_trans,
   492 by (auto_tac (claset() addIs [real_mult_less_mono, real_mult_order_trans,
   503 			      real_mult_order],
   493 			      real_mult_order],
   504 	      simpset()));
   494 	      simpset()));
   505 qed "real_mult_le_mono2";
   495 qed "real_mult_le_mono2";
   506 
   496 
   507 Goal "[| 0r <= r1; r1 < r2; 0r <= x; x <= y |] \
   497 Goal "[| 0r <= r1; r1 < r2; 0r <= x; x <= y |] ==> r1 * x <= r2 * y";
   508 \                  ==> r1 * x <= r2 * y";
       
   509 by (dtac real_le_imp_less_or_eq 1);
   498 by (dtac real_le_imp_less_or_eq 1);
   510 by (auto_tac (claset() addIs [real_mult_le_mono2],simpset()));
   499 by (auto_tac (claset() addIs [real_mult_le_mono2],simpset()));
   511 by (dtac real_le_trans 1 THEN assume_tac 1);
   500 by (dtac real_le_trans 1 THEN assume_tac 1);
   512 by (auto_tac (claset() addIs [real_less_le_mult_order], simpset()));
   501 by (auto_tac (claset() addIs [real_less_le_mult_order], simpset()));
   513 qed "real_mult_le_mono3";
   502 qed "real_mult_le_mono3";
   514 
   503 
   515 Goal "[| 0r <= r1; r1 <= r2; 0r <= x; x <= y |] \
   504 Goal "[| 0r <= r1; r1 <= r2; 0r <= x; x <= y |] ==> r1 * x <= r2 * y";
   516 \                  ==> r1 * x <= r2 * y";
       
   517 by (dres_inst_tac [("x","r1")] real_le_imp_less_or_eq 1);
   505 by (dres_inst_tac [("x","r1")] real_le_imp_less_or_eq 1);
   518 by (auto_tac (claset() addIs [real_mult_le_mono3, real_mult_le_le_mono1],
   506 by (auto_tac (claset() addIs [real_mult_le_mono3, real_mult_le_le_mono1],
   519 	      simpset()));
   507 	      simpset()));
   520 qed "real_mult_le_mono4";
   508 qed "real_mult_le_mono4";
   521 
   509