src/HOL/Real/RealOrd.ML
author paulson
Wed, 19 Apr 2000 11:13:31 +0200
changeset 8742 8a5b3f58b944
parent 7562 8519d5019309
child 8856 435187ffc64e
permissions -rw-r--r--
deleted obsolete lemma_not_leI2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7334
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
     1
(*  Title:       HOL/Real/Real.ML
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
     2
    ID:          $Id$
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
     3
    Author:      Lawrence C. Paulson
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
     4
                 Jacques D. Fleuriot
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
     5
    Copyright:   1998  University of Cambridge
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
     6
    Description: Type "real" is a linear order
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
     7
*)
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
     8
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
     9
Goal "(0r < x) = (? y. x = real_of_preal y)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    10
by (auto_tac (claset(), simpset() addsimps [real_of_preal_zero_less]));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    11
by (cut_inst_tac [("x","x")] real_of_preal_trichotomy 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    12
by (blast_tac (claset() addSEs [real_less_irrefl,
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    13
				real_of_preal_not_minus_gt_zero RS notE]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    14
qed "real_gt_zero_preal_Ex";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    15
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    16
Goal "real_of_preal z < x ==> ? y. x = real_of_preal y";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    17
by (blast_tac (claset() addSDs [real_of_preal_zero_less RS real_less_trans]
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    18
               addIs [real_gt_zero_preal_Ex RS iffD1]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    19
qed "real_gt_preal_preal_Ex";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    20
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    21
Goal "real_of_preal z <= x ==> ? y. x = real_of_preal y";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    22
by (blast_tac (claset() addDs [real_le_imp_less_or_eq,
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    23
			       real_gt_preal_preal_Ex]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    24
qed "real_ge_preal_preal_Ex";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    25
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    26
Goal "y <= 0r ==> !x. y < real_of_preal x";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    27
by (auto_tac (claset() addEs [real_le_imp_less_or_eq RS disjE]
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    28
                       addIs [real_of_preal_zero_less RSN(2,real_less_trans)],
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    29
              simpset() addsimps [real_of_preal_zero_less]));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    30
qed "real_less_all_preal";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    31
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    32
Goal "~ 0r < y ==> !x. y < real_of_preal x";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    33
by (blast_tac (claset() addSIs [real_less_all_preal,real_leI]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    34
qed "real_less_all_real2";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    35
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    36
Goal "((x::real) < y) = (-y < -x)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    37
by (rtac (real_less_sum_gt_0_iff RS subst) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    38
by (res_inst_tac [("W1","x")] (real_less_sum_gt_0_iff RS subst) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    39
by (simp_tac (simpset() addsimps [real_add_commute]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    40
qed "real_less_swap_iff";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    41
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    42
Goal "[| R + L = S; 0r < L |] ==> R < S";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    43
by (rtac (real_less_sum_gt_0_iff RS iffD1) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    44
by (auto_tac (claset(), simpset() addsimps real_add_ac));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    45
qed "real_lemma_add_positive_imp_less";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    46
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    47
Goal "? T. 0r < T & R + T = S ==> R < S";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    48
by (blast_tac (claset() addIs [real_lemma_add_positive_imp_less]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    49
qed "real_ex_add_positive_left_less";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    50
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    51
(*Alternative definition for real_less.  NOT for rewriting*)
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    52
Goal "(R < S) = (? T. 0r < T & R + T = S)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    53
by (blast_tac (claset() addSIs [real_less_add_positive_left_Ex,
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    54
				real_ex_add_positive_left_less]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    55
qed "real_less_iff_add";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    56
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    57
Goal "(0r < x) = (-x < x)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    58
by Safe_tac;
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    59
by (rtac ccontr 2 THEN forward_tac 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    60
    [real_leI RS real_le_imp_less_or_eq] 2);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    61
by (Step_tac 2);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    62
by (dtac (real_minus_zero_less_iff RS iffD2) 2);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    63
by (blast_tac (claset() addIs [real_less_trans]) 2);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    64
by (auto_tac (claset(),
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    65
	      simpset() addsimps 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    66
 	        [real_gt_zero_preal_Ex,real_of_preal_minus_less_self]));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    67
qed "real_gt_zero_iff";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    68
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    69
Goal "(x < 0r) = (x < -x)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    70
by (rtac (real_minus_zero_less_iff RS subst) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    71
by (stac real_gt_zero_iff 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    72
by (Full_simp_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    73
qed "real_lt_zero_iff";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    74
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    75
Goalw [real_le_def] "(0r <= x) = (-x <= x)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    76
by (auto_tac (claset(), simpset() addsimps [real_lt_zero_iff RS sym]));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    77
qed "real_ge_zero_iff";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    78
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    79
Goalw [real_le_def] "(x <= 0r) = (x <= -x)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    80
by (auto_tac (claset(), simpset() addsimps [real_gt_zero_iff RS sym]));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    81
qed "real_le_zero_iff";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    82
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    83
Goal "(real_of_preal m1 <= real_of_preal m2) = (m1 <= m2)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    84
by (auto_tac (claset() addSIs [preal_leI],
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    85
    simpset() addsimps [real_less_le_iff RS sym]));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    86
by (dtac preal_le_less_trans 1 THEN assume_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    87
by (etac preal_less_irrefl 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    88
qed "real_of_preal_le_iff";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    89
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    90
Goal "[| 0r < x; 0r < y |] ==> 0r < x * y";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    91
by (auto_tac (claset(), simpset() addsimps [real_gt_zero_preal_Ex]));  
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    92
by (res_inst_tac [("x","y*ya")] exI 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    93
by (full_simp_tac (simpset() addsimps [real_of_preal_mult]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    94
qed "real_mult_order";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    95
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    96
Goal "[| x < 0r; y < 0r |] ==> 0r < x * y";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    97
by (REPEAT(dtac (real_minus_zero_less_iff RS iffD2) 1));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    98
by (dtac real_mult_order 1 THEN assume_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
    99
by (Asm_full_simp_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   100
qed "real_mult_less_zero1";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   101
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   102
Goal "[| 0r <= x; 0r <= y |] ==> 0r <= x * y";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   103
by (REPEAT(dtac real_le_imp_less_or_eq 1));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   104
by (auto_tac (claset() addIs [real_mult_order, real_less_imp_le],
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   105
	      simpset()));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   106
qed "real_le_mult_order";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   107
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   108
Goal "[| 0r < x; 0r <= y |] ==> 0r <= x * y";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   109
by (dtac real_le_imp_less_or_eq 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   110
by (auto_tac (claset() addIs [real_mult_order,
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   111
			      real_less_imp_le],simpset()));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   112
qed "real_less_le_mult_order";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   113
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   114
Goal "[| x <= 0r; y <= 0r |] ==> 0r <= x * y";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   115
by (rtac real_less_or_eq_imp_le 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   116
by (dtac real_le_imp_less_or_eq 1 THEN etac disjE 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   117
by Auto_tac;
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   118
by (dtac real_le_imp_less_or_eq 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   119
by (auto_tac (claset() addDs [real_mult_less_zero1],simpset()));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   120
qed "real_mult_le_zero1";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   121
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   122
Goal "[| 0r <= x; y < 0r |] ==> x * y <= 0r";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   123
by (rtac real_less_or_eq_imp_le 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   124
by (dtac real_le_imp_less_or_eq 1 THEN etac disjE 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   125
by Auto_tac;
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   126
by (dtac (real_minus_zero_less_iff RS iffD2) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   127
by (rtac (real_minus_zero_less_iff RS subst) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   128
by (blast_tac (claset() addDs [real_mult_order] 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   129
	                addIs [real_minus_mult_eq2 RS ssubst]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   130
qed "real_mult_le_zero";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   131
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   132
Goal "[| 0r < x; y < 0r |] ==> x*y < 0r";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   133
by (dtac (real_minus_zero_less_iff RS iffD2) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   134
by (dtac real_mult_order 1 THEN assume_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   135
by (rtac (real_minus_zero_less_iff RS iffD1) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   136
by (asm_full_simp_tac (simpset() addsimps [real_minus_mult_eq2]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   137
qed "real_mult_less_zero";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   138
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   139
Goalw [real_one_def] "0r < 1r";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   140
by (auto_tac (claset() addIs [real_gt_zero_preal_Ex RS iffD2],
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   141
	      simpset() addsimps [real_of_preal_def]));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   142
qed "real_zero_less_one";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   143
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   144
(*** Monotonicity results ***)
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   145
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   146
Goal "(v+z < w+z) = (v < (w::real))";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   147
by (Simp_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   148
qed "real_add_right_cancel_less";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   149
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   150
Goal "(z+v < z+w) = (v < (w::real))";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   151
by (Simp_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   152
qed "real_add_left_cancel_less";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   153
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   154
Addsimps [real_add_right_cancel_less, real_add_left_cancel_less];
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   155
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   156
Goal "(v+z <= w+z) = (v <= (w::real))";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   157
by (Simp_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   158
qed "real_add_right_cancel_le";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   159
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   160
Goal "(z+v <= z+w) = (v <= (w::real))";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   161
by (Simp_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   162
qed "real_add_left_cancel_le";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   163
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   164
Addsimps [real_add_right_cancel_le, real_add_left_cancel_le];
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   165
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   166
(*"v<=w ==> v+z <= w+z"*)
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   167
bind_thm ("real_add_less_mono1", real_add_right_cancel_less RS iffD2);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   168
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   169
(*"v<=w ==> v+z <= w+z"*)
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   170
bind_thm ("real_add_le_mono1", real_add_right_cancel_le RS iffD2);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   171
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   172
Goal "!!z z'::real. [| w'<w; z'<=z |] ==> w' + z' < w + z";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   173
by (etac (real_add_less_mono1 RS real_less_le_trans) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   174
by (Simp_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   175
qed "real_add_less_le_mono";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   176
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   177
Goal "!!z z'::real. [| w'<=w; z'<z |] ==> w' + z' < w + z";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   178
by (etac (real_add_le_mono1 RS real_le_less_trans) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   179
by (Simp_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   180
qed "real_add_le_less_mono";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   181
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   182
Goal "!!(A::real). A < B ==> C + A < C + B";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   183
by (Simp_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   184
qed "real_add_less_mono2";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   185
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   186
Goal "!!(A::real). A + C < B + C ==> A < B";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   187
by (Full_simp_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   188
qed "real_less_add_right_cancel";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   189
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   190
Goal "!!(A::real). C + A < C + B ==> A < B";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   191
by (Full_simp_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   192
qed "real_less_add_left_cancel";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   193
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   194
Goal "!!(A::real). A + C <= B + C ==> A <= B";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   195
by (Full_simp_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   196
qed "real_le_add_right_cancel";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   197
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   198
Goal "!!(A::real). C + A <= C + B ==> A <= B";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   199
by (Full_simp_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   200
qed "real_le_add_left_cancel";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   201
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   202
Goal "[| 0r < x; 0r < y |] ==> 0r < x + y";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   203
by (etac real_less_trans 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   204
by (dtac real_add_less_mono2 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   205
by (Full_simp_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   206
qed "real_add_order";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   207
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   208
Goal "[| 0r <= x; 0r <= y |] ==> 0r <= x + y";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   209
by (REPEAT(dtac real_le_imp_less_or_eq 1));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   210
by (auto_tac (claset() addIs [real_add_order, real_less_imp_le],
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   211
	      simpset()));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   212
qed "real_le_add_order";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   213
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   214
Goal "[| R1 < S1; R2 < S2 |] ==> R1 + R2 < S1 + (S2::real)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   215
by (dtac real_add_less_mono1 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   216
by (etac real_less_trans 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   217
by (etac real_add_less_mono2 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   218
qed "real_add_less_mono";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   219
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   220
Goal "!!(q1::real). q1 <= q2  ==> x + q1 <= x + q2";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   221
by (Simp_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   222
qed "real_add_left_le_mono1";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   223
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   224
Goal "[|i<=j;  k<=l |] ==> i + k <= j + (l::real)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   225
by (dtac real_add_le_mono1 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   226
by (etac real_le_trans 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   227
by (Simp_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   228
qed "real_add_le_mono";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   229
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   230
Goal "EX (x::real). x < y";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   231
by (rtac (real_add_zero_right RS subst) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   232
by (res_inst_tac [("x","y + (-1r)")] exI 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   233
by (auto_tac (claset() addSIs [real_add_less_mono2],
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   234
	  simpset() addsimps [real_minus_zero_less_iff2, real_zero_less_one]));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   235
qed "real_less_Ex";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   236
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   237
Goal "0r < r ==>  u + (-r) < u";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   238
by (res_inst_tac [("C","r")] real_less_add_right_cancel 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   239
by (simp_tac (simpset() addsimps [real_add_assoc]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   240
qed "real_add_minus_positive_less_self";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   241
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   242
Goal "((r::real) <= s) = (-s <= -r)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   243
by (Step_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   244
by (dres_inst_tac [("x","-s")] real_add_left_le_mono1 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   245
by (dres_inst_tac [("x","r")] real_add_left_le_mono1 2);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   246
by Auto_tac;
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   247
by (dres_inst_tac [("z","-r")] real_add_le_mono1 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   248
by (dres_inst_tac [("z","s")] real_add_le_mono1 2);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   249
by (auto_tac (claset(), simpset() addsimps [real_add_assoc]));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   250
qed "real_le_minus_iff";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   251
Addsimps [real_le_minus_iff RS sym];
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   252
          
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   253
Goal "0r <= 1r";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   254
by (rtac (real_zero_less_one RS real_less_imp_le) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   255
qed "real_zero_le_one";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   256
Addsimps [real_zero_le_one];
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   257
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   258
Goal "0r <= x*x";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   259
by (res_inst_tac [("R2.0","0r"),("R1.0","x")] real_linear_less2 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   260
by (auto_tac (claset() addIs [real_mult_order,
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   261
			      real_mult_less_zero1,real_less_imp_le],
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   262
	      simpset()));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   263
qed "real_le_square";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   264
Addsimps [real_le_square];
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   265
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   266
(*----------------------------------------------------------------------------
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   267
             An embedding of the naturals in the reals
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   268
 ----------------------------------------------------------------------------*)
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   269
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   270
Goalw [real_of_posnat_def] "real_of_posnat 0 = 1r";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   271
by (full_simp_tac (simpset() addsimps [pnat_one_iff RS sym,real_of_preal_def]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   272
by (fold_tac [real_one_def]);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   273
by (rtac refl 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   274
qed "real_of_posnat_one";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   275
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   276
Goalw [real_of_posnat_def] "real_of_posnat 1 = 1r + 1r";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   277
by (full_simp_tac (simpset() addsimps [real_of_preal_def,real_one_def,
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   278
    pnat_two_eq,real_add,prat_of_pnat_add RS sym,preal_of_prat_add RS sym
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   279
    ] @ pnat_add_ac) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   280
qed "real_of_posnat_two";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   281
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   282
Goalw [real_of_posnat_def]
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   283
    "real_of_posnat n1 + real_of_posnat n2 = real_of_posnat (n1 + n2) + 1r";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   284
by (full_simp_tac (simpset() addsimps [real_of_posnat_one RS sym,
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   285
    real_of_posnat_def,real_of_preal_add RS sym,preal_of_prat_add RS sym,
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   286
    prat_of_pnat_add RS sym,pnat_of_nat_add]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   287
qed "real_of_posnat_add";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   288
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   289
Goal "real_of_posnat (n + 1) = real_of_posnat n + 1r";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   290
by (res_inst_tac [("x1","1r")] (real_add_right_cancel RS iffD1) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   291
by (rtac (real_of_posnat_add RS subst) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   292
by (full_simp_tac (simpset() addsimps [real_of_posnat_two,real_add_assoc]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   293
qed "real_of_posnat_add_one";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   294
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   295
Goal "real_of_posnat (Suc n) = real_of_posnat n + 1r";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   296
by (stac (real_of_posnat_add_one RS sym) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   297
by (Simp_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   298
qed "real_of_posnat_Suc";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   299
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   300
Goal "inj(real_of_posnat)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   301
by (rtac injI 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   302
by (rewtac real_of_posnat_def);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   303
by (dtac (inj_real_of_preal RS injD) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   304
by (dtac (inj_preal_of_prat RS injD) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   305
by (dtac (inj_prat_of_pnat RS injD) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   306
by (etac (inj_pnat_of_nat RS injD) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   307
qed "inj_real_of_posnat";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   308
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   309
Goalw [real_of_posnat_def] "0r < real_of_posnat n";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   310
by (rtac (real_gt_zero_preal_Ex RS iffD2) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   311
by (Blast_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   312
qed "real_of_posnat_less_zero";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   313
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   314
Goal "real_of_posnat n ~= 0r";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   315
by (rtac (real_of_posnat_less_zero RS real_not_refl2 RS not_sym) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   316
qed "real_of_posnat_not_eq_zero";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   317
Addsimps[real_of_posnat_not_eq_zero];
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   318
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   319
Goal "1r <= real_of_posnat n";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   320
by (simp_tac (simpset() addsimps [real_of_posnat_one RS sym]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   321
by (induct_tac "n" 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   322
by (auto_tac (claset(),
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   323
	      simpset () addsimps [real_of_posnat_Suc,real_of_posnat_one,
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   324
			   real_of_posnat_less_zero, real_less_imp_le]));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   325
qed "real_of_posnat_less_one";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   326
Addsimps [real_of_posnat_less_one];
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   327
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   328
Goal "rinv(real_of_posnat n) ~= 0r";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   329
by (rtac ((real_of_posnat_less_zero RS 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   330
    real_not_refl2 RS not_sym) RS rinv_not_zero) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   331
qed "real_of_posnat_rinv_not_zero";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   332
Addsimps [real_of_posnat_rinv_not_zero];
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   333
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   334
Goal "rinv(real_of_posnat x) = rinv(real_of_posnat y) ==> x = y";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   335
by (rtac (inj_real_of_posnat RS injD) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   336
by (res_inst_tac [("n2","x")] 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   337
    (real_of_posnat_rinv_not_zero RS real_mult_left_cancel RS iffD1) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   338
by (full_simp_tac (simpset() addsimps [(real_of_posnat_less_zero RS 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   339
    real_not_refl2 RS not_sym) RS real_mult_inv_left]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   340
by (asm_full_simp_tac (simpset() addsimps [(real_of_posnat_less_zero RS 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   341
    real_not_refl2 RS not_sym)]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   342
qed "real_of_posnat_rinv_inj";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   343
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   344
Goal "0r < x ==> 0r < rinv x";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   345
by (EVERY1[rtac ccontr, dtac real_leI]);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   346
by (forward_tac [real_minus_zero_less_iff2 RS iffD2] 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   347
by (forward_tac [real_not_refl2 RS not_sym] 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   348
by (dtac (real_not_refl2 RS not_sym RS rinv_not_zero) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   349
by (EVERY1[dtac real_le_imp_less_or_eq, Step_tac]); 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   350
by (dtac real_mult_less_zero1 1 THEN assume_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   351
by (auto_tac (claset() addIs [real_zero_less_one RS real_less_asym],
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   352
	      simpset() addsimps [real_minus_mult_eq1 RS sym]));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   353
qed "real_rinv_gt_zero";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   354
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   355
Goal "x < 0r ==> rinv x < 0r";
7499
23e090051cb8 isatool expandshort;
wenzelm
parents: 7334
diff changeset
   356
by (ftac real_not_refl2 1);
7334
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   357
by (dtac (real_minus_zero_less_iff RS iffD2) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   358
by (rtac (real_minus_zero_less_iff RS iffD1) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   359
by (dtac (real_minus_rinv RS sym) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   360
by (auto_tac (claset() addIs [real_rinv_gt_zero], simpset()));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   361
qed "real_rinv_less_zero";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   362
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   363
Goal "0r < rinv(real_of_posnat n)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   364
by (rtac (real_of_posnat_less_zero RS real_rinv_gt_zero) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   365
qed "real_of_posnat_rinv_gt_zero";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   366
Addsimps [real_of_posnat_rinv_gt_zero];
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   367
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   368
Goal "x+x = x*(1r+1r)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   369
by (simp_tac (simpset() addsimps 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   370
              [real_add_mult_distrib2]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   371
qed "real_add_self";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   372
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   373
Goal "x < x + 1r";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   374
by (rtac (real_less_sum_gt_0_iff RS iffD1) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   375
by (full_simp_tac (simpset() addsimps [real_zero_less_one,
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   376
				real_add_assoc, real_add_left_commute]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   377
qed "real_self_less_add_one";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   378
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   379
Goal "1r < 1r + 1r";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   380
by (rtac real_self_less_add_one 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   381
qed "real_one_less_two";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   382
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   383
Goal "0r < 1r + 1r";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   384
by (rtac ([real_zero_less_one,
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   385
	   real_one_less_two] MRS real_less_trans) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   386
qed "real_zero_less_two";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   387
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   388
Goal "1r + 1r ~= 0r";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   389
by (rtac (real_zero_less_two RS real_not_refl2 RS not_sym) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   390
qed "real_two_not_zero";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   391
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   392
Addsimps [real_two_not_zero];
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   393
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   394
Goal "x*rinv(1r + 1r) + x*rinv(1r + 1r) = x";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   395
by (stac real_add_self 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   396
by (full_simp_tac (simpset() addsimps [real_mult_assoc]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   397
qed "real_sum_of_halves";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   398
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   399
Goal "[| 0r<z; x<y |] ==> x*z<y*z";       
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   400
by (rotate_tac 1 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   401
by (dtac real_less_sum_gt_zero 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   402
by (rtac real_sum_gt_zero_less 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   403
by (dtac real_mult_order 1 THEN assume_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   404
by (asm_full_simp_tac (simpset() addsimps [real_add_mult_distrib2,
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   405
    real_minus_mult_eq2 RS sym, real_mult_commute ]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   406
qed "real_mult_less_mono1";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   407
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   408
Goal "[| 0r<z; x<y |] ==> z*x<z*y";       
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   409
by (asm_simp_tac (simpset() addsimps [real_mult_commute,real_mult_less_mono1]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   410
qed "real_mult_less_mono2";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   411
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   412
Goal "[| 0r<z; x*z<y*z |] ==> x<y";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   413
by (forw_inst_tac [("x","x*z")] (real_rinv_gt_zero 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   414
                       RS real_mult_less_mono1) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   415
by (auto_tac (claset(),
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   416
	      simpset() addsimps 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   417
     [real_mult_assoc,real_not_refl2 RS not_sym]));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   418
qed "real_mult_less_cancel1";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   419
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   420
Goal "[| 0r<z; z*x<z*y |] ==> x<y";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   421
by (etac real_mult_less_cancel1 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   422
by (asm_full_simp_tac (simpset() addsimps [real_mult_commute]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   423
qed "real_mult_less_cancel2";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   424
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   425
Goal "0r < z ==> (x*z < y*z) = (x < y)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   426
by (blast_tac (claset() addIs [real_mult_less_mono1,
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   427
    real_mult_less_cancel1]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   428
qed "real_mult_less_iff1";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   429
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   430
Goal "0r < z ==> (z*x < z*y) = (x < y)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   431
by (blast_tac (claset() addIs [real_mult_less_mono2,
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   432
    real_mult_less_cancel2]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   433
qed "real_mult_less_iff2";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   434
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   435
Addsimps [real_mult_less_iff1,real_mult_less_iff2];
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   436
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   437
Goal "[| 0r<=z; x<y |] ==> x*z<=y*z";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   438
by (EVERY1 [rtac real_less_or_eq_imp_le, dtac real_le_imp_less_or_eq]);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   439
by (auto_tac (claset() addIs [real_mult_less_mono1],simpset()));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   440
qed "real_mult_le_less_mono1";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   441
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   442
Goal "[| 0r<=z; x<y |] ==> z*x<=z*y";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   443
by (asm_simp_tac (simpset() addsimps [real_mult_commute,real_mult_le_less_mono1]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   444
qed "real_mult_le_less_mono2";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   445
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   446
Goal "[| 0r<=z; x<=y |] ==> z*x<=z*y";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   447
by (dres_inst_tac [("x","x")] real_le_imp_less_or_eq 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   448
by (auto_tac (claset() addIs [real_mult_le_less_mono2], simpset()));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   449
qed "real_mult_le_le_mono1";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   450
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   451
Goal "[| 0r < r1; r1 <r2; 0r < x; x < y|] ==> r1 * x < r2 * y";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   452
by (dres_inst_tac [("x","x")] real_mult_less_mono2 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   453
by (dres_inst_tac [("R1.0","0r")] real_less_trans 2);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   454
by (dres_inst_tac [("x","r1")] real_mult_less_mono1 3);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   455
by Auto_tac;
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   456
by (blast_tac (claset() addIs [real_less_trans]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   457
qed "real_mult_less_mono";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   458
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   459
Goal "[| 0r < r1; r1 <r2; 0r < y|] ==> 0r < r2 * y";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   460
by (dres_inst_tac [("R1.0","0r")] real_less_trans 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   461
by (assume_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   462
by (blast_tac (claset() addIs [real_mult_order]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   463
qed "real_mult_order_trans";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   464
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   465
Goal "[| 0r < r1; r1 <r2; 0r <= x; x < y|] ==> r1 * x < r2 * y";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   466
by (auto_tac (claset() addSDs [real_le_imp_less_or_eq] 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   467
	               addIs [real_mult_less_mono,real_mult_order_trans],
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   468
              simpset()));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   469
qed "real_mult_less_mono3";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   470
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   471
Goal "[| 0r <= r1; r1 <r2; 0r <= x; x < y|] ==> r1 * x < r2 * y";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   472
by (auto_tac (claset() addSDs [real_le_imp_less_or_eq] 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   473
	               addIs [real_mult_less_mono,real_mult_order_trans,
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   474
			      real_mult_order],
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   475
	      simpset()));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   476
by (dres_inst_tac [("R2.0","x")] real_less_trans 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   477
by (assume_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   478
by (blast_tac (claset() addIs [real_mult_order]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   479
qed "real_mult_less_mono4";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   480
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   481
Goal "[| 0r < r1; r1 <= r2; 0r <= x; x <= y |] ==> r1 * x <= r2 * y";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   482
by (rtac real_less_or_eq_imp_le 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   483
by (REPEAT(dtac real_le_imp_less_or_eq 1));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   484
by (auto_tac (claset() addIs [real_mult_less_mono,
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   485
			      real_mult_order_trans,real_mult_order],
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   486
	      simpset()));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   487
qed "real_mult_le_mono";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   488
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   489
Goal "[| 0r < r1; r1 < r2; 0r <= x; x <= y |] ==> r1 * x <= r2 * y";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   490
by (rtac real_less_or_eq_imp_le 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   491
by (REPEAT(dtac real_le_imp_less_or_eq 1));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   492
by (auto_tac (claset() addIs [real_mult_less_mono, real_mult_order_trans,
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   493
			      real_mult_order],
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   494
	      simpset()));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   495
qed "real_mult_le_mono2";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   496
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   497
Goal "[| 0r <= r1; r1 < r2; 0r <= x; x <= y |] ==> r1 * x <= r2 * y";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   498
by (dtac real_le_imp_less_or_eq 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   499
by (auto_tac (claset() addIs [real_mult_le_mono2],simpset()));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   500
by (dtac real_le_trans 1 THEN assume_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   501
by (auto_tac (claset() addIs [real_less_le_mult_order], simpset()));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   502
qed "real_mult_le_mono3";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   503
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   504
Goal "[| 0r <= r1; r1 <= r2; 0r <= x; x <= y |] ==> r1 * x <= r2 * y";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   505
by (dres_inst_tac [("x","r1")] real_le_imp_less_or_eq 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   506
by (auto_tac (claset() addIs [real_mult_le_mono3, real_mult_le_le_mono1],
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   507
	      simpset()));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   508
qed "real_mult_le_mono4";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   509
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   510
Goal "1r <= x ==> 0r < x";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   511
by (rtac ccontr 1 THEN dtac real_leI 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   512
by (dtac real_le_trans 1 THEN assume_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   513
by (auto_tac (claset() addDs [real_zero_less_one RSN (2,real_le_less_trans)],
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   514
	      simpset() addsimps [real_less_not_refl]));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   515
qed "real_gt_zero";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   516
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   517
Goal "[| 1r < r; 1r <= x |]  ==> x <= r * x";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   518
by (dtac (real_gt_zero RS real_less_imp_le) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   519
by (auto_tac (claset() addSDs [real_mult_le_less_mono1],
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   520
    simpset()));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   521
qed "real_mult_self_le";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   522
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   523
Goal "[| 1r <= r; 1r <= x |]  ==> x <= r * x";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   524
by (dtac real_le_imp_less_or_eq 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   525
by (auto_tac (claset() addIs [real_mult_self_le],
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   526
	      simpset() addsimps [real_le_refl]));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   527
qed "real_mult_self_le2";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   528
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   529
Goal "x < y ==> x < (x + y)*rinv(1r + 1r)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   530
by (dres_inst_tac [("C","x")] real_add_less_mono2 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   531
by (dtac (real_add_self RS subst) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   532
by (dtac (real_zero_less_two RS real_rinv_gt_zero RS 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   533
          real_mult_less_mono1) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   534
by (asm_full_simp_tac (simpset() addsimps [real_mult_assoc]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   535
qed "real_less_half_sum";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   536
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   537
Goal "x < y ==> (x + y)*rinv(1r + 1r) < y";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   538
by (dtac real_add_less_mono1 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   539
by (dtac (real_add_self RS subst) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   540
by (dtac (real_zero_less_two RS real_rinv_gt_zero RS 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   541
          real_mult_less_mono1) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   542
by (asm_full_simp_tac (simpset() addsimps [real_mult_assoc]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   543
qed "real_gt_half_sum";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   544
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   545
Goal "x < y ==> EX r::real. x < r & r < y";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   546
by (blast_tac (claset() addSIs [real_less_half_sum,
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   547
				real_gt_half_sum]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   548
qed "real_dense";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   549
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   550
Goal "(EX n. rinv(real_of_posnat n) < r) = (EX n. 1r < r * real_of_posnat n)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   551
by (Step_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   552
by (dres_inst_tac [("n1","n")] (real_of_posnat_less_zero 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   553
				RS real_mult_less_mono1) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   554
by (dres_inst_tac [("n2","n")] (real_of_posnat_less_zero RS 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   555
				real_rinv_gt_zero RS real_mult_less_mono1) 2);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   556
by (auto_tac (claset(),
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   557
	      simpset() addsimps [(real_of_posnat_less_zero RS 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   558
				   real_not_refl2 RS not_sym),
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   559
				  real_mult_assoc]));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   560
qed "real_of_posnat_rinv_Ex_iff";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   561
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   562
Goal "(rinv(real_of_posnat n) < r) = (1r < r * real_of_posnat n)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   563
by (Step_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   564
by (dres_inst_tac [("n1","n")] (real_of_posnat_less_zero 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   565
                       RS real_mult_less_mono1) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   566
by (dres_inst_tac [("n2","n")] (real_of_posnat_less_zero RS 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   567
				real_rinv_gt_zero RS real_mult_less_mono1) 2);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   568
by (auto_tac (claset(), simpset() addsimps [real_mult_assoc]));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   569
qed "real_of_posnat_rinv_iff";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   570
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   571
Goal "(rinv(real_of_posnat n) <= r) = (1r <= r * real_of_posnat n)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   572
by (Step_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   573
by (dres_inst_tac [("n2","n")] (real_of_posnat_less_zero RS 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   574
    real_less_imp_le RS real_mult_le_le_mono1) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   575
by (dres_inst_tac [("n3","n")] (real_of_posnat_less_zero RS 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   576
        real_rinv_gt_zero RS real_less_imp_le RS 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   577
        real_mult_le_le_mono1) 2);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   578
by (auto_tac (claset(), simpset() addsimps real_mult_ac));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   579
qed "real_of_posnat_rinv_le_iff";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   580
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   581
Goalw [real_of_posnat_def] "(real_of_posnat n < real_of_posnat m) = (n < m)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   582
by Auto_tac;
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   583
qed "real_of_posnat_less_iff";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   584
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   585
Addsimps [real_of_posnat_less_iff];
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   586
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   587
Goal "0r < u  ==> (u < rinv (real_of_posnat n)) = (real_of_posnat n < rinv(u))";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   588
by (Step_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   589
by (res_inst_tac [("n2","n")] (real_of_posnat_less_zero RS 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   590
    real_rinv_gt_zero RS real_mult_less_cancel1) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   591
by (res_inst_tac [("x1","u")] ( real_rinv_gt_zero
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   592
   RS real_mult_less_cancel1) 2);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   593
by (auto_tac (claset(),
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   594
	      simpset() addsimps [real_of_posnat_less_zero, 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   595
    real_not_refl2 RS not_sym]));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   596
by (res_inst_tac [("z","u")] real_mult_less_cancel2 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   597
by (res_inst_tac [("n1","n")] (real_of_posnat_less_zero RS 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   598
    real_mult_less_cancel2) 3);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   599
by (auto_tac (claset(),
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   600
	      simpset() addsimps [real_of_posnat_less_zero, 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   601
    real_not_refl2 RS not_sym,real_mult_assoc RS sym]));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   602
qed "real_of_posnat_less_rinv_iff";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   603
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   604
Goal "0r < u ==> (u = rinv(real_of_posnat n)) = (real_of_posnat n = rinv u)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   605
by (auto_tac (claset(),
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   606
	      simpset() addsimps [real_rinv_rinv,
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   607
    real_of_posnat_less_zero,real_not_refl2 RS not_sym]));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   608
qed "real_of_posnat_rinv_eq_iff";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   609
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   610
Goal "[| 0r < r; r < x |] ==> rinv x < rinv r";
7499
23e090051cb8 isatool expandshort;
wenzelm
parents: 7334
diff changeset
   611
by (ftac real_less_trans 1 THEN assume_tac 1);
23e090051cb8 isatool expandshort;
wenzelm
parents: 7334
diff changeset
   612
by (ftac real_rinv_gt_zero 1);
7334
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   613
by (forw_inst_tac [("x","x")] real_rinv_gt_zero 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   614
by (forw_inst_tac [("x","r"),("z","rinv r")] real_mult_less_mono1 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   615
by (assume_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   616
by (asm_full_simp_tac (simpset() addsimps [real_not_refl2 RS 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   617
					   not_sym RS real_mult_inv_right]) 1);
7499
23e090051cb8 isatool expandshort;
wenzelm
parents: 7334
diff changeset
   618
by (ftac real_rinv_gt_zero 1);
7334
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   619
by (forw_inst_tac [("x","1r"),("z","rinv x")] real_mult_less_mono2 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   620
by (assume_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   621
by (asm_full_simp_tac (simpset() addsimps [real_not_refl2 RS 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   622
         not_sym RS real_mult_inv_left,real_mult_assoc RS sym]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   623
qed "real_rinv_less_swap";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   624
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   625
Goal "[| 0r < r; 0r < x|] ==> (r < x) = (rinv x < rinv r)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   626
by (auto_tac (claset() addIs [real_rinv_less_swap],simpset()));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   627
by (res_inst_tac [("t","r")] (real_rinv_rinv RS subst) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   628
by (etac (real_not_refl2 RS not_sym) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   629
by (res_inst_tac [("t","x")] (real_rinv_rinv RS subst) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   630
by (etac (real_not_refl2 RS not_sym) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   631
by (auto_tac (claset() addIs [real_rinv_less_swap],
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   632
	      simpset() addsimps [real_rinv_gt_zero]));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   633
qed "real_rinv_less_iff";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   634
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   635
Goal "r < r + rinv(real_of_posnat n)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   636
by (res_inst_tac [("C","-r")] real_less_add_left_cancel 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   637
by (full_simp_tac (simpset() addsimps [real_add_assoc RS sym]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   638
qed "real_add_rinv_real_of_posnat_less";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   639
Addsimps [real_add_rinv_real_of_posnat_less];
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   640
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   641
Goal "r <= r + rinv(real_of_posnat n)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   642
by (rtac real_less_imp_le 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   643
by (Simp_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   644
qed "real_add_rinv_real_of_posnat_le";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   645
Addsimps [real_add_rinv_real_of_posnat_le];
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   646
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   647
Goal "r + (-rinv(real_of_posnat n)) < r";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   648
by (res_inst_tac [("C","-r")] real_less_add_left_cancel 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   649
by (full_simp_tac (simpset() addsimps [real_add_assoc RS sym,
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   650
				       real_minus_zero_less_iff2]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   651
qed "real_add_minus_rinv_real_of_posnat_less";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   652
Addsimps [real_add_minus_rinv_real_of_posnat_less];
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   653
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   654
Goal "r + (-rinv(real_of_posnat n)) <= r";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   655
by (rtac real_less_imp_le 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   656
by (Simp_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   657
qed "real_add_minus_rinv_real_of_posnat_le";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   658
Addsimps [real_add_minus_rinv_real_of_posnat_le];
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   659
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   660
Goal "0r < r ==> r*(1r + (-rinv(real_of_posnat n))) < r";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   661
by (simp_tac (simpset() addsimps [real_add_mult_distrib2]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   662
by (res_inst_tac [("C","-r")] real_less_add_left_cancel 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   663
by (auto_tac (claset() addIs [real_mult_order],
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   664
	      simpset() addsimps [real_add_assoc RS sym,
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   665
				  real_minus_mult_eq2 RS sym,
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   666
				  real_minus_zero_less_iff2]));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   667
qed "real_mult_less_self";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   668
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   669
Goal "0r <= 1r + (-rinv(real_of_posnat n))";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   670
by (res_inst_tac [("C","rinv(real_of_posnat n)")] real_le_add_right_cancel 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   671
by (simp_tac (simpset() addsimps [real_add_assoc,
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   672
				  real_of_posnat_rinv_le_iff]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   673
qed "real_add_one_minus_rinv_ge_zero";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   674
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   675
Goal "0r < r ==> 0r <= r*(1r + (-rinv(real_of_posnat n)))";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   676
by (dtac (real_add_one_minus_rinv_ge_zero RS real_mult_le_less_mono1) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   677
by Auto_tac;
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   678
qed "real_mult_add_one_minus_ge_zero";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   679
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   680
Goal "x*y = 0r ==> x = 0r | y = 0r";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   681
by (auto_tac (claset() addIs [ccontr] addDs [real_mult_not_zero],
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   682
	      simpset()));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   683
qed "real_mult_zero_disj";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   684
 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   685
Goal "x + x*y = x*(1r + y)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   686
by (simp_tac (simpset() addsimps [real_add_mult_distrib2]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   687
qed "real_add_mult_distrib_one";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   688
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   689
Goal "[| x ~= 1r; y * x = y |] ==> y = 0r";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   690
by (dtac (sym RS (real_eq_minus_iff RS iffD1)) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   691
by (dtac sym 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   692
by (asm_full_simp_tac (simpset() addsimps [real_minus_mult_eq2,
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   693
    real_add_mult_distrib_one]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   694
by (dtac real_mult_zero_disj 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   695
by (auto_tac (claset(),
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   696
	      simpset() addsimps [real_eq_minus_iff2 RS sym]));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   697
qed "real_mult_eq_self_zero";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   698
Addsimps [real_mult_eq_self_zero];
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   699
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   700
Goal "[| x ~= 1r; y = y * x |] ==> y = 0r";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   701
by (dtac sym 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   702
by (Asm_full_simp_tac 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   703
qed "real_mult_eq_self_zero2";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   704
Addsimps [real_mult_eq_self_zero2];
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   705
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   706
Goal "[| 0r <= x*y; 0r < x |] ==> 0r <= y";
7499
23e090051cb8 isatool expandshort;
wenzelm
parents: 7334
diff changeset
   707
by (ftac real_rinv_gt_zero 1);
7334
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   708
by (dres_inst_tac [("x","rinv x")] real_less_le_mult_order 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   709
by (dtac (real_not_refl2 RS not_sym RS real_mult_inv_left) 2);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   710
by (auto_tac (claset(),
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   711
	      simpset() addsimps [real_mult_assoc RS sym]));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   712
qed "real_mult_ge_zero_cancel";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   713
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   714
Goal "[|x ~= 0r; y ~= 0r |] ==> rinv(x) + rinv(y) = (x + y)*rinv(x*y)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   715
by (asm_full_simp_tac (simpset() addsimps 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   716
		       [real_rinv_distrib,real_add_mult_distrib,
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   717
			real_mult_assoc RS sym]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   718
by (stac real_mult_assoc 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   719
by (rtac (real_mult_left_commute RS subst) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   720
by (asm_full_simp_tac (simpset() addsimps [real_add_commute]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   721
qed "real_rinv_add";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   722
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   723
(*----------------------------------------------------------------------------
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   724
     Another embedding of the naturals in the reals (see real_of_posnat)
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   725
 ----------------------------------------------------------------------------*)
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   726
Goalw [real_of_nat_def] "real_of_nat 0 = 0r";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   727
by (full_simp_tac (simpset() addsimps [real_of_posnat_one]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   728
qed "real_of_nat_zero";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   729
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   730
Goalw [real_of_nat_def] "real_of_nat 1 = 1r";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   731
by (full_simp_tac (simpset() addsimps [real_of_posnat_two,
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   732
    real_add_assoc]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   733
qed "real_of_nat_one";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   734
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   735
Goalw [real_of_nat_def]
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   736
          "real_of_nat n1 + real_of_nat n2 = real_of_nat (n1 + n2)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   737
by (simp_tac (simpset() addsimps 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   738
    [real_of_posnat_add,real_add_assoc RS sym]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   739
qed "real_of_nat_add";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   740
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   741
Goalw [real_of_nat_def] "real_of_nat (Suc n) = real_of_nat n + 1r";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   742
by (simp_tac (simpset() addsimps [real_of_posnat_Suc] @ real_add_ac) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   743
qed "real_of_nat_Suc";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   744
    
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   745
Goalw [real_of_nat_def] "(n < m) = (real_of_nat n < real_of_nat m)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   746
by Auto_tac;
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   747
qed "real_of_nat_less_iff";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   748
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   749
Addsimps [real_of_nat_less_iff RS sym];
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   750
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   751
Goal "inj real_of_nat";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   752
by (rtac injI 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   753
by (auto_tac (claset() addSIs [inj_real_of_posnat RS injD],
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   754
	      simpset() addsimps [real_of_nat_def,real_add_right_cancel]));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   755
qed "inj_real_of_nat";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   756
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   757
Goalw [real_of_nat_def] "0r <= real_of_nat n";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   758
by (res_inst_tac [("C","1r")] real_le_add_right_cancel 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   759
by (asm_full_simp_tac (simpset() addsimps [real_add_assoc]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   760
qed "real_of_nat_ge_zero";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   761
Addsimps [real_of_nat_ge_zero];
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   762
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   763
Goal "real_of_nat n1 * real_of_nat n2 = real_of_nat (n1 * n2)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   764
by (induct_tac "n1" 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   765
by (dtac sym 2);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   766
by (auto_tac (claset(),
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   767
	      simpset() addsimps [real_of_nat_zero,
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   768
				  real_of_nat_add RS sym,real_of_nat_Suc,
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   769
				  real_add_mult_distrib, real_add_commute]));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   770
qed "real_of_nat_mult";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   771
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   772
Goal "(real_of_nat n = real_of_nat m) = (n = m)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   773
by (auto_tac (claset() addDs [inj_real_of_nat RS injD],
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   774
              simpset()));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   775
qed "real_of_nat_eq_cancel";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   776
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   777
(*------- lemmas -------*)
7562
wenzelm
parents: 7499
diff changeset
   778
context NatDef.thy;
wenzelm
parents: 7499
diff changeset
   779
wenzelm
parents: 7499
diff changeset
   780
Goal "!!m. [| m < Suc n; n <= m |] ==> m = n";
7334
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   781
by (auto_tac (claset() addSDs [le_imp_less_or_eq] addIs [less_asym],
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   782
	      simpset() addsimps [less_Suc_eq]));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   783
qed "lemma_nat_not_dense";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   784
7562
wenzelm
parents: 7499
diff changeset
   785
Goal "!!m. [| m <= Suc n; n < m |] ==> m = Suc n";
7334
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   786
by (auto_tac (claset() addSDs [le_imp_less_or_eq] addIs [less_asym],
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   787
	      simpset() addsimps [le_Suc_eq]));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   788
qed "lemma_nat_not_dense2";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   789
7562
wenzelm
parents: 7499
diff changeset
   790
Goal "!!m. m < Suc n ==> ~ Suc n <= m";
7334
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   791
by (blast_tac (claset() addDs [less_le_trans] addIs [less_asym]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   792
qed "lemma_not_leI";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   793
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   794
(*------- lemmas -------*)
7562
wenzelm
parents: 7499
diff changeset
   795
context Arith.thy;
wenzelm
parents: 7499
diff changeset
   796
wenzelm
parents: 7499
diff changeset
   797
Goal "n < Suc(m) ==> Suc(m)-n = Suc(m-n)";
wenzelm
parents: 7499
diff changeset
   798
by (dtac rev_mp 1);
7334
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   799
by (res_inst_tac [("m","m"),("n","n")] diff_induct 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   800
by (ALLGOALS Asm_simp_tac);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   801
qed "Suc_diff_n";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   802
7562
wenzelm
parents: 7499
diff changeset
   803
wenzelm
parents: 7499
diff changeset
   804
context thy;
wenzelm
parents: 7499
diff changeset
   805
7334
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   806
(* Goalw  [real_of_nat_def] 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   807
   "real_of_nat (n1 - n2) = real_of_nat n1 + -real_of_nat n2";*)
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   808
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   809
Goal "n2 < n1 --> real_of_nat (n1 - n2) = real_of_nat n1 + (-real_of_nat n2)";
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   810
by (induct_tac "n1" 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   811
by (Step_tac 1 THEN dtac leI 1 THEN dtac sym 2);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   812
by (dtac lemma_nat_not_dense 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   813
by (auto_tac (claset(),
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   814
	      simpset() addsimps [real_of_nat_Suc, real_of_nat_zero] @ 
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   815
	                         real_add_ac));
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   816
by (asm_full_simp_tac (simpset() addsimps [real_of_nat_one RS sym,
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   817
					   real_of_nat_add,Suc_diff_n]) 1);
a90fc1e5fb19 Real/Real.thy main entry point;
wenzelm
parents:
diff changeset
   818
qed "real_of_nat_minus";