src/HOL/Hyperreal/Log.ML
author paulson
Thu, 01 Jan 2004 10:06:32 +0100
changeset 14334 6137d24eef79
parent 14305 f17ca9f6dc8c
child 14365 3d4df8c166ae
permissions -rw-r--r--
tweaking of lemmas in RealDef, RealOrd
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,
14334
6137d24eef79 tweaking of lemmas in RealDef, RealOrd
paulson
parents: 14305
diff changeset
    28
    right_distrib]) 1);
12224
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)";
14334
6137d24eef79 tweaking of lemmas in RealDef, RealOrd
paulson
parents: 14305
diff changeset
    42
by (asm_simp_tac (simpset() addsimps [real_divide_def,positive_imp_inverse_positive, powr_mult]) 1);
12224
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    43
by (asm_simp_tac (simpset() addsimps [powr_def,exp_minus RS sym,
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    44
    exp_add RS sym,ln_inverse]) 1);
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    45
qed "powr_divide";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    46
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    47
Goalw [powr_def] "x powr (a + b) = (x powr a) * (x powr b)";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    48
by (asm_simp_tac (simpset() addsimps [exp_add RS sym,
14334
6137d24eef79 tweaking of lemmas in RealDef, RealOrd
paulson
parents: 14305
diff changeset
    49
    left_distrib]) 1);
12224
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    50
qed "powr_add";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    51
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    52
Goalw [powr_def] "(x powr a) powr b = x powr (a * b)";
14334
6137d24eef79 tweaking of lemmas in RealDef, RealOrd
paulson
parents: 14305
diff changeset
    53
by (simp_tac (simpset() addsimps mult_ac) 1);
12224
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    54
qed "powr_powr";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    55
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    56
Goal "(x powr a) powr b = (x powr b) powr a";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    57
by (simp_tac (simpset() addsimps [powr_powr,real_mult_commute]) 1);
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    58
qed "powr_powr_swap";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    59
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    60
Goalw [powr_def] "x powr (-a) = inverse (x powr a)";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    61
by (simp_tac (simpset() addsimps [exp_minus RS sym]) 1);
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    62
qed "powr_minus";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    63
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    64
Goalw [real_divide_def] "x powr (-a) = 1/(x powr a)";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    65
by (simp_tac (simpset() addsimps [powr_minus]) 1);
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    66
qed "powr_minus_divide";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    67
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    68
Goalw [powr_def] 
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    69
   "[| a < b; 1 < x |] ==> x powr a < x powr b";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    70
by Auto_tac;
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    71
qed "powr_less_mono";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    72
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    73
Goalw [powr_def] 
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    74
   "[| x powr a < x powr b; 1 < x |] ==> a < b";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    75
by (auto_tac (claset() addDs [ln_gt_zero],
14305
f17ca9f6dc8c tidying first part of HyperArith0.ML, using generic lemmas
paulson
parents: 12224
diff changeset
    76
              simpset() addsimps [mult_less_cancel_right]));
12224
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    77
qed "powr_less_cancel";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    78
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    79
Goal "1 < x ==> (x powr a < x powr b) = (a < b)";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    80
by (blast_tac (claset() addIs [powr_less_cancel,powr_less_mono]) 1);
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    81
qed "powr_less_cancel_iff";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    82
Addsimps [powr_less_cancel_iff];
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    83
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    84
Goalw [real_le_def] "1 < x ==> (x powr a <= x powr b) = (a <= b)";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    85
by (Auto_tac);
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    86
qed "powr_le_cancel_iff";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    87
Addsimps [powr_le_cancel_iff];
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    88
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    89
Goalw [log_def] "ln x = log (exp(1)) x";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    90
by (Simp_tac 1);
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    91
qed "log_ln";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    92
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    93
Goalw [powr_def,log_def] 
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    94
    "[| 0 < a; a ~= 1; 0 < x |] ==> a powr (log a x) = x";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    95
by Auto_tac;
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    96
qed "powr_log_cancel";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    97
Addsimps [powr_log_cancel];
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    98
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
    99
Goalw [log_def,powr_def] 
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   100
    "[| 0 < a; a ~= 1 |] ==> log a (a powr y) = y";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   101
by (auto_tac (claset(),simpset() addsimps [real_divide_def,
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   102
    real_mult_assoc]));
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   103
qed "log_powr_cancel";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   104
Addsimps [log_powr_cancel];
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   105
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   106
Goalw [log_def] 
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   107
     "[| 0 < a; a ~= 1; 0 < x; 0 < y  |] \
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   108
\     ==> log a (x * y) = log a x + log a y";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   109
by (auto_tac (claset(),simpset() addsimps [ln_mult,real_divide_def,
14334
6137d24eef79 tweaking of lemmas in RealDef, RealOrd
paulson
parents: 14305
diff changeset
   110
    left_distrib]));
12224
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   111
qed "log_mult";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   112
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   113
Goalw [log_def,real_divide_def]
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   114
     "[| 0 < a; a ~= 1; 0 < b; b ~= 1; 0 < x |] \
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   115
\     ==> log a x = (ln b/ln a) * log b x";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   116
by Auto_tac;
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   117
qed "log_eq_div_ln_mult_log";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   118
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   119
(* specific case *)
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   120
Goal "0 < x ==> log 10 x = (ln (exp 1) / ln 10) * ln x";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   121
by (auto_tac (claset(),simpset() addsimps [log_def]));
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   122
qed "log_base_10_eq1";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   123
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   124
Goal "0 < x ==> log 10 x = (log 10 (exp 1)) * ln x";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   125
by (auto_tac (claset(),simpset() addsimps [log_def]));
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   126
qed "log_base_10_eq2";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   127
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   128
Goalw [log_def] "log a 1 = 0";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   129
by Auto_tac;
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   130
qed "log_one";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   131
Addsimps [log_one];
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   132
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   133
Goalw [log_def] 
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   134
    "[| 0 < a; a ~= 1 |] ==> log a a = 1";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   135
by Auto_tac;
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   136
qed "log_eq_one";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   137
Addsimps [log_eq_one];
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   138
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   139
Goal "[| 0 < a; a ~= 1; 0 < x |] ==> log a (inverse x) = - log a x";
14334
6137d24eef79 tweaking of lemmas in RealDef, RealOrd
paulson
parents: 14305
diff changeset
   140
by (res_inst_tac [("a1","log a x")] (add_left_cancel RS iffD1) 1);
12224
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   141
by (auto_tac (claset(),simpset() addsimps [log_mult RS sym]));
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   142
qed "log_inverse";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   143
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   144
Goal "[|0 < a; a ~= 1; 0 < x; 0 < y|] \
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   145
\     ==> log a (x/y) = log a x - log a y";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   146
by (auto_tac (claset(),simpset() addsimps [log_mult,real_divide_def,
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   147
    log_inverse]));
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   148
qed "log_divide";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   149
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   150
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
   151
by (Step_tac 1);
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   152
by (rtac powr_less_cancel 2);
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   153
by (dres_inst_tac [("a","log a x")] powr_less_mono 1);
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   154
by Auto_tac;
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   155
qed "log_less_cancel_iff";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   156
Addsimps [log_less_cancel_iff];
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   157
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   158
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
   159
by (auto_tac (claset(),simpset() addsimps [real_le_def]));
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   160
qed "log_le_cancel_iff";
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   161
Addsimps [log_le_cancel_iff];
02df7cbe7d25 even more theories from Jacques
paulson
parents:
diff changeset
   162