src/HOL/Hyperreal/Log.ML
author kleing
Tue, 13 May 2003 08:59:21 +0200
changeset 14024 213dcc39358f
parent 12224 02df7cbe7d25
child 14305 f17ca9f6dc8c
permissions -rw-r--r--
HOL-Real -> HOL-Complex
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12224
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
     1
(*  Title       : Log.ML
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
     2
    Author      : Jacques D. Fleuriot
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
     3
    Copyright   : 2000,2001 University of Edinburgh
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
     4
    Description : standard logarithms only 
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
     5
*)
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
     6
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
     7
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
     8
Goalw [powr_def] "1 powr a = 1";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
     9
by (Simp_tac 1);
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    10
qed "powr_one_eq_one";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    11
Addsimps [powr_one_eq_one];
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    12
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    13
Goalw [powr_def] "x powr 0 = 1";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    14
by (Simp_tac 1);
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    15
qed "powr_zero_eq_one";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    16
Addsimps [powr_zero_eq_one];
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    17
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    18
Goalw [powr_def] 
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    19
      "(x powr 1 = x) = (0 < x)";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    20
by (Simp_tac 1);
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    21
qed "powr_one_gt_zero_iff";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    22
Addsimps [powr_one_gt_zero_iff];
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    23
Addsimps [powr_one_gt_zero_iff RS iffD2];
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    24
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    25
Goalw [powr_def] 
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    26
      "[| 0 < x; 0 < y |] ==> (x * y) powr a = (x powr a) * (y powr a)";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    27
by (asm_simp_tac (simpset() addsimps [exp_add RS sym,ln_mult,
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    28
    real_add_mult_distrib2]) 1);
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    29
qed "powr_mult";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    30
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    31
Goalw [powr_def] "0 < x powr a";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    32
by (Simp_tac 1);
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    33
qed "powr_gt_zero";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    34
Addsimps [powr_gt_zero];
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    35
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    36
Goalw [powr_def] "x powr a ~= 0";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    37
by (Simp_tac 1);
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    38
qed "powr_not_zero";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    39
Addsimps [powr_not_zero];
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    40
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    41
Goal "[| 0 < x; 0 < y |] ==> (x / y) powr a = (x powr a)/(y powr a)";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    42
by (asm_simp_tac (simpset() addsimps [real_divide_def,real_inverse_gt_0,
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    43
    powr_mult]) 1);
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    44
by (asm_simp_tac (simpset() addsimps [powr_def,exp_minus RS sym,
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    45
    exp_add RS sym,ln_inverse]) 1);
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    46
qed "powr_divide";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    47
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    48
Goalw [powr_def] "x powr (a + b) = (x powr a) * (x powr b)";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    49
by (asm_simp_tac (simpset() addsimps [exp_add RS sym,
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    50
    real_add_mult_distrib]) 1);
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    51
qed "powr_add";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    52
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    53
Goalw [powr_def] "(x powr a) powr b = x powr (a * b)";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    54
by (simp_tac (simpset() addsimps real_mult_ac) 1);
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    55
qed "powr_powr";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    56
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    57
Goal "(x powr a) powr b = (x powr b) powr a";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    58
by (simp_tac (simpset() addsimps [powr_powr,real_mult_commute]) 1);
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    59
qed "powr_powr_swap";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    60
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    61
Goalw [powr_def] "x powr (-a) = inverse (x powr a)";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    62
by (simp_tac (simpset() addsimps [exp_minus RS sym]) 1);
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    63
qed "powr_minus";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    64
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    65
Goalw [real_divide_def] "x powr (-a) = 1/(x powr a)";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    66
by (simp_tac (simpset() addsimps [powr_minus]) 1);
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    67
qed "powr_minus_divide";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    68
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    69
Goalw [powr_def] 
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    70
   "[| a < b; 1 < x |] ==> x powr a < x powr b";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    71
by Auto_tac;
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    72
qed "powr_less_mono";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    73
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    74
Goalw [powr_def] 
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    75
   "[| x powr a < x powr b; 1 < x |] ==> a < b";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    76
