src/HOL/Hyperreal/ExtraThms2.ML
author wenzelm
Mon, 04 Mar 2002 19:06:52 +0100
changeset 13012 f8bfc61ee1b5
parent 12486 0ed8bdd883e0
child 13153 4b052946b41c
permissions -rw-r--r--
hide SVC stuff (outdated); moved records to isar-ref;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12196
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
     1
(*lcp: lemmas needed now because 2 is a binary numeral!*)
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
     2
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
     3
Goal "m+m = m*(2::nat)";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
     4
by Auto_tac; 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
     5
qed "m_add_m_eq2";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
     6
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
     7
(*lcp: needed for binary 2 MOVE UP???*)
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
     8
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
     9
Goal "(0::real) <= x^2";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    10
by (asm_full_simp_tac (simpset() addsimps [numeral_2_eq_2]) 1); 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    11
qed "zero_le_x_squared";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    12
Addsimps [zero_le_x_squared];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    13
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    14
fun multl_by_tac x i = 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    15
       let val cancel_thm = 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    16
           CLAIM "[| (0::real)<z; z*x<z*y |] ==> x<y" 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    17
       in
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    18
           res_inst_tac [("z",x)] cancel_thm i 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    19
       end;
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    20
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    21
fun multr_by_tac x i = 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    22
       let val cancel_thm = 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    23
           CLAIM "[| (0::real)<z; x*z<y*z |] ==> x<y" 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    24
       in
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    25
           res_inst_tac [("z",x)] cancel_thm i 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    26
       end;
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    27
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    28
(* unused? *)
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    29
Goal "ALL x y. x < y --> (f::real=>real) x < f y ==> inj f";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    30
by (rtac injI 1 THEN rtac ccontr 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    31
by (dtac (ARITH_PROVE "x ~= y ==> x < y | y < (x::real)") 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    32
by (Step_tac 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    33
by (auto_tac (claset() addSDs [spec],simpset()));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    34
qed "real_monofun_inj";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    35
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    36
(* HyperDef *)
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    37
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    38
Goal "0 = Abs_hypreal (hyprel `` {%n. 0})";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    39
by (simp_tac (simpset() addsimps [hypreal_zero_def RS meta_eq_to_obj_eq RS sym]) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    40
qed "hypreal_zero_num";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    41
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    42
Goal "1 = Abs_hypreal (hyprel `` {%n. 1})";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    43
by (simp_tac (simpset() addsimps [hypreal_one_def RS meta_eq_to_obj_eq RS sym]) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    44
qed "hypreal_one_num";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    45
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    46
(* RealOrd *)
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    47
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    48
Goalw [real_of_posnat_def] "0 < real_of_posnat n";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    49
by (rtac (real_gt_zero_preal_Ex RS iffD2) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    50
by (Blast_tac 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    51
qed "real_of_posnat_gt_zero";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    52
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    53
Addsimps [real_of_posnat_gt_zero];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    54
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    55
bind_thm ("real_inv_real_of_posnat_gt_zero",
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    56
          real_of_posnat_gt_zero RS real_inverse_gt_0);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    57
Addsimps [real_inv_real_of_posnat_gt_zero];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    58
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    59
bind_thm ("real_of_posnat_ge_zero",real_of_posnat_gt_zero RS order_less_imp_le);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    60
Addsimps [real_of_posnat_ge_zero];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    61
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    62
Goal "real_of_posnat n ~= 0";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    63
by (rtac (real_of_posnat_gt_zero RS real_not_refl2 RS not_sym) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    64
qed "real_of_posnat_not_eq_zero";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    65
Addsimps[real_of_posnat_not_eq_zero];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    66
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    67
Addsimps [real_of_posnat_not_eq_zero RS real_mult_inv_left];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    68
Addsimps [real_of_posnat_not_eq_zero RS real_mult_inv_right];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    69
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    70
Goal "1 <= real_of_posnat n";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    71
by (simp_tac (simpset() addsimps [real_of_posnat_one RS sym]) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    72
by (induct_tac "n" 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    73
by (auto_tac (claset(),
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    74
	      simpset () addsimps [real_of_posnat_Suc,real_of_posnat_one,
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    75
				   order_less_imp_le]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    76
qed "real_of_posnat_ge_one";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    77
Addsimps [real_of_posnat_ge_one];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    78
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    79
Goal "inverse(real_of_posnat n) ~= 0";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    80
by (rtac ((real_of_posnat_gt_zero RS 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    81
    real_not_refl2 RS not_sym) RS real_inverse_not_zero) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    82
qed "real_of_posnat_real_inv_not_zero";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    83
Addsimps [real_of_posnat_real_inv_not_zero];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    84
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    85
Goal "inverse(real_of_posnat x) = inverse(real_of_posnat y) ==> x = y";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    86
by (rtac (inj_real_of_posnat RS injD) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    87
by (res_inst_tac [("n2","x")] 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    88
    (real_of_posnat_real_inv_not_zero RS real_mult_left_cancel RS iffD1) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    89
by (asm_full_simp_tac (simpset() addsimps [(real_of_posnat_gt_zero RS 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    90
    real_not_refl2 RS not_sym) RS real_mult_inv_left]) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    91
qed "real_of_posnat_real_inv_inj";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    92
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    93
Goal "r < r + inverse(real_of_posnat n)";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    94
by Auto_tac;
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    95
qed "real_add_inv_real_of_posnat_less";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    96
Addsimps [real_add_inv_real_of_posnat_less];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    97
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    98
Goal "r <= r + inverse(real_of_posnat n)";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
    99
by Auto_tac;
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   100
qed "real_add_inv_real_of_posnat_le";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   101
Addsimps [real_add_inv_real_of_posnat_le];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   102
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   103
Goal "0 < r ==> r*(1 + -inverse(real_of_posnat n)) < r";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   104
by (simp_tac (simpset() addsimps [real_add_mult_distrib2]) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   105
by (res_inst_tac [("C","-r")] real_less_add_left_cancel 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   106
by (auto_tac (claset() addIs [real_mult_order],simpset() 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   107
    addsimps [real_add_assoc RS sym,real_minus_zero_less_iff2]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   108
qed "real_mult_less_self";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   109
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   110
Goal "(EX n. inverse(real_of_posnat n) < r) = (EX n. 1 < r * real_of_posnat n)";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   111
by (Step_tac 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   112
by (dres_inst_tac [("n1","n")] (real_of_posnat_gt_zero 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   113
                       RS real_mult_less_mono1) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   114
by (dres_inst_tac [("n2","n")] (real_of_posnat_gt_zero RS 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   115
        real_inverse_gt_0 RS real_mult_less_mono1) 2);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   116
by (auto_tac (claset(),
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   117
	      simpset() addsimps [(real_of_posnat_gt_zero RS 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   118
    real_not_refl2 RS not_sym),real_mult_assoc]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   119
qed "real_of_posnat_inv_Ex_iff";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   120
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   121
Goal "(inverse(real_of_posnat n) < r) = (1 < r * real_of_posnat n)";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   122
by (Step_tac 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   123
by (dres_inst_tac [("n1","n")] (real_of_posnat_gt_zero 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   124
                       RS real_mult_less_mono1) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   125
by (dres_inst_tac [("n2","n")] (real_of_posnat_gt_zero RS 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   126
        real_inverse_gt_0 RS real_mult_less_mono1) 2);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   127
by (auto_tac (claset(),simpset() addsimps [real_mult_assoc]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   128
qed "real_of_posnat_inv_iff";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   129
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   130
Goal "[| (0::real) <=z; x<y |] ==> z*x<=z*y";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   131
by (asm_simp_tac (simpset() addsimps [real_mult_commute,real_mult_le_less_mono1]) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   132
qed "real_mult_le_less_mono2";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   133
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   134
Goal "[| (0::real) <=z; x<=y |] ==> z*x<=z*y";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   135
by (dres_inst_tac [("x","x")] real_le_imp_less_or_eq 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   136
by (auto_tac (claset() addIs [real_mult_le_less_mono2], simpset()));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   137
qed "real_mult_le_le_mono1";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   138
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   139
Goal "[| (0::real)<=z; x<=y |] ==> x*z<=y*z";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   140
by (dtac (real_mult_le_le_mono1) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   141
by (auto_tac (claset(),simpset() addsimps [real_mult_commute]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   142
qed "real_mult_le_le_mono2";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   143
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   144
Goal "(inverse(real_of_posnat n) <= r) = (1 <= r * real_of_posnat n)";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   145
by (Step_tac 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   146
by (dres_inst_tac [("n2","n")] (real_of_posnat_gt_zero RS 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   147
    order_less_imp_le RS real_mult_le_le_mono1) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   148
by (dres_inst_tac [("n3","n")] (real_of_posnat_gt_zero RS 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   149
        real_inverse_gt_0 RS order_less_imp_le RS 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   150
        real_mult_le_le_mono1) 2);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   151
by (auto_tac (claset(),simpset() addsimps real_mult_ac));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   152
qed "real_of_posnat_inv_le_iff";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   153
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   154
Goalw [real_of_posnat_def] 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   155
      "(real_of_posnat n < real_of_posnat m) = (n < m)";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   156
by Auto_tac;
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   157
qed "real_of_posnat_less_iff";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   158
Addsimps [real_of_posnat_less_iff];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   159
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   160
Goal "(real_of_posnat n <= real_of_posnat m) = (n <= m)";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   161
by (auto_tac (claset() addDs [inj_real_of_posnat RS injD],
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   162
    simpset() addsimps [real_le_less,le_eq_less_or_eq]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   163
qed "real_of_posnat_le_iff";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   164
Addsimps [real_of_posnat_le_iff];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   165
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   166
Goal "[| (0::real)<z; x*z<y*z |] ==> x<y";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   167
by Auto_tac;
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   168
qed "real_mult_less_cancel3";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   169
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   170
Goal "[| (0::real)<z; z*x<z*y |] ==> x<y";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   171
by Auto_tac;
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   172
qed "real_mult_less_cancel4";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   173
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   174
Goal "0 < u  ==> (u < inverse (real_of_posnat n)) = (real_of_posnat n < inverse(u))";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   175
by (Step_tac 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   176
by (res_inst_tac [("n2","n")] ((real_of_posnat_gt_zero RS 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   177
    real_inverse_gt_0) RS real_mult_less_cancel3) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   178
by (res_inst_tac [("x1","u")] ( real_inverse_gt_0
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   179
   RS real_mult_less_cancel3) 2);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   180
by (auto_tac (claset(),
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   181
	      simpset() addsimps [real_not_refl2 RS not_sym]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   182
by (res_inst_tac [("z","u")] real_mult_less_cancel4 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   183
by (res_inst_tac [("n1","n")] (real_of_posnat_gt_zero RS 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   184
    real_mult_less_cancel4) 3);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   185
by (auto_tac (claset(),
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   186
	      simpset() addsimps [real_not_refl2 RS not_sym,
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   187
              real_mult_assoc RS sym]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   188
qed "real_of_posnat_less_inv_iff";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   189
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   190
Goal "0 < u ==> (u = inverse(real_of_posnat n)) = (real_of_posnat n = inverse u)";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   191
by Auto_tac;
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   192
qed "real_of_posnat_inv_eq_iff";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   193
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   194
Goal "0 <= 1 + -inverse(real_of_posnat n)";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   195
by (res_inst_tac [("C","inverse(real_of_posnat n)")] real_le_add_right_cancel 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   196
by (simp_tac (simpset() addsimps [real_add_assoc,
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   197
    real_of_posnat_inv_le_iff]) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   198
qed "real_add_one_minus_inv_ge_zero";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   199
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   200
Goal "0 < r ==> 0 <= r*(1 + -inverse(real_of_posnat n))";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   201
by (dtac (real_add_one_minus_inv_ge_zero RS real_mult_le_less_mono1) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   202
by (Auto_tac);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   203
qed "real_mult_add_one_minus_ge_zero";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   204
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   205
Goal "x*y = (1::real) ==> y = inverse x";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   206
by (case_tac "x ~= 0" 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   207
by (res_inst_tac [("c1","x")] (real_mult_left_cancel RS iffD1) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   208
by Auto_tac;
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   209
qed "real_inverse_unique";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   210
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   211
Goal "[| (0::real) < x; x < 1 |] ==> 1 < inverse x";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   212
by (auto_tac (claset() addDs [real_inverse_less_swap],simpset()));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   213
qed "real_inverse_gt_one";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   214
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   215
Goal "(0 < real (n::nat)) = (0 < n)";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   216
by (rtac (real_of_nat_less_iff RS subst) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   217
by Auto_tac;
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   218
qed "real_of_nat_gt_zero_cancel_iff";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   219
Addsimps [real_of_nat_gt_zero_cancel_iff];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   220
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   221
Goal "(real (n::nat) <= 0) = (n = 0)";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   222
by (rtac ((real_of_nat_zero) RS subst) 1);
12486
0ed8bdd883e0 isatool expandshort;
wenzelm
parents: 12196
diff changeset
   223
by (stac real_of_nat_le_iff 1);
12196
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   224
by Auto_tac;
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   225
qed "real_of_nat_le_zero_cancel_iff";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   226
Addsimps [real_of_nat_le_zero_cancel_iff];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   227
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   228
Goal "~ real (n::nat) < 0";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   229
by (simp_tac (simpset() addsimps [symmetric real_le_def,
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   230
    real_of_nat_ge_zero]) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   231
qed "not_real_of_nat_less_zero";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   232
Addsimps [not_real_of_nat_less_zero];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   233
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   234
Goalw [real_le_def,le_def] 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   235
      "(0 <= real (n::nat)) = (0 <= n)";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   236
by (Simp_tac 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   237
qed "real_of_nat_ge_zero_cancel_iff";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   238
Addsimps [real_of_nat_ge_zero_cancel_iff];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   239
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   240
Goal "real n = (if n=0 then 0 else 1 + real ((n::nat) - 1))";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   241
by (case_tac "n" 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   242
by (auto_tac (claset(),simpset() addsimps [real_of_nat_Suc]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   243
qed "real_of_nat_num_if";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   244
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   245
Goal "4 * real n = real (4 * (n::nat))";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   246
by Auto_tac;
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   247
qed "real_of_nat_mult_num_4_eq";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   248
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   249
(*REDUNDANT
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   250
    Goal "x * x = -(y * y) ==> x = (0::real)";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   251
    by (auto_tac (claset() addIs [
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   252
	real_sum_squares_cancel],simpset()));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   253
    qed "real_sum_squares_cancel1a";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   254
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   255
    Goal "x * x = -(y * y) ==> y = (0::real)";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   256
    by (auto_tac (claset() addIs [
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   257
	real_sum_squares_cancel],simpset()));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   258
    qed "real_sum_squares_cancel2a";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   259
*)
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   260
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   261
Goal "x * x = -(y * y) ==> x = (0::real) & y=0";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   262
by (auto_tac (claset() addIs [real_sum_squares_cancel],simpset()));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   263
qed "real_sum_squares_cancel_a";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   264
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   265
Goal "x*x - (1::real) = (x + 1)*(x - 1)";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   266
by (auto_tac (claset(),simpset() addsimps [real_add_mult_distrib,
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   267
    real_add_mult_distrib2,real_diff_def]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   268
qed "real_squared_diff_one_factored";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   269
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   270
Goal "(x*x = (1::real)) = (x = 1 | x = - 1)";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   271
by Auto_tac;
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   272
by (dtac (CLAIM "x = (y::real) ==> x - y = 0") 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   273
by (auto_tac (claset(),simpset() addsimps [real_squared_diff_one_factored]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   274
qed "real_mult_is_one";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   275
AddIffs [real_mult_is_one];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   276
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   277
Goal "(x + y/2 <= (y::real)) = (x <= y /2)";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   278
by Auto_tac;
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   279
qed "real_le_add_half_cancel";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   280
Addsimps [real_le_add_half_cancel];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   281
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   282
Goal "(x::real) - x/2 = x/2";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   283
by Auto_tac;
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   284
qed "real_minus_half_eq";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   285
Addsimps [real_minus_half_eq];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   286
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   287
Goal "[|(0::real) < x;0 < x1; x1 * y < x * u |] ==> inverse x * y < inverse x1 * u";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   288
by (multl_by_tac "x" 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   289
by (auto_tac (claset(),simpset() addsimps [real_mult_assoc RS sym]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   290
by (simp_tac (simpset() addsimps real_mult_ac) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   291
by (multr_by_tac "x1" 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   292
by (auto_tac (claset(),simpset() addsimps real_mult_ac));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   293
qed "real_mult_inverse_cancel";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   294
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   295
Goal "[|(0::real) < x;0 < x1; x1 * y < x * u |] ==> y * inverse x < u * inverse x1";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   296
by (auto_tac (claset() addDs [real_mult_inverse_cancel],simpset() addsimps real_mult_ac));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   297
qed "real_mult_inverse_cancel2";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   298
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   299
Goal "0 < inverse (real (Suc n))";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   300
by Auto_tac;
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   301
qed "inverse_real_of_nat_gt_zero";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   302
Addsimps [ inverse_real_of_nat_gt_zero];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   303
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   304
Goal "0 <= inverse (real (Suc n))";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   305
by Auto_tac;
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   306
qed "inverse_real_of_nat_ge_zero";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   307
Addsimps [ inverse_real_of_nat_ge_zero];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   308
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   309
Goal "x ~= 0 ==> x * x + y * y ~= (0::real)";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   310
by (rtac (CLAIM "!!x. ((x = y ==> False)) ==> x ~= y") 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   311
by (dtac (real_sum_squares_cancel) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   312
by (Asm_full_simp_tac 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   313
qed "real_sum_squares_not_zero";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   314
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   315
Goal "y ~= 0 ==> x * x + y * y ~= (0::real)";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   316
by (rtac (CLAIM "!!x. ((x = y ==> False)) ==> x ~= y") 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   317
by (dtac (real_sum_squares_cancel2) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   318
by (Asm_full_simp_tac 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   319
qed "real_sum_squares_not_zero2";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   320
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   321
(* RealAbs *)
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   322
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   323
(* nice theorem *)
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   324
Goal "abs x * abs x = x * (x::real)";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   325
by (cut_inst_tac [("R1.0","x"),("R2.0","0")] real_linear 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   326
by (auto_tac (claset(),simpset() addsimps [abs_eqI2,abs_minus_eqI2]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   327
qed "abs_mult_abs";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   328
Addsimps [abs_mult_abs];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   329
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   330
(* RealPow *)
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   331
Goalw [real_divide_def]
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   332
    "(x/y) ^ n = ((x::real) ^ n/ y ^ n)";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   333
by (auto_tac (claset(),simpset() addsimps [realpow_mult,
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   334
    realpow_inverse]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   335
qed "realpow_divide";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   336
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   337
Goal "isCont (%x. x ^ n) x";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   338
by (rtac (DERIV_pow RS DERIV_isCont) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   339
qed "isCont_realpow";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   340
Addsimps [isCont_realpow];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   341
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   342
Goal "(0::real) <= r --> 0 <= r ^ n";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   343
by (induct_tac "n" 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   344
by (auto_tac (claset(),simpset() addsimps [real_0_le_mult_iff]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   345
qed_spec_mp "realpow_ge_zero2";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   346
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   347
Goal "(0::real) <= x & x <= y --> x ^ n <= y ^ n";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   348
by (induct_tac "n" 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   349
by (auto_tac (claset() addSIs [real_mult_le_mono],
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   350
    simpset() addsimps [realpow_ge_zero2]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   351
qed_spec_mp "realpow_le2";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   352
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   353
Goal "(1::real) < r ==> 1 < r ^ (Suc n)";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   354
by (forw_inst_tac [("n","n")] realpow_ge_one 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   355
by (dtac real_le_imp_less_or_eq 1 THEN Step_tac 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   356
by (forward_tac [(real_zero_less_one RS real_less_trans)] 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   357
by (dres_inst_tac [("y","r ^ n")] (real_mult_less_mono2) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   358
by (assume_tac 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   359
by (auto_tac (claset() addDs [real_less_trans],simpset()));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   360
qed "realpow_Suc_gt_one";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   361
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   362
Goal "(x ^ 2 + y ^ 2 = (0::real)) = (x = 0 & y = 0)";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   363
by (auto_tac (claset() addIs [real_sum_squares_cancel, real_sum_squares_cancel2], 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   364
              simpset() addsimps [numeral_2_eq_2]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   365
qed "realpow_two_sum_zero_iff";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   366
Addsimps [realpow_two_sum_zero_iff];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   367
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   368
Goal "(0::real) <= u ^ 2 + v ^ 2";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   369
by (rtac (real_le_add_order) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   370
by (auto_tac (claset(), simpset() addsimps [numeral_2_eq_2])); 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   371
qed "realpow_two_le_add_order";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   372
Addsimps [realpow_two_le_add_order];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   373
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   374
Goal "(0::real) <= u ^ 2 + v ^ 2 + w ^ 2";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   375
by (REPEAT(rtac (real_le_add_order) 1));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   376
by (auto_tac (claset(), simpset() addsimps [numeral_2_eq_2])); 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   377
qed "realpow_two_le_add_order2";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   378
Addsimps [realpow_two_le_add_order2];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   379
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   380
Goal "(0::real) <= x*x + y*y";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   381
by (cut_inst_tac [("u","x"),("v","y")] realpow_two_le_add_order 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   382
by (auto_tac (claset(), simpset() addsimps [numeral_2_eq_2])); 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   383
qed "real_mult_self_sum_ge_zero";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   384
Addsimps [real_mult_self_sum_ge_zero];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   385
Addsimps [real_mult_self_sum_ge_zero RS abs_eqI1];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   386
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   387
Goal "x ~= 0 ==> (0::real) < x * x + y * y";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   388
by (cut_inst_tac [("x","x"),("y","y")] real_mult_self_sum_ge_zero 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   389
by (dtac real_le_imp_less_or_eq 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   390
by (dres_inst_tac [("y","y")] real_sum_squares_not_zero 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   391
by Auto_tac;
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   392
qed "real_sum_square_gt_zero";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   393
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   394
Goal "y ~= 0 ==> (0::real) < x * x + y * y";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   395
by (rtac (real_add_commute RS subst) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   396
by (etac real_sum_square_gt_zero 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   397
qed "real_sum_square_gt_zero2";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   398
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   399
Goal "-(u * u) <= (x * (x::real))";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   400
by (res_inst_tac [("j","0")] real_le_trans 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   401
by Auto_tac;
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   402
qed "real_minus_mult_self_le";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   403
Addsimps [real_minus_mult_self_le];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   404
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   405
Goal "-(u ^ 2) <= (x::real) ^ 2";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   406
by (auto_tac (claset(), simpset() addsimps [numeral_2_eq_2])); 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   407
qed "realpow_square_minus_le";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   408
Addsimps [realpow_square_minus_le];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   409
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   410
Goal "(m::real) ^ n = (if n=0 then 1 else m * m ^ (n - 1))";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   411
by (case_tac "n" 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   412
by Auto_tac;
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   413
qed "realpow_num_eq_if";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   414
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   415
Goal "0 < (2::real) ^ (4*d)";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   416
by (induct_tac "d" 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   417
by (auto_tac (claset(),simpset() addsimps [realpow_num_eq_if]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   418
qed "real_num_zero_less_two_pow";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   419
Addsimps [real_num_zero_less_two_pow];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   420
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   421
Goal "x * (4::real)   < y ==> x * (2 ^ 8) < y * (2 ^ 6)";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   422
by (subgoal_tac "(2::real) ^ 8 = 4 * (2 ^ 6)" 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   423
by (asm_simp_tac (simpset() addsimps [real_mult_assoc RS sym]) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   424
by (auto_tac (claset(),simpset() addsimps [realpow_num_eq_if]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   425
qed "lemma_realpow_num_two_mono";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   426
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   427
Goal "2 ^ 2 = (4::real)";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   428
by (simp_tac (simpset() addsimps [realpow_num_eq_if]) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   429
val lemma_realpow_4 = result();
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   430
Addsimps [lemma_realpow_4];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   431
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   432
Goal "2 ^ 4 = (16::real)";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   433
by (simp_tac (simpset() addsimps [realpow_num_eq_if]) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   434
val lemma_realpow_16 = result();
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   435
Addsimps [lemma_realpow_16];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   436
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   437
(* HyperOrd *)
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   438
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   439
Goal "[| (0::hypreal) < x; y < 0 |] ==> y*x < 0";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   440
by (auto_tac (claset(),simpset() addsimps [hypreal_mult_commute,
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   441
    hypreal_mult_less_zero]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   442
qed "hypreal_mult_less_zero2";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   443
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   444
(* HyperPow *)
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   445
Goal "(0::hypreal) <= x * x";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   446
by (auto_tac (claset(),simpset() addsimps 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   447
    [hypreal_0_le_mult_iff]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   448
qed "hypreal_mult_self_ge_zero";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   449
Addsimps [hypreal_mult_self_ge_zero];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   450
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   451
(* deleted from distribution but I prefer to have it *)
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   452
Goal "[|(0::hypreal) <= x; 0 <= y; x ^ Suc n = y ^ Suc n |] ==> x = y";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   453
by (res_inst_tac [("z","x")] eq_Abs_hypreal 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   454
by (res_inst_tac [("z","y")] eq_Abs_hypreal 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   455
by (auto_tac (claset(),simpset() addsimps 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   456
    [hrealpow,hypreal_mult,hypreal_le,hypreal_zero_num]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   457
by (ultra_tac (claset() addIs [realpow_Suc_cancel_eq],
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   458
    simpset()) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   459
qed "hrealpow_Suc_cancel_eq";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   460
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   461
(* NSA.ML: next two were there before? Not in distrib though *)
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   462
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   463
Goal "[| x + y : HInfinite; y: HFinite |] ==> x : HInfinite";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   464
by (rtac ccontr 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   465
by (dtac (HFinite_HInfinite_iff RS iffD2) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   466
by (auto_tac (claset() addDs [HFinite_add],simpset() 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   467
    addsimps [HInfinite_HFinite_iff]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   468
qed "HInfinite_HFinite_add_cancel";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   469
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   470
Goal "[| x : HInfinite; y : HFinite |] ==> x + y : HInfinite";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   471
by (res_inst_tac [("y","-y")] HInfinite_HFinite_add_cancel 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   472
by (auto_tac (claset(),simpset() addsimps [hypreal_add_assoc,
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   473
    HFinite_minus_iff]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   474
qed "HInfinite_HFinite_add";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   475
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   476
Goal "[| x : HInfinite; x <= y; 0 <= x |] ==> y : HInfinite";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   477
by (auto_tac (claset() addIs [HFinite_bounded],simpset() 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   478
    addsimps [HInfinite_HFinite_iff]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   479
qed "HInfinite_ge_HInfinite";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   480
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   481
Goal "[| x : Infinitesimal; x ~= 0 |] ==> inverse x : HInfinite";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   482
by (rtac ccontr 1 THEN dtac (HFinite_HInfinite_iff RS iffD2) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   483
by (auto_tac (claset() addDs [Infinitesimal_HFinite_mult2],simpset()));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   484
qed "Infinitesimal_inverse_HInfinite";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   485
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   486
Goal "n : HNatInfinite ==> inverse (hypreal_of_hypnat n) : Infinitesimal";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   487
by (res_inst_tac [("z","n")] eq_Abs_hypnat 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   488
by (auto_tac (claset(),simpset() addsimps [hypreal_of_hypnat,hypreal_inverse,
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   489
    HNatInfinite_FreeUltrafilterNat_iff,Infinitesimal_FreeUltrafilterNat_iff2]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   490
by (rtac bexI 1 THEN rtac lemma_hyprel_refl 2);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   491
by Auto_tac;
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   492
by (dres_inst_tac [("x","m + 1")] spec 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   493
by (Ultra_tac 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   494
by (subgoal_tac "abs(inverse (real (Y x))) = inverse(real (Y x))" 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   495
by (auto_tac (claset() addSIs [abs_eqI2],simpset()));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   496
by (rtac real_inverse_less_swap 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   497
by Auto_tac;
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   498
qed "HNatInfinite_inverse_Infinitesimal";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   499
Addsimps [HNatInfinite_inverse_Infinitesimal];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   500
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   501
Goal "n : HNatInfinite ==> inverse (hypreal_of_hypnat n) ~= 0";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   502
by (auto_tac (claset() addSIs [hypreal_inverse_not_zero],simpset()));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   503
qed "HNatInfinite_inverse_not_zero";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   504
Addsimps [HNatInfinite_inverse_not_zero];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   505
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   506
Goal "N : HNatInfinite \
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   507
\     ==> (*fNat* (%x. inverse (real x))) N : Infinitesimal";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   508
by (res_inst_tac [("f1","inverse")]  (starfun_stafunNat_o2 RS subst) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   509
by (subgoal_tac "hypreal_of_hypnat N ~= 0" 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   510
by (auto_tac (claset(),simpset() addsimps [starfunNat_real_of_nat]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   511
qed "starfunNat_inverse_real_of_nat_Infinitesimal";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   512
Addsimps [starfunNat_inverse_real_of_nat_Infinitesimal];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   513
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   514
Goal "[| x : HInfinite; y : HFinite - Infinitesimal |] \
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   515
\     ==> x * y : HInfinite";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   516
by (rtac ccontr 1 THEN dtac (HFinite_HInfinite_iff RS iffD2) 1); 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   517
by (ftac HFinite_Infinitesimal_not_zero 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   518
by (dtac HFinite_not_Infinitesimal_inverse 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   519
by (Step_tac 1 THEN dtac HFinite_mult 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   520
by (auto_tac (claset(),simpset() addsimps [hypreal_mult_assoc,
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   521
    HFinite_HInfinite_iff]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   522
qed "HInfinite_HFinite_not_Infinitesimal_mult";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   523
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   524
Goal "[| x : HInfinite; y : HFinite - Infinitesimal |] \
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   525
\     ==> y * x : HInfinite";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   526
by (auto_tac (claset(),simpset() addsimps [hypreal_mult_commute,
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   527
    HInfinite_HFinite_not_Infinitesimal_mult]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   528
qed "HInfinite_HFinite_not_Infinitesimal_mult2";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   529
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   530
Goal "[| x : HInfinite; 0 < x; y : Reals |] ==> y < x";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   531
by (auto_tac (claset() addSDs [bspec],simpset() addsimps 
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   532
    [HInfinite_def,hrabs_def,order_less_imp_le]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   533
qed "HInfinite_gt_SReal";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   534
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   535
Goal "[| x : HInfinite; 0 < x |] ==> 1 < x";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   536
by (auto_tac (claset() addIs [HInfinite_gt_SReal],simpset()));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   537
qed "HInfinite_gt_zero_gt_one";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   538
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   539
(* not added at proof?? *)
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   540
Addsimps [HInfinite_omega];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   541
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   542
(* Add in HyperDef.ML? *)
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   543
Goalw [omega_def] "0 < omega";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   544
by (auto_tac (claset(),simpset() addsimps [hypreal_less,hypreal_zero_num]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   545
qed "hypreal_omega_gt_zero";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   546
Addsimps [hypreal_omega_gt_zero];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   547
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   548
Goal "1 ~: HInfinite";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   549
by (simp_tac (simpset() addsimps [HInfinite_HFinite_iff]) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   550
qed "not_HInfinite_one";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   551
Addsimps [not_HInfinite_one];
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   552
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   553
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   554
(* RComplete.ML *)
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   555
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   556
Goal "0 < x ==> ALL y. EX (n::nat). y < real n * x";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   557
by (Step_tac 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   558
by (cut_inst_tac [("x","y*inverse(x)")] reals_Archimedean2 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   559
by (Step_tac 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   560
by (forw_inst_tac [("x","y * inverse x")] (real_mult_less_mono1) 1);
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   561
by (auto_tac (claset(),simpset() addsimps [real_mult_assoc,real_of_nat_def]));
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   562
qed "reals_Archimedean3";
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
   563