src/HOL/Real/RealDef.ML
changeset 7077 60b098bb8b8a
parent 5588 a3ab526bb891
child 7127 48e235179ffb
equal deleted inserted replaced
7076:a30e024791c6 7077:60b098bb8b8a
    78 Goal "inj(Rep_real)";
    78 Goal "inj(Rep_real)";
    79 by (rtac inj_inverseI 1);
    79 by (rtac inj_inverseI 1);
    80 by (rtac Rep_real_inverse 1);
    80 by (rtac Rep_real_inverse 1);
    81 qed "inj_Rep_real";
    81 qed "inj_Rep_real";
    82 
    82 
    83 (** real_preal: the injection from preal to real **)
    83 (** real_of_preal: the injection from preal to real **)
    84 Goal "inj(real_preal)";
    84 Goal "inj(real_of_preal)";
    85 by (rtac injI 1);
    85 by (rtac injI 1);
    86 by (rewtac real_preal_def);
    86 by (rewtac real_of_preal_def);
    87 by (dtac (inj_on_Abs_real RS inj_onD) 1);
    87 by (dtac (inj_on_Abs_real RS inj_onD) 1);
    88 by (REPEAT (rtac realrel_in_real 1));
    88 by (REPEAT (rtac realrel_in_real 1));
    89 by (dtac eq_equiv_class 1);
    89 by (dtac eq_equiv_class 1);
    90 by (rtac equiv_realrel 1);
    90 by (rtac equiv_realrel 1);
    91 by (Blast_tac 1);
    91 by (Blast_tac 1);
    92 by Safe_tac;
    92 by Safe_tac;
    93 by (Asm_full_simp_tac 1);
    93 by (Asm_full_simp_tac 1);
    94 qed "inj_real_preal";
    94 qed "inj_real_of_preal";
    95 
    95 
    96 val [prem] = goal thy
    96 val [prem] = goal thy
    97     "(!!x y. z = Abs_real(realrel^^{(x,y)}) ==> P) ==> P";
    97     "(!!x y. z = Abs_real(realrel^^{(x,y)}) ==> P) ==> P";
    98 by (res_inst_tac [("x1","z")] 
    98 by (res_inst_tac [("x1","z")] 
    99     (rewrite_rule [real_def] Rep_real RS quotientE) 1);
    99     (rewrite_rule [real_def] Rep_real RS quotientE) 1);
   193 qed "real_add_left_commute";
   193 qed "real_add_left_commute";
   194 
   194 
   195 (* real addition is an AC operator *)
   195 (* real addition is an AC operator *)
   196 val real_add_ac = [real_add_assoc,real_add_commute,real_add_left_commute];
   196 val real_add_ac = [real_add_assoc,real_add_commute,real_add_left_commute];
   197 
   197 
   198 Goalw [real_preal_def,real_zero_def] "0r + z = z";
   198 Goalw [real_of_preal_def,real_zero_def] "0r + z = z";
   199 by (res_inst_tac [("z","z")] eq_Abs_real 1);
   199 by (res_inst_tac [("z","z")] eq_Abs_real 1);
   200 by (asm_full_simp_tac (simpset() addsimps [real_add] @ preal_add_ac) 1);
   200 by (asm_full_simp_tac (simpset() addsimps [real_add] @ preal_add_ac) 1);
   201 qed "real_add_zero_left";
   201 qed "real_add_zero_left";
   202 Addsimps [real_add_zero_left];
   202 Addsimps [real_add_zero_left];
   203 
   203 
   251 by (cut_inst_tac [("z","y")] real_add_minus_left 1);
   251 by (cut_inst_tac [("z","y")] real_add_minus_left 1);
   252 by (res_inst_tac [("x1","y")] (real_minus_left_ex1 RS ex1E) 1);
   252 by (res_inst_tac [("x1","y")] (real_minus_left_ex1 RS ex1E) 1);
   253 by (Blast_tac 1);
   253 by (Blast_tac 1);
   254 qed "real_add_minus_eq_minus";
   254 qed "real_add_minus_eq_minus";
   255 
   255 
       
   256 Goal "? (y::real). x = -y";
       
   257 by (cut_inst_tac [("x","x")] real_minus_ex 1);
       
   258 by (etac exE 1 THEN dtac real_add_minus_eq_minus 1);
       
   259 by (Fast_tac 1);
       
   260 qed "real_as_add_inverse_ex";
       
   261 
   256 Goal "-(x + y) = -x + -(y::real)";
   262 Goal "-(x + y) = -x + -(y::real)";
   257 by (res_inst_tac [("z","x")] eq_Abs_real 1);
   263 by (res_inst_tac [("z","x")] eq_Abs_real 1);
   258 by (res_inst_tac [("z","y")] eq_Abs_real 1);
   264 by (res_inst_tac [("z","y")] eq_Abs_real 1);
   259 by (auto_tac (claset(),simpset() addsimps [real_minus,real_add]));
   265 by (auto_tac (claset(),simpset() addsimps [real_minus,real_add]));
   260 qed "real_minus_add_distrib";
   266 qed "real_minus_add_distrib";
   268 qed "real_add_left_cancel";
   274 qed "real_add_left_cancel";
   269 
   275 
   270 Goal "(y + (x::real)= z + x) = (y = z)";
   276 Goal "(y + (x::real)= z + x) = (y = z)";
   271 by (simp_tac (simpset() addsimps [real_add_commute,real_add_left_cancel]) 1);
   277 by (simp_tac (simpset() addsimps [real_add_commute,real_add_left_cancel]) 1);
   272 qed "real_add_right_cancel";
   278 qed "real_add_right_cancel";
       
   279 
       
   280 Goal "((x::real) = y) = (0r = x + - y)";
       
   281 by (Step_tac 1);
       
   282 by (res_inst_tac [("x1","-y")] 
       
   283       (real_add_right_cancel RS iffD1) 2);
       
   284 by (Auto_tac);
       
   285 qed "real_eq_minus_iff"; 
       
   286 
       
   287 Goal "((x::real) = y) = (x + - y = 0r)";
       
   288 by (Step_tac 1);
       
   289 by (res_inst_tac [("x1","-y")] 
       
   290       (real_add_right_cancel RS iffD1) 2);
       
   291 by (Auto_tac);
       
   292 qed "real_eq_minus_iff2"; 
   273 
   293 
   274 Goal "0r - x = -x";
   294 Goal "0r - x = -x";
   275 by (simp_tac (simpset() addsimps [real_diff_def]) 1);
   295 by (simp_tac (simpset() addsimps [real_diff_def]) 1);
   276 qed "real_diff_0";
   296 qed "real_diff_0";
   277 
   297 
   456           "!!(x::real). x ~= 0r ==> ? y. x*y = 1r";
   476           "!!(x::real). x ~= 0r ==> ? y. x*y = 1r";
   457 by (res_inst_tac [("z","x")] eq_Abs_real 1);
   477 by (res_inst_tac [("z","x")] eq_Abs_real 1);
   458 by (cut_inst_tac [("r1.0","xa"),("r2.0","y")] preal_linear 1);
   478 by (cut_inst_tac [("r1.0","xa"),("r2.0","y")] preal_linear 1);
   459 by (auto_tac (claset() addSDs [preal_less_add_left_Ex],
   479 by (auto_tac (claset() addSDs [preal_less_add_left_Ex],
   460            simpset() addsimps [real_zero_iff RS sym]));
   480            simpset() addsimps [real_zero_iff RS sym]));
   461 by (res_inst_tac [("x","Abs_real (realrel ^^ {(@#$#1p,pinv(D)+@#$#1p)})")] exI 1);
   481 by (res_inst_tac [("x","Abs_real (realrel ^^ \
   462 by (res_inst_tac [("x","Abs_real (realrel ^^ {(pinv(D)+@#$#1p,@#$#1p)})")] exI 2);
   482 \   {(preal_of_prat(prat_of_pnat 1p),pinv(D)+\
       
   483 \    preal_of_prat(prat_of_pnat 1p))})")] exI 1);
       
   484 by (res_inst_tac [("x","Abs_real (realrel ^^ \
       
   485 \   {(pinv(D)+preal_of_prat(prat_of_pnat 1p),\
       
   486 \    preal_of_prat(prat_of_pnat 1p))})")] exI 2);
   463 by (auto_tac (claset(),
   487 by (auto_tac (claset(),
   464 	      simpset() addsimps [real_mult,
   488 	      simpset() addsimps [real_mult,
   465     pnat_one_def,preal_mult_1_right,preal_add_mult_distrib2,
   489     pnat_one_def,preal_mult_1_right,preal_add_mult_distrib2,
   466     preal_add_mult_distrib,preal_mult_1,preal_mult_inv_right] 
   490     preal_add_mult_distrib,preal_mult_1,preal_mult_inv_right] 
   467     @ preal_add_ac @ preal_mult_ac));
   491     @ preal_add_ac @ preal_mult_ac));
   494 by (Step_tac 1);
   518 by (Step_tac 1);
   495 by (dres_inst_tac [("f","%x. x*rinv c")] arg_cong 1);
   519 by (dres_inst_tac [("f","%x. x*rinv c")] arg_cong 1);
   496 by (asm_full_simp_tac (simpset() addsimps [real_mult_inv_right] @ real_mult_ac)  1);
   520 by (asm_full_simp_tac (simpset() addsimps [real_mult_inv_right] @ real_mult_ac)  1);
   497 qed "real_mult_right_cancel";
   521 qed "real_mult_right_cancel";
   498 
   522 
       
   523 Goal "!!a. c*a ~= c*b ==> a ~= b";
       
   524 by (Auto_tac);
       
   525 qed "real_mult_left_cancel_ccontr";
       
   526 
       
   527 Goal "!!a. a*c ~= b*c ==> a ~= b";
       
   528 by (Auto_tac);
       
   529 qed "real_mult_right_cancel_ccontr";
       
   530 
   499 Goalw [rinv_def] "x ~= 0r ==> rinv(x) ~= 0r";
   531 Goalw [rinv_def] "x ~= 0r ==> rinv(x) ~= 0r";
   500 by (forward_tac [real_mult_inv_left_ex] 1);
   532 by (forward_tac [real_mult_inv_left_ex] 1);
   501 by (etac exE 1);
   533 by (etac exE 1);
   502 by (rtac selectI2 1);
   534 by (rtac selectI2 1);
   503 by (auto_tac (claset(),
   535 by (auto_tac (claset(),
   504 	      simpset() addsimps [real_mult_0,
   536 	      simpset() addsimps [real_mult_0,
   505     real_zero_not_eq_one]));
   537     real_zero_not_eq_one]));
   506 qed "rinv_not_zero";
   538 qed "rinv_not_zero";
   507 
   539 
   508 Addsimps [real_mult_inv_left,real_mult_inv_right];
   540 Addsimps [real_mult_inv_left,real_mult_inv_right];
       
   541 
       
   542 Goal "!!x. [| x ~= 0r; y ~= 0r |] ==> x * y ~= 0r";
       
   543 by (Step_tac 1);
       
   544 by (dres_inst_tac [("f","%z. rinv x*z")] arg_cong 1);
       
   545 by (asm_full_simp_tac (simpset() addsimps [real_mult_assoc RS sym]) 1);
       
   546 qed "real_mult_not_zero";
       
   547 
       
   548 bind_thm ("real_mult_not_zeroE",real_mult_not_zero RS notE);
   509 
   549 
   510 Goal "x ~= 0r ==> rinv(rinv x) = x";
   550 Goal "x ~= 0r ==> rinv(rinv x) = x";
   511 by (res_inst_tac [("c1","rinv x")] (real_mult_right_cancel RS iffD1) 1);
   551 by (res_inst_tac [("c1","rinv x")] (real_mult_right_cancel RS iffD1) 1);
   512 by (etac rinv_not_zero 1);
   552 by (etac rinv_not_zero 1);
   513 by (auto_tac (claset() addDs [rinv_not_zero],simpset()));
   553 by (auto_tac (claset() addDs [rinv_not_zero],simpset()));
   520 by (rtac selectI2 1);
   560 by (rtac selectI2 1);
   521 by (auto_tac (claset(),
   561 by (auto_tac (claset(),
   522 	      simpset() addsimps 
   562 	      simpset() addsimps 
   523     [real_zero_not_eq_one RS not_sym]));
   563     [real_zero_not_eq_one RS not_sym]));
   524 qed "real_rinv_1";
   564 qed "real_rinv_1";
       
   565 Addsimps [real_rinv_1];
   525 
   566 
   526 Goal "x ~= 0r ==> rinv(-x) = -rinv(x)";
   567 Goal "x ~= 0r ==> rinv(-x) = -rinv(x)";
   527 by (res_inst_tac [("c1","-x")] (real_mult_right_cancel RS iffD1) 1);
   568 by (res_inst_tac [("c1","-x")] (real_mult_right_cancel RS iffD1) 1);
   528 by Auto_tac;
   569 by Auto_tac;
   529 qed "real_minus_rinv";
   570 qed "real_minus_rinv";
   530 
   571 
   531       (*** theorems for ordering ***)
   572 Goal "!!x y. [| x ~= 0r; y ~= 0r |] \
       
   573 \                     ==> rinv(x*y) = rinv(x)*rinv(y)";
       
   574 by (forw_inst_tac [("y","y")] real_mult_not_zero 1 THEN assume_tac 1);
       
   575 by (res_inst_tac [("c1","x")] (real_mult_left_cancel RS iffD1) 1);
       
   576 by (auto_tac (claset(),simpset() addsimps [real_mult_assoc RS sym]));
       
   577 by (res_inst_tac [("c1","y")] (real_mult_left_cancel RS iffD1) 1);
       
   578 by (auto_tac (claset(),simpset() addsimps [real_mult_left_commute]));
       
   579 by (asm_simp_tac (simpset() addsimps [real_mult_assoc RS sym]) 1);
       
   580 qed "real_rinv_distrib";
       
   581 
       
   582 (*---------------------------------------------------------
       
   583      Theorems for ordering
       
   584  --------------------------------------------------------*)
   532 (* prove introduction and elimination rules for real_less *)
   585 (* prove introduction and elimination rules for real_less *)
   533 
   586 
   534 (* real_less is a strong order i.e nonreflexive and transitive *)
   587 (* real_less is a strong order i.e. nonreflexive and transitive *)
       
   588 
   535 (*** lemmas ***)
   589 (*** lemmas ***)
   536 Goal "!!(x::preal). [| x = y; x1 = y1 |] ==> x + y1 = x1 + y";
   590 Goal "!!(x::preal). [| x = y; x1 = y1 |] ==> x + y1 = x1 + y";
   537 by (asm_simp_tac (simpset() addsimps [preal_add_commute]) 1);
   591 by (asm_simp_tac (simpset() addsimps [preal_add_commute]) 1);
   538 qed "preal_lemma_eq_rev_sum";
   592 qed "preal_lemma_eq_rev_sum";
   539 
   593 
   597 qed "real_less_asym";
   651 qed "real_less_asym";
   598 
   652 
   599 (****)(****)(****)(****)(****)(****)(****)(****)(****)(****)
   653 (****)(****)(****)(****)(****)(****)(****)(****)(****)(****)
   600     (****** Map and more real_less ******)
   654     (****** Map and more real_less ******)
   601 (*** mapping from preal into real ***)
   655 (*** mapping from preal into real ***)
   602 Goalw [real_preal_def] 
   656 Goalw [real_of_preal_def] 
   603             "%#((z1::preal) + z2) = %#z1 + %#z2";
   657      "real_of_preal ((z1::preal) + z2) = \
       
   658 \     real_of_preal z1 + real_of_preal z2";
   604 by (asm_simp_tac (simpset() addsimps [real_add,
   659 by (asm_simp_tac (simpset() addsimps [real_add,
   605        preal_add_mult_distrib,preal_mult_1] addsimps preal_add_ac) 1);
   660        preal_add_mult_distrib,preal_mult_1] addsimps preal_add_ac) 1);
   606 qed "real_preal_add";
   661 qed "real_of_preal_add";
   607 
   662 
   608 Goalw [real_preal_def] 
   663 Goalw [real_of_preal_def] 
   609             "%#((z1::preal) * z2) = %#z1* %#z2";
   664      "real_of_preal ((z1::preal) * z2) = \
       
   665 \     real_of_preal z1* real_of_preal z2";
   610 by (full_simp_tac (simpset() addsimps [real_mult,
   666 by (full_simp_tac (simpset() addsimps [real_mult,
   611         preal_add_mult_distrib2,preal_mult_1,
   667         preal_add_mult_distrib2,preal_mult_1,
   612         preal_mult_1_right,pnat_one_def] 
   668         preal_mult_1_right,pnat_one_def] 
   613         @ preal_add_ac @ preal_mult_ac) 1);
   669         @ preal_add_ac @ preal_mult_ac) 1);
   614 qed "real_preal_mult";
   670 qed "real_of_preal_mult";
   615 
   671 
   616 Goalw [real_preal_def]
   672 Goalw [real_of_preal_def]
   617       "!!(x::preal). y < x ==> ? m. Abs_real (realrel ^^ {(x,y)}) = %#m";
   673       "!!(x::preal). y < x ==> \
       
   674 \      ? m. Abs_real (realrel ^^ {(x,y)}) = real_of_preal m";
   618 by (auto_tac (claset() addSDs [preal_less_add_left_Ex],
   675 by (auto_tac (claset() addSDs [preal_less_add_left_Ex],
   619     simpset() addsimps preal_add_ac));
   676     simpset() addsimps preal_add_ac));
   620 qed "real_preal_ExI";
   677 qed "real_of_preal_ExI";
   621 
   678 
   622 Goalw [real_preal_def]
   679 Goalw [real_of_preal_def]
   623       "!!(x::preal). ? m. Abs_real (realrel ^^ {(x,y)}) = %#m ==> y < x";
   680       "!!(x::preal). ? m. Abs_real (realrel ^^ {(x,y)}) = \
       
   681 \                    real_of_preal m ==> y < x";
   624 by (auto_tac (claset(),
   682 by (auto_tac (claset(),
   625 	      simpset() addsimps 
   683 	      simpset() addsimps 
   626     [preal_add_commute,preal_add_assoc]));
   684     [preal_add_commute,preal_add_assoc]));
   627 by (asm_full_simp_tac (simpset() addsimps 
   685 by (asm_full_simp_tac (simpset() addsimps 
   628     [preal_add_assoc RS sym,preal_self_less_add_left]) 1);
   686     [preal_add_assoc RS sym,preal_self_less_add_left]) 1);
   629 qed "real_preal_ExD";
   687 qed "real_of_preal_ExD";
   630 
   688 
   631 Goal "(? m. Abs_real (realrel ^^ {(x,y)}) = %#m) = (y < x)";
   689 Goal "(? m. Abs_real (realrel ^^ {(x,y)}) = real_of_preal m) = (y < x)";
   632 by (blast_tac (claset() addSIs [real_preal_ExI,real_preal_ExD]) 1);
   690 by (blast_tac (claset() addSIs [real_of_preal_ExI,real_of_preal_ExD]) 1);
   633 qed "real_preal_iff";
   691 qed "real_of_preal_iff";
   634 
   692 
   635 (*** Gleason prop 9-4.4 p 127 ***)
   693 (*** Gleason prop 9-4.4 p 127 ***)
   636 Goalw [real_preal_def,real_zero_def] 
   694 Goalw [real_of_preal_def,real_zero_def] 
   637       "? m. (x::real) = %#m | x = 0r | x = -(%#m)";
   695       "? m. (x::real) = real_of_preal m | x = 0r | x = -(real_of_preal m)";
   638 by (res_inst_tac [("z","x")] eq_Abs_real 1);
   696 by (res_inst_tac [("z","x")] eq_Abs_real 1);
   639 by (auto_tac (claset(),simpset() addsimps [real_minus] @ preal_add_ac));
   697 by (auto_tac (claset(),simpset() addsimps [real_minus] @ preal_add_ac));
   640 by (cut_inst_tac [("r1.0","x"),("r2.0","y")] preal_linear 1);
   698 by (cut_inst_tac [("r1.0","x"),("r2.0","y")] preal_linear 1);
   641 by (auto_tac (claset() addSDs [preal_less_add_left_Ex],
   699 by (auto_tac (claset() addSDs [preal_less_add_left_Ex],
   642     simpset() addsimps [preal_add_assoc RS sym]));
   700     simpset() addsimps [preal_add_assoc RS sym]));
   643 by (auto_tac (claset(),simpset() addsimps [preal_add_commute]));
   701 by (auto_tac (claset(),simpset() addsimps [preal_add_commute]));
   644 qed "real_preal_trichotomy";
   702 qed "real_of_preal_trichotomy";
   645 
   703 
   646 Goal "!!P. [| !!m. x = %#m ==> P; \
   704 Goal "!!P. [| !!m. x = real_of_preal m ==> P; \
   647 \             x = 0r ==> P; \
   705 \             x = 0r ==> P; \
   648 \             !!m. x = -(%#m) ==> P |] ==> P";
   706 \             !!m. x = -(real_of_preal m) ==> P |] ==> P";
   649 by (cut_inst_tac [("x","x")] real_preal_trichotomy 1);
   707 by (cut_inst_tac [("x","x")] real_of_preal_trichotomy 1);
   650 by Auto_tac;
   708 by Auto_tac;
   651 qed "real_preal_trichotomyE";
   709 qed "real_of_preal_trichotomyE";
   652 
   710 
   653 Goalw [real_preal_def] "%#m1 < %#m2 ==> m1 < m2";
   711 Goalw [real_of_preal_def] 
       
   712       "real_of_preal m1 < real_of_preal m2 ==> m1 < m2";
   654 by (auto_tac (claset(),simpset() addsimps [real_less_def] @ preal_add_ac));
   713 by (auto_tac (claset(),simpset() addsimps [real_less_def] @ preal_add_ac));
   655 by (auto_tac (claset(),simpset() addsimps [preal_add_assoc RS sym]));
   714 by (auto_tac (claset(),simpset() addsimps [preal_add_assoc RS sym]));
   656 by (auto_tac (claset(),simpset() addsimps preal_add_ac));
   715 by (auto_tac (claset(),simpset() addsimps preal_add_ac));
   657 qed "real_preal_lessD";
   716 qed "real_of_preal_lessD";
   658 
   717 
   659 Goal "m1 < m2 ==> %#m1 < %#m2";
   718 Goal "m1 < m2 ==> real_of_preal m1 < real_of_preal m2";
   660 by (dtac preal_less_add_left_Ex 1);
   719 by (dtac preal_less_add_left_Ex 1);
   661 by (auto_tac (claset(),
   720 by (auto_tac (claset(),
   662 	      simpset() addsimps [real_preal_add,
   721 	      simpset() addsimps [real_of_preal_add,
   663     real_preal_def,real_less_def]));
   722     real_of_preal_def,real_less_def]));
   664 by (REPEAT(rtac exI 1));
   723 by (REPEAT(rtac exI 1));
   665 by (EVERY[rtac conjI 1, rtac conjI 2]);
   724 by (EVERY[rtac conjI 1, rtac conjI 2]);
   666 by (REPEAT(Blast_tac 2));
   725 by (REPEAT(Blast_tac 2));
   667 by (simp_tac (simpset() addsimps [preal_self_less_add_left] 
   726 by (simp_tac (simpset() addsimps [preal_self_less_add_left] 
   668     delsimps [preal_add_less_iff2]) 1);
   727     delsimps [preal_add_less_iff2]) 1);
   669 qed "real_preal_lessI";
   728 qed "real_of_preal_lessI";
   670 
   729 
   671 Goal "(%#m1 < %#m2) = (m1 < m2)";
   730 Goal "(real_of_preal m1 < real_of_preal m2) = (m1 < m2)";
   672 by (blast_tac (claset() addIs [real_preal_lessI,real_preal_lessD]) 1);
   731 by (blast_tac (claset() addIs [real_of_preal_lessI,real_of_preal_lessD]) 1);
   673 qed "real_preal_less_iff1";
   732 qed "real_of_preal_less_iff1";
   674 
   733 
   675 Addsimps [real_preal_less_iff1];
   734 Addsimps [real_of_preal_less_iff1];
   676 
   735 
   677 Goal "- %#m < %#m";
   736 Goal "- real_of_preal m < real_of_preal m";
   678 by (auto_tac (claset(),
   737 by (auto_tac (claset(),
   679 	      simpset() addsimps 
   738 	      simpset() addsimps 
   680     [real_preal_def,real_less_def,real_minus]));
   739     [real_of_preal_def,real_less_def,real_minus]));
   681 by (REPEAT(rtac exI 1));
   740 by (REPEAT(rtac exI 1));
   682 by (EVERY[rtac conjI 1, rtac conjI 2]);
   741 by (EVERY[rtac conjI 1, rtac conjI 2]);
   683 by (REPEAT(Blast_tac 2));
   742 by (REPEAT(Blast_tac 2));
   684 by (full_simp_tac (simpset() addsimps preal_add_ac) 1);
   743 by (full_simp_tac (simpset() addsimps preal_add_ac) 1);
   685 by (full_simp_tac (simpset() addsimps [preal_self_less_add_right,
   744 by (full_simp_tac (simpset() addsimps [preal_self_less_add_right,
   686     preal_add_assoc RS sym]) 1);
   745     preal_add_assoc RS sym]) 1);
   687 qed "real_preal_minus_less_self";
   746 qed "real_of_preal_minus_less_self";
   688 
   747 
   689 Goalw [real_zero_def] "- %#m < 0r";
   748 Goalw [real_zero_def] "- real_of_preal m < 0r";
   690 by (auto_tac (claset(),
   749 by (auto_tac (claset(),
   691 	      simpset() addsimps [real_preal_def,real_less_def,real_minus]));
   750     simpset() addsimps [real_of_preal_def,
       
   751     real_less_def,real_minus]));
   692 by (REPEAT(rtac exI 1));
   752 by (REPEAT(rtac exI 1));
   693 by (EVERY[rtac conjI 1, rtac conjI 2]);
   753 by (EVERY[rtac conjI 1, rtac conjI 2]);
   694 by (REPEAT(Blast_tac 2));
   754 by (REPEAT(Blast_tac 2));
   695 by (full_simp_tac (simpset() addsimps 
   755 by (full_simp_tac (simpset() addsimps 
   696   [preal_self_less_add_right] @ preal_add_ac) 1);
   756   [preal_self_less_add_right] @ preal_add_ac) 1);
   697 qed "real_preal_minus_less_zero";
   757 qed "real_of_preal_minus_less_zero";
   698 
   758 
   699 Goal "~ 0r < - %#m";
   759 Goal "~ 0r < - real_of_preal m";
   700 by (cut_facts_tac [real_preal_minus_less_zero] 1);
   760 by (cut_facts_tac [real_of_preal_minus_less_zero] 1);
   701 by (fast_tac (claset() addDs [real_less_trans] 
   761 by (fast_tac (claset() addDs [real_less_trans] 
   702                         addEs [real_less_irrefl]) 1);
   762                         addEs [real_less_irrefl]) 1);
   703 qed "real_preal_not_minus_gt_zero";
   763 qed "real_of_preal_not_minus_gt_zero";
   704 
   764 
   705 Goalw [real_zero_def] "0r < %#m";
   765 Goalw [real_zero_def] "0r < real_of_preal m";
   706 by (auto_tac (claset(),
   766 by (auto_tac (claset(),simpset() addsimps 
   707 	      simpset() addsimps [real_preal_def,real_less_def,real_minus]));
   767    [real_of_preal_def,real_less_def,real_minus]));
   708 by (REPEAT(rtac exI 1));
   768 by (REPEAT(rtac exI 1));
   709 by (EVERY[rtac conjI 1, rtac conjI 2]);
   769 by (EVERY[rtac conjI 1, rtac conjI 2]);
   710 by (REPEAT(Blast_tac 2));
   770 by (REPEAT(Blast_tac 2));
   711 by (full_simp_tac (simpset() addsimps 
   771 by (full_simp_tac (simpset() addsimps 
   712 		   [preal_self_less_add_right] @ preal_add_ac) 1);
   772 		   [preal_self_less_add_right] @ preal_add_ac) 1);
   713 qed "real_preal_zero_less";
   773 qed "real_of_preal_zero_less";
   714 
   774 
   715 Goal "~ %#m < 0r";
   775 Goal "~ real_of_preal m < 0r";
   716 by (cut_facts_tac [real_preal_zero_less] 1);
   776 by (cut_facts_tac [real_of_preal_zero_less] 1);
   717 by (blast_tac (claset() addDs [real_less_trans] 
   777 by (blast_tac (claset() addDs [real_less_trans] 
   718                addEs [real_less_irrefl]) 1);
   778                addEs [real_less_irrefl]) 1);
   719 qed "real_preal_not_less_zero";
   779 qed "real_of_preal_not_less_zero";
   720 
   780 
   721 Goal "0r < - - %#m";
   781 Goal "0r < - - real_of_preal m";
   722 by (simp_tac (simpset() addsimps 
   782 by (simp_tac (simpset() addsimps 
   723     [real_preal_zero_less]) 1);
   783     [real_of_preal_zero_less]) 1);
   724 qed "real_minus_minus_zero_less";
   784 qed "real_minus_minus_zero_less";
   725 
   785 
   726 (* another lemma *)
   786 (* another lemma *)
   727 Goalw [real_zero_def] "0r < %#m + %#m1";
   787 Goalw [real_zero_def]
   728 by (auto_tac (claset(),
   788       "0r < real_of_preal m + real_of_preal m1";
   729 	      simpset() addsimps [real_preal_def,real_less_def,real_add]));
   789 by (auto_tac (claset(),
       
   790 	      simpset() addsimps [real_of_preal_def,
       
   791               real_less_def,real_add]));
   730 by (REPEAT(rtac exI 1));
   792 by (REPEAT(rtac exI 1));
   731 by (EVERY[rtac conjI 1, rtac conjI 2]);
   793 by (EVERY[rtac conjI 1, rtac conjI 2]);
   732 by (REPEAT(Blast_tac 2));
   794 by (REPEAT(Blast_tac 2));
   733 by (full_simp_tac (simpset() addsimps preal_add_ac) 1);
   795 by (full_simp_tac (simpset() addsimps preal_add_ac) 1);
   734 by (full_simp_tac (simpset() addsimps [preal_self_less_add_right,
   796 by (full_simp_tac (simpset() addsimps [preal_self_less_add_right,
   735     preal_add_assoc RS sym]) 1);
   797     preal_add_assoc RS sym]) 1);
   736 qed "real_preal_sum_zero_less";
   798 qed "real_of_preal_sum_zero_less";
   737 
   799 
   738 Goal "- %#m < %#m1";
   800 Goal "- real_of_preal m < real_of_preal m1";
   739 by (auto_tac (claset(),
   801 by (auto_tac (claset(),
   740 	      simpset() addsimps [real_preal_def,real_less_def,real_minus]));
   802 	      simpset() addsimps [real_of_preal_def,
       
   803               real_less_def,real_minus]));
   741 by (REPEAT(rtac exI 1));
   804 by (REPEAT(rtac exI 1));
   742 by (EVERY[rtac conjI 1, rtac conjI 2]);
   805 by (EVERY[rtac conjI 1, rtac conjI 2]);
   743 by (REPEAT(Blast_tac 2));
   806 by (REPEAT(Blast_tac 2));
   744 by (full_simp_tac (simpset() addsimps preal_add_ac) 1);
   807 by (full_simp_tac (simpset() addsimps preal_add_ac) 1);
   745 by (full_simp_tac (simpset() addsimps [preal_self_less_add_right,
   808 by (full_simp_tac (simpset() addsimps [preal_self_less_add_right,
   746     preal_add_assoc RS sym]) 1);
   809     preal_add_assoc RS sym]) 1);
   747 qed "real_preal_minus_less_all";
   810 qed "real_of_preal_minus_less_all";
   748 
   811 
   749 Goal "~ %#m < - %#m1";
   812 Goal "~ real_of_preal m < - real_of_preal m1";
   750 by (cut_facts_tac [real_preal_minus_less_all] 1);
   813 by (cut_facts_tac [real_of_preal_minus_less_all] 1);
   751 by (blast_tac (claset() addDs [real_less_trans] 
   814 by (blast_tac (claset() addDs [real_less_trans] 
   752                addEs [real_less_irrefl]) 1);
   815                addEs [real_less_irrefl]) 1);
   753 qed "real_preal_not_minus_gt_all";
   816 qed "real_of_preal_not_minus_gt_all";
   754 
   817 
   755 Goal "- %#m1 < - %#m2 ==> %#m2 < %#m1";
   818 Goal "- real_of_preal m1 < - real_of_preal m2 \
   756 by (auto_tac (claset(),
   819 \     ==> real_of_preal m2 < real_of_preal m1";
   757 	      simpset() addsimps [real_preal_def,real_less_def,real_minus]));
   820 by (auto_tac (claset(),
       
   821 	      simpset() addsimps [real_of_preal_def,
       
   822               real_less_def,real_minus]));
   758 by (REPEAT(rtac exI 1));
   823 by (REPEAT(rtac exI 1));
   759 by (EVERY[rtac conjI 1, rtac conjI 2]);
   824 by (EVERY[rtac conjI 1, rtac conjI 2]);
   760 by (REPEAT(Blast_tac 2));
   825 by (REPEAT(Blast_tac 2));
   761 by (auto_tac (claset(),simpset() addsimps preal_add_ac));
   826 by (auto_tac (claset(),simpset() addsimps preal_add_ac));
   762 by (asm_full_simp_tac (simpset() addsimps [preal_add_assoc RS sym]) 1);
   827 by (asm_full_simp_tac (simpset() addsimps [preal_add_assoc RS sym]) 1);
   763 by (auto_tac (claset(),simpset() addsimps preal_add_ac));
   828 by (auto_tac (claset(),simpset() addsimps preal_add_ac));
   764 qed "real_preal_minus_less_rev1";
   829 qed "real_of_preal_minus_less_rev1";
   765 
   830 
   766 Goal "%#m1 < %#m2 ==> - %#m2 < - %#m1";
   831 Goal "real_of_preal m1 < real_of_preal m2 \
   767 by (auto_tac (claset(),
   832 \     ==> - real_of_preal m2 < - real_of_preal m1";
   768 	      simpset() addsimps [real_preal_def,real_less_def,real_minus]));
   833 by (auto_tac (claset(),
       
   834 	      simpset() addsimps [real_of_preal_def,
       
   835               real_less_def,real_minus]));
   769 by (REPEAT(rtac exI 1));
   836 by (REPEAT(rtac exI 1));
   770 by (EVERY[rtac conjI 1, rtac conjI 2]);
   837 by (EVERY[rtac conjI 1, rtac conjI 2]);
   771 by (REPEAT(Blast_tac 2));
   838 by (REPEAT(Blast_tac 2));
   772 by (auto_tac (claset(),simpset() addsimps preal_add_ac));
   839 by (auto_tac (claset(),simpset() addsimps preal_add_ac));
   773 by (asm_full_simp_tac (simpset() addsimps [preal_add_assoc RS sym]) 1);
   840 by (asm_full_simp_tac (simpset() addsimps [preal_add_assoc RS sym]) 1);
   774 by (auto_tac (claset(),simpset() addsimps preal_add_ac));
   841 by (auto_tac (claset(),simpset() addsimps preal_add_ac));
   775 qed "real_preal_minus_less_rev2";
   842 qed "real_of_preal_minus_less_rev2";
   776 
   843 
   777 Goal "(- %#m1 < - %#m2) = (%#m2 < %#m1)";
   844 Goal "(- real_of_preal m1 < - real_of_preal m2) = \
   778 by (blast_tac (claset() addSIs [real_preal_minus_less_rev1,
   845 \     (real_of_preal m2 < real_of_preal m1)";
   779                real_preal_minus_less_rev2]) 1);
   846 by (blast_tac (claset() addSIs [real_of_preal_minus_less_rev1,
   780 qed "real_preal_minus_less_rev_iff";
   847                real_of_preal_minus_less_rev2]) 1);
   781 
   848 qed "real_of_preal_minus_less_rev_iff";
   782 Addsimps [real_preal_minus_less_rev_iff];
   849 
       
   850 Addsimps [real_of_preal_minus_less_rev_iff];
   783 
   851 
   784 (*** linearity ***)
   852 (*** linearity ***)
   785 Goal "(R1::real) < R2 | R1 = R2 | R2 < R1";
   853 Goal "(R1::real) < R2 | R1 = R2 | R2 < R1";
   786 by (res_inst_tac [("x","R1")]  real_preal_trichotomyE 1);
   854 by (res_inst_tac [("x","R1")]  real_of_preal_trichotomyE 1);
   787 by (ALLGOALS(res_inst_tac [("x","R2")]  real_preal_trichotomyE));
   855 by (ALLGOALS(res_inst_tac [("x","R2")]  real_of_preal_trichotomyE));
   788 by (auto_tac (claset() addSDs [preal_le_anti_sym],
   856 by (auto_tac (claset() addSDs [preal_le_anti_sym],
   789               simpset() addsimps [preal_less_le_iff,real_preal_minus_less_zero,
   857               simpset() addsimps [preal_less_le_iff,real_of_preal_minus_less_zero,
   790                real_preal_zero_less,real_preal_minus_less_all]));
   858                real_of_preal_zero_less,real_of_preal_minus_less_all]));
   791 qed "real_linear";
   859 qed "real_linear";
   792 
   860 
   793 Goal "!!w::real. (w ~= z) = (w<z | z<w)";
   861 Goal "!!w::real. (w ~= z) = (w<z | z<w)";
   794 by (cut_facts_tac [real_linear] 1);
   862 by (cut_facts_tac [real_linear] 1);
   795 by (Blast_tac 1);
   863 by (Blast_tac 1);
   881 Goal "(w::real) < z = (w <= z & w ~= z)";
   949 Goal "(w::real) < z = (w <= z & w ~= z)";
   882 by (simp_tac (simpset() addsimps [real_le_def, real_neq_iff]) 1);
   950 by (simp_tac (simpset() addsimps [real_le_def, real_neq_iff]) 1);
   883 by (blast_tac (claset() addSEs [real_less_asym]) 1);
   951 by (blast_tac (claset() addSEs [real_less_asym]) 1);
   884 qed "real_less_le";
   952 qed "real_less_le";
   885 
   953 
   886 
       
   887 Goal "(0r < -R) = (R < 0r)";
   954 Goal "(0r < -R) = (R < 0r)";
   888 by (res_inst_tac [("x","R")]  real_preal_trichotomyE 1);
   955 by (res_inst_tac [("x","R")]  real_of_preal_trichotomyE 1);
   889 by (auto_tac (claset(),
   956 by (auto_tac (claset(),
   890 	      simpset() addsimps [real_preal_not_minus_gt_zero,
   957 	      simpset() addsimps [real_of_preal_not_minus_gt_zero,
   891                         real_preal_not_less_zero,real_preal_zero_less,
   958                         real_of_preal_not_less_zero,real_of_preal_zero_less,
   892                         real_preal_minus_less_zero]));
   959                         real_of_preal_minus_less_zero]));
   893 qed "real_minus_zero_less_iff";
   960 qed "real_minus_zero_less_iff";
   894 
   961 
   895 Addsimps [real_minus_zero_less_iff];
   962 Addsimps [real_minus_zero_less_iff];
   896 
   963 
   897 Goal "(-R < 0r) = (0r < R)";
   964 Goal "(-R < 0r) = (0r < R)";
   898 by (res_inst_tac [("x","R")]  real_preal_trichotomyE 1);
   965 by (res_inst_tac [("x","R")]  real_of_preal_trichotomyE 1);
   899 by (auto_tac (claset(),
   966 by (auto_tac (claset(),
   900 	      simpset() addsimps [real_preal_not_minus_gt_zero,
   967 	      simpset() addsimps [real_of_preal_not_minus_gt_zero,
   901                         real_preal_not_less_zero,real_preal_zero_less,
   968                         real_of_preal_not_less_zero,real_of_preal_zero_less,
   902                         real_preal_minus_less_zero]));
   969                         real_of_preal_minus_less_zero]));
   903 qed "real_minus_zero_less_iff2";
   970 qed "real_minus_zero_less_iff2";
   904 
       
   905 
   971 
   906 (*Alternative definition for real_less*)
   972 (*Alternative definition for real_less*)
   907 Goal "!!(R::real). R < S ==> ? T. 0r < T & R + T = S";
   973 Goal "!!(R::real). R < S ==> ? T. 0r < T & R + T = S";
   908 by (res_inst_tac [("x","R")]  real_preal_trichotomyE 1);
   974 by (res_inst_tac [("x","R")]  real_of_preal_trichotomyE 1);
   909 by (ALLGOALS(res_inst_tac [("x","S")]  real_preal_trichotomyE));
   975 by (ALLGOALS(res_inst_tac [("x","S")]  real_of_preal_trichotomyE));
   910 by (auto_tac (claset() addSDs [preal_less_add_left_Ex],
   976 by (auto_tac (claset() addSDs [preal_less_add_left_Ex],
   911 	      simpset() addsimps [real_preal_not_minus_gt_all,
   977 	      simpset() addsimps [real_of_preal_not_minus_gt_all,
   912 				  real_preal_add, real_preal_not_less_zero,
   978 				  real_of_preal_add, real_of_preal_not_less_zero,
   913 				  real_less_not_refl,
   979 				  real_less_not_refl,
   914 				  real_preal_not_minus_gt_zero]));
   980 				  real_of_preal_not_minus_gt_zero]));
   915 by (res_inst_tac [("x","%#D")] exI 1);
   981 by (res_inst_tac [("x","real_of_preal D")] exI 1);
   916 by (res_inst_tac [("x","%#m+%#ma")] exI 2);
   982 by (res_inst_tac [("x","real_of_preal m+real_of_preal ma")] exI 2);
   917 by (res_inst_tac [("x","%#m")] exI 3);
   983 by (res_inst_tac [("x","real_of_preal m")] exI 3);
   918 by (res_inst_tac [("x","%#D")] exI 4);
   984 by (res_inst_tac [("x","real_of_preal D")] exI 4);
   919 by (auto_tac (claset(),
   985 by (auto_tac (claset(),
   920 	      simpset() addsimps [real_preal_zero_less,
   986 	      simpset() addsimps [real_of_preal_zero_less,
   921 				  real_preal_sum_zero_less,real_add_assoc]));
   987 				  real_of_preal_sum_zero_less,real_add_assoc]));
   922 qed "real_less_add_positive_left_Ex";
   988 qed "real_less_add_positive_left_Ex";
   923 
       
   924 
       
   925 
   989 
   926 (** change naff name(s)! **)
   990 (** change naff name(s)! **)
   927 Goal "(W < S) ==> (0r < S + -W)";
   991 Goal "(W < S) ==> (0r < S + -W)";
   928 by (dtac real_less_add_positive_left_Ex 1);
   992 by (dtac real_less_add_positive_left_Ex 1);
   929 by (auto_tac (claset(),
   993 by (auto_tac (claset(),