by (auto_tac (claset() addDs [ln_gt_zero],
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    77
    simpset() addsimps [rename_numerals real_mult_less_cancel2]));
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    78
qed "powr_less_cancel";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    79
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    80
Goal "1 < x ==> (x powr a < x powr b) = (a < b)";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    81
by (blast_tac (claset() addIs [powr_less_cancel,powr_less_mono]) 1);
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    82
qed "powr_less_cancel_iff";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    83
Addsimps [powr_less_cancel_iff];
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    84
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    85
Goalw [real_le_def] "1 < x ==> (x powr a <= x powr b) = (a <= b)";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    86
by (Auto_tac);
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    87
qed "powr_le_cancel_iff";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    88
Addsimps [powr_le_cancel_iff];
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    89
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    90
Goalw [log_def] "ln x = log (exp(1)) x";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    91
by (Simp_tac 1);
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    92
qed "log_ln";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    93
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    94
Goalw [powr_def,log_def] 
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    95
    "[| 0 < a; a ~= 1; 0 < x |] ==> a powr (log a x) = x";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    96
by Auto_tac;
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    97
qed "powr_log_cancel";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    98
Addsimps [powr_log_cancel];
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    99
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   100
Goalw [log_def,powr_def] 
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   101
    "[| 0 < a; a ~= 1 |] ==> log a (a powr y) = y";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   102
by (auto_tac (claset(),simpset() addsimps [real_divide_def,
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   103
    real_mult_assoc]));
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   104
qed "log_powr_cancel";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   105
Addsimps [log_powr_cancel];
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   106
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   107
Goalw [log_def] 
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   108
     "[| 0 < a; a ~= 1; 0 < x; 0 < y  |] \
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   109
\     ==> log a (x * y) = log a x + log a y";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   110
by (auto_tac (claset(),simpset() addsimps [ln_mult,real_divide_def,
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   111
    real_add_mult_distrib]));
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   112
qed "log_mult";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   113
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   114
Goalw [log_def,real_divide_def]
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   115
     "[| 0 < a; a ~= 1; 0 < b; b ~= 1; 0 < x |] \
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   116
\     ==> log a x = (ln b/ln a) * log b x";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   117
by Auto_tac;
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   118
qed "log_eq_div_ln_mult_log";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   119
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   120
(* specific case *)
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   121
Goal "0 < x ==> log 10 x = (ln (exp 1) / ln 10) * ln x";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   122
by (auto_tac (claset(),simpset() addsimps [log_def]));
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   123
qed "log_base_10_eq1";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   124
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   125
Goal "0 < x ==> log 10 x = (log 10 (exp 1)) * ln x";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   126
by (auto_tac (claset(),simpset() addsimps [log_def]));
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   127
qed "log_base_10_eq2";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   128
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   129
Goalw [log_def] "log a 1 = 0";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   130
by Auto_tac;
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   131
qed "log_one";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   132
Addsimps [log_one];
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   133
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   134
Goalw [log_def] 
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   135
    "[| 0 < a; a ~= 1 |] ==> log a a = 1";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   136
by Auto_tac;
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   137
qed "log_eq_one";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   138
Addsimps [log_eq_one];
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   139
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   140
Goal "[| 0 < a; a ~= 1; 0 < x |] ==> log a (inverse x) = - log a x";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   141
by (res_inst_tac [("x1","log a x")] (real_add_left_cancel RS iffD1) 1);
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   142
by (auto_tac (claset(),simpset() addsimps [log_mult RS sym]));
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   143
qed "log_inverse";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   144
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   145
Goal "[|0 < a; a ~= 1; 0 < x; 0 < y|] \
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   146
\     ==> log a (x/y) = log a x - log a y";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   147
by (auto_tac (claset(),simpset() addsimps [log_mult,real_divide_def,
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   148
    log_inverse]));
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   149
qed "log_divide";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   150
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   151
Goal "[| 1 < a; 0 < x; 0 < y |] ==> (log a x < log a y) = (x < y)";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   152
by (Step_tac 1);
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   153
by (rtac powr_less_cancel 2);
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   154
by (dres_inst_tac [("a","log a x")] powr_less_mono 1);
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   155
by Auto_tac;
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   156
qed "log_less_cancel_iff";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   157
Addsimps [log_less_cancel_iff];
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   158
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   159
Goal "[| 1 < a; 0 < x; 0 < y |] ==> (log a x <= log a y) = (x <= y)";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   160
by (auto_tac (claset(),simpset() addsimps [real_le_def]));
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   161
qed "log_le_cancel_iff";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   162
Addsimps [log_le_cancel_iff];
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   163