src/HOL/Real/Real.ML
author paulson
Fri, 29 Jan 1999 16:26:12 +0100
changeset 6162 484adda70b65
parent 5588 a3ab526bb891
child 7077 60b098bb8b8a
permissions -rw-r--r--
expandshort
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
     1
(*  Title:      HOL/Real/Real.ML
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
     2
    ID:         $Id$
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
     3
    Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
     4
    Copyright   1998  University of Cambridge
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
     5
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
     6
Type "real" is a linear order
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
     7
*)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
     8
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
     9
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    10
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    11
(** lemma **)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    12
Goal "(0r < x) = (? y. x = %#y)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    13
by (auto_tac (claset(),simpset() addsimps [real_preal_zero_less]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    14
by (cut_inst_tac [("x","x")] real_preal_trichotomy 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    15
by (blast_tac (claset() addSEs [real_less_irrefl,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    16
     real_preal_not_minus_gt_zero RS notE]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    17
qed "real_gt_zero_preal_Ex";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    18
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
    19
Goal "%#z < x ==> ? y. x = %#y";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    20
by (blast_tac (claset() addSDs [real_preal_zero_less RS real_less_trans]
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    21
               addIs [real_gt_zero_preal_Ex RS iffD1]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    22
qed "real_gt_preal_preal_Ex";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    23
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
    24
Goal "%#z <= x ==> ? y. x = %#y";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    25
by (blast_tac (claset() addDs [real_le_imp_less_or_eq,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    26
              real_gt_preal_preal_Ex]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    27
qed "real_ge_preal_preal_Ex";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    28
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
    29
Goal "y <= 0r ==> !x. y < %#x";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    30
by (auto_tac (claset() addEs [real_le_imp_less_or_eq RS disjE]
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    31
              addIs [real_preal_zero_less RSN(2,real_less_trans)],
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    32
              simpset() addsimps [real_preal_zero_less]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    33
qed "real_less_all_preal";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    34
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
    35
Goal "~ 0r < y ==> !x. y < %#x";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    36
by (blast_tac (claset() addSIs [real_less_all_preal,real_leI]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    37
qed "real_less_all_real2";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    38
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
    39
Goal "((x::real) < y) = (-y < -x)";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    40
by (rtac (real_less_sum_gt_0_iff RS subst) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    41
by (res_inst_tac [("W1","x")] (real_less_sum_gt_0_iff RS subst) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    42
by (simp_tac (simpset() addsimps [real_add_commute]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    43
qed "real_less_swap_iff";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    44
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
    45
Goal "[| R + L = S; 0r < L |] ==> R < S";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    46
by (rtac (real_less_sum_gt_0_iff RS iffD1) 1);
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
    47
by (auto_tac (claset(), simpset() addsimps real_add_ac));
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    48
qed "real_lemma_add_positive_imp_less";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    49
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    50
Goal "!!(R::real). ? T. 0r < T & R + T = S ==> R < S";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    51
by (blast_tac (claset() addIs [real_lemma_add_positive_imp_less]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    52
qed "real_ex_add_positive_left_less";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    53
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
    54
(*Alternative definition for real_less.  NOT for rewriting*)
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
    55
Goal "!!(R::real). (R < S) = (? T. 0r < T & R + T = S)";
5459
1dbaf888f4e7 well-formed asym rules; misc. tidying
paulson
parents: 5184
diff changeset
    56
by (blast_tac (claset() addSIs [real_less_add_positive_left_Ex,
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
    57
				real_ex_add_positive_left_less]) 1);
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
    58
qed "real_less_iff_add";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    59
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
    60
Goal "(0r < x) = (-x < x)";
5459
1dbaf888f4e7 well-formed asym rules; misc. tidying
paulson
parents: 5184
diff changeset
    61
by Safe_tac;
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    62
by (rtac ccontr 2 THEN forward_tac 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    63
    [real_leI RS real_le_imp_less_or_eq] 2);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    64
by (Step_tac 2);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    65
by (dtac (real_minus_zero_less_iff RS iffD2) 2);
5459
1dbaf888f4e7 well-formed asym rules; misc. tidying
paulson
parents: 5184
diff changeset
    66
by (blast_tac (claset() addIs [real_less_trans]) 2);
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
    67
by (auto_tac (claset(),
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
    68
	      simpset() addsimps 
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
    69
	      [real_gt_zero_preal_Ex,real_preal_minus_less_self]));
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    70
qed "real_gt_zero_iff";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    71
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
    72
Goal "(x < 0r) = (x < -x)";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    73
by (rtac (real_minus_zero_less_iff RS subst) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    74
by (stac real_gt_zero_iff 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    75
by (Full_simp_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    76
qed "real_lt_zero_iff";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    77
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
    78
Goalw [real_le_def] "(0r <= x) = (-x <= x)";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    79
by (auto_tac (claset(),simpset() addsimps [real_lt_zero_iff RS sym]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    80
qed "real_ge_zero_iff";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    81
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
    82
Goalw [real_le_def] "(x <= 0r) = (x <= -x)";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    83
by (auto_tac (claset(),simpset() addsimps [real_gt_zero_iff RS sym]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    84
qed "real_le_zero_iff";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    85
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    86
Goal "(%#m1 <= %#m2) = (m1 <= m2)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    87
by (auto_tac (claset() addSIs [preal_leI],
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    88
    simpset() addsimps [real_less_le_iff RS sym]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    89
by (dtac preal_le_less_trans 1 THEN assume_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    90
by (etac preal_less_irrefl 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    91
qed "real_preal_le_iff";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    92
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    93
Goal "!!(x::real). [| 0r < x; 0r < y |] ==> 0r < x * y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    94
by (auto_tac (claset(),simpset() addsimps [real_gt_zero_preal_Ex]));  
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    95
by (res_inst_tac [("x","y*ya")] exI 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    96
by (full_simp_tac (simpset() addsimps [real_preal_mult]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    97
qed "real_mult_order";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    98
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    99
Goal "!!(x::real). [| x < 0r; y < 0r |] ==> 0r < x * y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   100
by (REPEAT(dtac (real_minus_zero_less_iff RS iffD2) 1));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   101
by (dtac real_mult_order 1 THEN assume_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   102
by (Asm_full_simp_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   103
qed "real_mult_less_zero1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   104
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   105
Goal "!!(x::real). [| 0r <= x; 0r <= y |] ==> 0r <= x * y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   106
by (REPEAT(dtac real_le_imp_less_or_eq 1));
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   107
by (auto_tac (claset() addIs [real_mult_order, real_less_imp_le],
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   108
	      simpset()));
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   109
qed "real_le_mult_order";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   110
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   111
Goal "!!(x::real). [| x <= 0r; y <= 0r |] ==> 0r <= x * y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   112
by (rtac real_less_or_eq_imp_le 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   113
by (dtac real_le_imp_less_or_eq 1 THEN etac disjE 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   114
by Auto_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   115
by (dtac real_le_imp_less_or_eq 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   116
by (auto_tac (claset() addDs [real_mult_less_zero1],simpset()));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   117
qed "real_mult_le_zero1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   118
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   119
Goal "!!(x::real). [| 0r <= x; y < 0r |] ==> x * y <= 0r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   120
by (rtac real_less_or_eq_imp_le 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   121
by (dtac real_le_imp_less_or_eq 1 THEN etac disjE 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   122
by Auto_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   123
by (dtac (real_minus_zero_less_iff RS iffD2) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   124
by (rtac (real_minus_zero_less_iff RS subst) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   125
by (blast_tac (claset() addDs [real_mult_order] 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   126
    addIs [real_minus_mult_eq2 RS ssubst]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   127
qed "real_mult_le_zero";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   128
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   129
Goal "!!(x::real). [| 0r < x; y < 0r |] ==> x*y < 0r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   130
by (dtac (real_minus_zero_less_iff RS iffD2) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   131
by (dtac real_mult_order 1 THEN assume_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   132
by (rtac (real_minus_zero_less_iff RS iffD1) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   133
by (asm_full_simp_tac (simpset() addsimps [real_minus_mult_eq2]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   134
qed "real_mult_less_zero";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   135
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   136
Goalw [real_one_def] "0r < 1r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   137
by (auto_tac (claset() addIs [real_gt_zero_preal_Ex RS iffD2],
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   138
    simpset() addsimps [real_preal_def]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   139
qed "real_zero_less_one";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   140
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   141
(*** Completeness of reals ***)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   142
(** use supremum property of preal and theorems about real_preal **)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   143
              (*** a few lemmas ***)
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   144
Goal "! x:P. 0r < x ==> ((? x:P. y < x) = (? X. %#X : P & y < %#X))";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   145
by (blast_tac (claset() addSDs [bspec,real_gt_zero_preal_Ex RS iffD1]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   146
qed "real_sup_lemma1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   147
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   148
Goal "[| ! x:P. 0r < x; ? x. x: P; ? y. !x: P. x < y |] \
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   149
\         ==> (? X. X: {w. %#w : P}) & (? Y. !X: {w. %#w : P}. X < Y)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   150
by (rtac conjI 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   151
by (blast_tac (claset() addDs [bspec,real_gt_zero_preal_Ex RS iffD1]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   152
by Auto_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   153
by (dtac bspec 1 THEN assume_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   154
by (forward_tac [bspec] 1  THEN assume_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   155
by (dtac real_less_trans 1 THEN assume_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   156
by (dtac (real_gt_zero_preal_Ex RS iffD1) 1 THEN etac exE 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   157
by (res_inst_tac [("x","ya")] exI 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   158
by Auto_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   159
by (dres_inst_tac [("x","%#X")] bspec 1 THEN assume_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   160
by (etac real_preal_lessD 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   161
qed "real_sup_lemma2";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   162
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   163
(*-------------------------------------------------------------
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   164
            Completeness of Positive Reals
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   165
 -------------------------------------------------------------*)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   166
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   167
(* Supremum property for the set of positive reals *)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   168
(* FIXME: long proof - can be improved - need only have one case split *)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   169
(* will do for now *)
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   170
Goal "[| ! x:P. 0r < x; ? x. x: P; ? y. !x: P. x < y |] \
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   171
\         ==> (? S. !y. (? x: P. y < x) = (y < S))";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   172
by (res_inst_tac [("x","%#psup({w. %#w : P})")] exI 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   173
by Auto_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   174
by (forward_tac [real_sup_lemma2] 1 THEN Auto_tac);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   175
by (case_tac "0r < ya" 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   176
by (dtac (real_gt_zero_preal_Ex RS iffD1) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   177
by (dtac real_less_all_real2 2);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   178
by Auto_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   179
by (rtac (preal_complete RS spec RS iffD1) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   180
by Auto_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   181
by (forward_tac [real_gt_preal_preal_Ex] 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   182
by Auto_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   183
(* second part *)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   184
by (rtac (real_sup_lemma1 RS iffD2) 1 THEN assume_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   185
by (case_tac "0r < ya" 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   186
by (auto_tac (claset() addSDs [real_less_all_real2,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   187
        real_gt_zero_preal_Ex RS iffD1],simpset()));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   188
by (forward_tac [real_sup_lemma2] 2 THEN Auto_tac);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   189
by (forward_tac [real_sup_lemma2] 1 THEN Auto_tac);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   190
by (rtac (preal_complete RS spec RS iffD2 RS bexE) 1);
5459
1dbaf888f4e7 well-formed asym rules; misc. tidying
paulson
parents: 5184
diff changeset
   191
by (Blast_tac 3);
1dbaf888f4e7 well-formed asym rules; misc. tidying
paulson
parents: 5184
diff changeset
   192
by (Blast_tac 1);
1dbaf888f4e7 well-formed asym rules; misc. tidying
paulson
parents: 5184
diff changeset
   193
by (Blast_tac 1);
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   194
by (Blast_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   195
qed "posreal_complete";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   196
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   197
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   198
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   199
(*** Monotonicity results ***)
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   200
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   201
Goal "(v+z < w+z) = (v < (w::real))";
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   202
by (Simp_tac 1);
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   203
qed "real_add_right_cancel_less";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   204
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   205
Goal "(z+v < z+w) = (v < (w::real))";
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   206
by (Simp_tac 1);
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   207
qed "real_add_left_cancel_less";
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   208
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   209
Addsimps [real_add_right_cancel_less, real_add_left_cancel_less];
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   210
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   211
Goal "(v+z <= w+z) = (v <= (w::real))";
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   212
by (Simp_tac 1);
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   213
qed "real_add_right_cancel_le";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   214
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   215
Goal "(z+v <= z+w) = (v <= (w::real))";
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   216
by (Simp_tac 1);
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   217
qed "real_add_left_cancel_le";
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   218
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   219
Addsimps [real_add_right_cancel_le, real_add_left_cancel_le];
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   220
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   221
(*"v<=w ==> v+z <= w+z"*)
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   222
bind_thm ("real_add_less_mono1", real_add_right_cancel_less RS iffD2);
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   223
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   224
(*"v<=w ==> v+z <= w+z"*)
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   225
bind_thm ("real_add_le_mono1", real_add_right_cancel_le RS iffD2);
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   226
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   227
Goal "!!z z'::real. [| w'<w; z'<=z |] ==> w' + z' < w + z";
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   228
by (etac (real_add_less_mono1 RS real_less_le_trans) 1);
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   229
by (Simp_tac 1);
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   230
qed "real_add_less_mono";
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   231
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   232
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   233
Goal "!!(A::real). A < B ==> C + A < C + B";
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   234
by (Simp_tac 1);
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   235
qed "real_add_less_mono2";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   236
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   237
Goal "!!(A::real). A + C < B + C ==> A < B";
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   238
by (Full_simp_tac 1);
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   239
qed "real_less_add_right_cancel";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   240
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   241
Goal "!!(A::real). C + A < C + B ==> A < B";
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   242
by (Full_simp_tac 1);
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   243
qed "real_less_add_left_cancel";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   244
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   245
Goal "[| 0r < x; 0r < y |] ==> 0r < x + y";
6162
484adda70b65 expandshort
paulson
parents: 5588
diff changeset
   246
by (etac real_less_trans 1);
484adda70b65 expandshort
paulson
parents: 5588
diff changeset
   247
by (dtac real_add_less_mono2 1);
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   248
by (Full_simp_tac 1);
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   249
qed "real_add_order";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   250
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   251
Goal "!!(x::real). [| 0r <= x; 0r <= y |] ==> 0r <= x + y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   252
by (REPEAT(dtac real_le_imp_less_or_eq 1));
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   253
by (auto_tac (claset() addIs [real_add_order, real_less_imp_le],
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   254
	      simpset()));
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   255
qed "real_le_add_order";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   256
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   257
Goal "[| R1 < S1; R2 < S2 |] ==> R1 + R2 < S1 + (S2::real)";
6162
484adda70b65 expandshort
paulson
parents: 5588
diff changeset
   258
by (dtac real_add_less_mono1 1);
484adda70b65 expandshort
paulson
parents: 5588
diff changeset
   259
by (etac real_less_trans 1);
484adda70b65 expandshort
paulson
parents: 5588
diff changeset
   260
by (etac real_add_less_mono2 1);
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   261
qed "real_add_less_mono";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   262
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   263
Goal "!!(q1::real). q1 <= q2  ==> x + q1 <= x + q2";
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   264
by (Simp_tac 1);
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   265
qed "real_add_left_le_mono1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   266
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   267
Goal "[|i<=j;  k<=l |] ==> i + k <= j + (l::real)";
6162
484adda70b65 expandshort
paulson
parents: 5588
diff changeset
   268
by (dtac real_add_le_mono1 1);
484adda70b65 expandshort
paulson
parents: 5588
diff changeset
   269
by (etac real_le_trans 1);
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   270
by (Simp_tac 1);
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   271
qed "real_add_le_mono";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   272
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   273
Goal "EX (x::real). x < y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   274
by (rtac (real_add_zero_right RS subst) 1);
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   275
by (res_inst_tac [("x","y + -1r")] exI 1);
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   276
by (auto_tac (claset() addSIs [real_add_less_mono2],
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   277
	  simpset() addsimps [real_minus_zero_less_iff2, real_zero_less_one]));
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   278
qed "real_less_Ex";
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   279
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   280
(*---------------------------------------------------------------------------------
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   281
             An embedding of the naturals in the reals
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   282
 ---------------------------------------------------------------------------------*)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   283
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   284
Goalw [real_nat_def] "%%#0 = 1r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   285
by (full_simp_tac (simpset() addsimps [pnat_one_iff RS sym,real_preal_def]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   286
by (fold_tac [real_one_def]);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   287
by (rtac refl 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   288
qed "real_nat_one";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   289
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   290
Goalw [real_nat_def] "%%#1 = 1r + 1r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   291
by (full_simp_tac (simpset() addsimps [real_preal_def,real_one_def,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   292
    pnat_two_eq,real_add,prat_pnat_add RS sym,preal_prat_add RS sym
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   293
    ] @ pnat_add_ac) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   294
qed "real_nat_two";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   295
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   296
Goalw [real_nat_def]
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   297
          "%%#n1 + %%#n2 = %%#(n1 + n2) + 1r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   298
by (full_simp_tac (simpset() addsimps [real_nat_one RS sym,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   299
    real_nat_def,real_preal_add RS sym,preal_prat_add RS sym,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   300
    prat_pnat_add RS sym,pnat_nat_add]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   301
qed "real_nat_add";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   302
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   303
Goal "%%#(n + 1) = %%#n + 1r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   304
by (res_inst_tac [("x1","1r")] (real_add_right_cancel RS iffD1) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   305
by (rtac (real_nat_add RS subst) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   306
by (full_simp_tac (simpset() addsimps [real_nat_two,real_add_assoc]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   307
qed "real_nat_add_one";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   308
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   309
Goal "Suc n = n + 1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   310
by Auto_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   311
qed "lemma";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   312
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   313
Goal "%%#Suc n = %%#n + 1r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   314
by (stac lemma 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   315
by (rtac real_nat_add_one 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   316
qed "real_nat_Suc";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   317
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   318
Goal "inj(real_nat)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   319
by (rtac injI 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   320
by (rewtac real_nat_def);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   321
by (dtac (inj_real_preal RS injD) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   322
by (dtac (inj_preal_prat RS injD) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   323
by (dtac (inj_prat_pnat RS injD) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   324
by (etac (inj_pnat_nat RS injD) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   325
qed "inj_real_nat";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   326
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   327
Goalw [real_nat_def] "0r < %%#n";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   328
by (rtac (real_gt_zero_preal_Ex RS iffD2) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   329
by (Blast_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   330
qed "real_nat_less_zero";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   331
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   332
Goal "1r <= %%#n";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   333
by (simp_tac (simpset() addsimps [real_nat_one RS sym]) 1);
5184
9b8547a9496a Adapted to new datatype package.
berghofe
parents: 5148
diff changeset
   334
by (induct_tac "n" 1);
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   335
by (auto_tac (claset(),
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   336
	      simpset () addsimps [real_nat_Suc,real_nat_one,
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   337
				   real_nat_less_zero, real_less_imp_le]));
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   338
qed "real_nat_less_one";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   339
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   340
Goal "rinv(%%#n) ~= 0r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   341
by (rtac ((real_nat_less_zero RS 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   342
    real_not_refl2 RS not_sym) RS rinv_not_zero) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   343
qed "real_nat_rinv_not_zero";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   344
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   345
Goal "rinv(%%#x) = rinv(%%#y) ==> x = y";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   346
by (rtac (inj_real_nat RS injD) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   347
by (res_inst_tac [("n2","x")] 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   348
    (real_nat_rinv_not_zero RS real_mult_left_cancel RS iffD1) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   349
by (full_simp_tac (simpset() addsimps [(real_nat_less_zero RS 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   350
    real_not_refl2 RS not_sym) RS real_mult_inv_left]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   351
by (asm_full_simp_tac (simpset() addsimps [(real_nat_less_zero RS 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   352
    real_not_refl2 RS not_sym)]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   353
qed "real_nat_rinv_inj";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   354
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   355
Goal "0r < x ==> 0r < rinv x";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   356
by (EVERY1[rtac ccontr, dtac real_leI]);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   357
by (forward_tac [real_minus_zero_less_iff2 RS iffD2] 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   358
by (forward_tac [real_not_refl2 RS not_sym] 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   359
by (dtac (real_not_refl2 RS not_sym RS rinv_not_zero) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   360
by (EVERY1[dtac real_le_imp_less_or_eq, Step_tac]); 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   361
by (dtac real_mult_less_zero1 1 THEN assume_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   362
by (auto_tac (claset() addIs [real_zero_less_one RS real_less_asym],
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   363
    simpset() addsimps [real_minus_mult_eq1 RS sym]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   364
qed "real_rinv_gt_zero";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   365
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   366
Goal "x < 0r ==> rinv x < 0r";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   367
by (forward_tac [real_not_refl2] 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   368
by (dtac (real_minus_zero_less_iff RS iffD2) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   369
by (rtac (real_minus_zero_less_iff RS iffD1) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   370
by (dtac (real_minus_rinv RS sym) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   371
by (auto_tac (claset() addIs [real_rinv_gt_zero],
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   372
    simpset()));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   373
qed "real_rinv_less_zero";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   374
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   375
Goal "x+x=x*(1r+1r)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   376
by (simp_tac (simpset() addsimps [real_add_mult_distrib2]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   377
qed "real_add_self";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   378
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   379
Goal "x < x + 1r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   380
by (rtac (real_less_sum_gt_0_iff RS iffD1) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   381
by (full_simp_tac (simpset() addsimps [real_zero_less_one,
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   382
				real_add_assoc, real_add_left_commute]) 1);
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   383
qed "real_self_less_add_one";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   384
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   385
Goal "1r < 1r + 1r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   386
by (rtac real_self_less_add_one 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   387
qed "real_one_less_two";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   388
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   389
Goal "0r < 1r + 1r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   390
by (rtac ([real_zero_less_one,
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   391
	   real_one_less_two] MRS real_less_trans) 1);
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   392
qed "real_zero_less_two";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   393
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   394
Goal "1r + 1r ~= 0r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   395
by (rtac (real_zero_less_two RS real_not_refl2 RS not_sym) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   396
qed "real_two_not_zero";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   397
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   398
Addsimps [real_two_not_zero];
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   399
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   400
Goal "x*rinv(1r + 1r) + x*rinv(1r + 1r) = x";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   401
by (stac real_add_self 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   402
by (full_simp_tac (simpset() addsimps [real_mult_assoc]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   403
qed "real_sum_of_halves";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   404
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   405
Goal "!!(x::real). [| 0r<z; x<y |] ==> x*z<y*z";       
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   406
by (rotate_tac 1 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   407
by (dtac real_less_sum_gt_zero 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   408
by (rtac real_sum_gt_zero_less 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   409
by (dtac real_mult_order 1 THEN assume_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   410
by (asm_full_simp_tac (simpset() addsimps [real_add_mult_distrib2,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   411
    real_minus_mult_eq2 RS sym, real_mult_commute ]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   412
qed "real_mult_less_mono1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   413
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   414
Goal "!!(y::real). [| 0r<z; x<y |] ==> z*x<z*y";       
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   415
by (asm_simp_tac (simpset() addsimps [real_mult_commute,real_mult_less_mono1]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   416
qed "real_mult_less_mono2";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   417
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   418
Goal "!!(x::real). [| 0r<z; x*z<y*z |] ==> x<y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   419
by (forw_inst_tac [("x","x*z")] (real_rinv_gt_zero 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   420
                       RS real_mult_less_mono1) 1);
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   421
by (auto_tac (claset(),
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   422
	      simpset() addsimps 
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   423
     [real_mult_assoc,real_not_refl2 RS not_sym]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   424
qed "real_mult_less_cancel1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   425
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   426
Goal "!!(x::real). [| 0r<z; z*x<z*y |] ==> x<y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   427
by (etac real_mult_less_cancel1 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   428
by (asm_full_simp_tac (simpset() addsimps [real_mult_commute]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   429
qed "real_mult_less_cancel2";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   430
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   431
Goal "0r < z ==> (x*z < y*z) = (x < y)";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   432
by (blast_tac (claset() addIs [real_mult_less_mono1,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   433
    real_mult_less_cancel1]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   434
qed "real_mult_less_iff1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   435
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   436
Goal "0r < z ==> (z*x < z*y) = (x < y)";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   437
by (blast_tac (claset() addIs [real_mult_less_mono2,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   438
    real_mult_less_cancel2]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   439
qed "real_mult_less_iff2";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   440
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   441
Addsimps [real_mult_less_iff1,real_mult_less_iff2];
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   442
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   443
Goal "!!(x::real). [| 0r<=z; x<y |] ==> x*z<=y*z";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   444
by (EVERY1 [rtac real_less_or_eq_imp_le, dtac real_le_imp_less_or_eq]);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   445
by (auto_tac (claset() addIs [real_mult_less_mono1],simpset()));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   446
qed "real_mult_le_less_mono1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   447
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   448
Goal "!!(x::real). [| 0r<=z; x<y |] ==> z*x<=z*y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   449
by (asm_simp_tac (simpset() addsimps [real_mult_commute,real_mult_le_less_mono1]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   450
qed "real_mult_le_less_mono2";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   451
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   452
Goal "!!x y (z::real). [| 0r<=z; x<=y |] ==> z*x<=z*y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   453
by (dres_inst_tac [("x","x")] real_le_imp_less_or_eq 1);
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   454
by (auto_tac (claset() addIs [real_mult_le_less_mono2], simpset()));
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   455
qed "real_mult_le_le_mono1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   456
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   457
Goal "!!(x::real). x < y ==> x < (x + y)*rinv(1r + 1r)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   458
by (dres_inst_tac [("C","x")] real_add_less_mono2 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   459
by (dtac (real_add_self RS subst) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   460
by (dtac (real_zero_less_two RS real_rinv_gt_zero RS 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   461
          real_mult_less_mono1) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   462
by (asm_full_simp_tac (simpset() addsimps [real_mult_assoc]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   463
qed "real_less_half_sum";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   464
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   465
Goal "!!(x::real). x < y ==> (x + y)*rinv(1r + 1r) < y";
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   466
by (dtac real_add_less_mono1 1);
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   467
by (dtac (real_add_self RS subst) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   468
by (dtac (real_zero_less_two RS real_rinv_gt_zero RS 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   469
          real_mult_less_mono1) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   470
by (asm_full_simp_tac (simpset() addsimps [real_mult_assoc]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   471
qed "real_gt_half_sum";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   472
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   473
Goal "!!(x::real). x < y ==> EX r. x < r & r < y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   474
by (blast_tac (claset() addSIs [real_less_half_sum,real_gt_half_sum]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   475
qed "real_dense";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   476
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   477
Goal "(EX n. rinv(%%#n) < r) = (EX n. 1r < r * %%#n)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   478
by (Step_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   479
by (dres_inst_tac [("n1","n")] (real_nat_less_zero 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   480
                       RS real_mult_less_mono1) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   481
by (dres_inst_tac [("n2","n")] (real_nat_less_zero RS 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   482
        real_rinv_gt_zero RS real_mult_less_mono1) 2);
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   483
by (auto_tac (claset(),
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   484
	      simpset() addsimps [(real_nat_less_zero RS 
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   485
    real_not_refl2 RS not_sym),real_mult_assoc]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   486
qed "real_nat_rinv_Ex_iff";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   487
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   488
Goalw [real_nat_def] "(%%#n < %%#m) = (n < m)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   489
by Auto_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   490
qed "real_nat_less_iff";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   491
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   492
Addsimps [real_nat_less_iff];
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   493
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   494
Goal "0r < u  ==> (u < rinv (%%#n)) = (%%#n < rinv(u))";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   495
by (Step_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   496
by (res_inst_tac [("n2","n")] (real_nat_less_zero RS 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   497
    real_rinv_gt_zero RS real_mult_less_cancel1) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   498
by (res_inst_tac [("x1","u")] ( real_rinv_gt_zero
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   499
   RS real_mult_less_cancel1) 2);
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   500
by (auto_tac (claset(),
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   501
	      simpset() addsimps [real_nat_less_zero, 
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   502
    real_not_refl2 RS not_sym]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   503
by (res_inst_tac [("z","u")] real_mult_less_cancel2 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   504
by (res_inst_tac [("n1","n")] (real_nat_less_zero RS 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   505
    real_mult_less_cancel2) 3);
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   506
by (auto_tac (claset(),
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   507
	      simpset() addsimps [real_nat_less_zero, 
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   508
    real_not_refl2 RS not_sym,real_mult_assoc RS sym]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   509
qed "real_nat_less_rinv_iff";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   510
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   511
Goal "0r < u ==> (u = rinv(%%#n)) = (%%#n = rinv u)";
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   512
by (auto_tac (claset(),
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   513
	      simpset() addsimps [real_rinv_rinv,
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   514
    real_nat_less_zero,real_not_refl2 RS not_sym]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   515
qed "real_nat_rinv_eq_iff";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   516
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   517
(*
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   518
(*------------------------------------------------------------------
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   519
     lemmas about upper bounds and least upper bound
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   520
 ------------------------------------------------------------------*)
5148
74919e8f221c More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5143
diff changeset
   521
Goalw [real_ub_def] "[| real_ub u S; x : S |] ==> x <= u";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   522
by Auto_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   523
qed "real_ubD";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   524
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   525
*)
5588
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   526
a3ab526bb891 Revised version with Abelian group simprocs
paulson
parents: 5535
diff changeset
   527