src/HOL/Real/Real.ML
author paulson
Wed, 05 Aug 1998 10:57:25 +0200
changeset 5253 82a5ca6290aa
parent 5184 9b8547a9496a
child 5459 1dbaf888f4e7
permissions -rw-r--r--
New record type of programs
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
     1
(*  Title       : Real.ML
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
     2
    Author      : Jacques D. Fleuriot
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
     3
    Copyright   : 1998  University of Cambridge
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
     4
    Description : The reals
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
     5
*)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
     6
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
     7
open Real;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
     8
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
     9
(*** Proving that realrel is an equivalence relation ***)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    10
5148
74919e8f221c More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5143
diff changeset
    11
Goal "[| (x1::preal) + y2 = x2 + y1; x2 + y3 = x3 + y2 |] \
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    12
\            ==> x1 + y3 = x3 + y1";        
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    13
by (res_inst_tac [("C","y2")] preal_add_right_cancel 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    14
by (rotate_tac 1 1 THEN dtac sym 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    15
by (asm_full_simp_tac (simpset() addsimps preal_add_ac) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    16
by (rtac (preal_add_left_commute RS subst) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    17
by (res_inst_tac [("x1","x1")] (preal_add_assoc RS subst) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    18
by (asm_full_simp_tac (simpset() addsimps preal_add_ac) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    19
qed "preal_trans_lemma";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    20
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    21
(** Natural deduction for realrel **)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    22
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    23
Goalw [realrel_def]
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    24
    "(((x1,y1),(x2,y2)): realrel) = (x1 + y2 = x2 + y1)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    25
by (Fast_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    26
qed "realrel_iff";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    27
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    28
Goalw [realrel_def]
5148
74919e8f221c More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5143
diff changeset
    29
    "[| x1 + y2 = x2 + y1 |] ==> ((x1,y1),(x2,y2)): realrel";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    30
by (Fast_tac  1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    31
qed "realrelI";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    32
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    33
Goalw [realrel_def]
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    34
  "p: realrel --> (EX x1 y1 x2 y2. \
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    35
\                  p = ((x1,y1),(x2,y2)) & x1 + y2 = x2 + y1)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    36
by (Fast_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    37
qed "realrelE_lemma";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    38
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    39
val [major,minor] = goal thy
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    40
  "[| p: realrel;  \
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    41
\     !!x1 y1 x2 y2. [| p = ((x1,y1),(x2,y2));  x1+y2 = x2+y1 \
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    42
\                    |] ==> Q |] ==> Q";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    43
by (cut_facts_tac [major RS (realrelE_lemma RS mp)] 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    44
by (REPEAT (eresolve_tac [asm_rl,exE,conjE,minor] 1));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    45
qed "realrelE";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    46
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    47
AddSIs [realrelI];
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    48
AddSEs [realrelE];
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    49
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    50
Goal "(x,x): realrel";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    51
by (stac surjective_pairing 1 THEN rtac (refl RS realrelI) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    52
qed "realrel_refl";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    53
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    54
Goalw [equiv_def, refl_def, sym_def, trans_def]
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    55
    "equiv {x::(preal*preal).True} realrel";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    56
by (fast_tac (claset() addSIs [realrel_refl] 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    57
                      addSEs [sym,preal_trans_lemma]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    58
qed "equiv_realrel";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    59
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    60
val equiv_realrel_iff =
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    61
    [TrueI, TrueI] MRS 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    62
    ([CollectI, CollectI] MRS 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    63
    (equiv_realrel RS eq_equiv_class_iff));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    64
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    65
Goalw  [real_def,realrel_def,quotient_def] "realrel^^{(x,y)}:real";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    66
by (Blast_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    67
qed "realrel_in_real";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    68
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    69
Goal "inj_on Abs_real real";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    70
by (rtac inj_on_inverseI 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    71
by (etac Abs_real_inverse 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    72
qed "inj_on_Abs_real";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    73
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    74
Addsimps [equiv_realrel_iff,inj_on_Abs_real RS inj_on_iff,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    75
          realrel_iff, realrel_in_real, Abs_real_inverse];
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    76
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    77
Addsimps [equiv_realrel RS eq_equiv_class_iff];
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    78
val eq_realrelD = equiv_realrel RSN (2,eq_equiv_class);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    79
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    80
Goal "inj(Rep_real)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    81
by (rtac inj_inverseI 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    82
by (rtac Rep_real_inverse 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    83
qed "inj_Rep_real";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    84
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    85
(** real_preal: the injection from preal to real **)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    86
Goal "inj(real_preal)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    87
by (rtac injI 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    88
by (rewtac real_preal_def);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    89
by (dtac (inj_on_Abs_real RS inj_onD) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    90
by (REPEAT (rtac realrel_in_real 1));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    91
by (dtac eq_equiv_class 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    92
by (rtac equiv_realrel 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    93
by (Fast_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    94
by Safe_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    95
by (Asm_full_simp_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    96
qed "inj_real_preal";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    97
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    98
val [prem] = goal thy
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    99
    "(!!x y. z = Abs_real(realrel^^{(x,y)}) ==> P) ==> P";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   100
by (res_inst_tac [("x1","z")] 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   101
    (rewrite_rule [real_def] Rep_real RS quotientE) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   102
by (dres_inst_tac [("f","Abs_real")] arg_cong 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   103
by (res_inst_tac [("p","x")] PairE 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   104
by (rtac prem 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   105
by (asm_full_simp_tac (simpset() addsimps [Rep_real_inverse]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   106
qed "eq_Abs_real";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   107
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   108
(**** real_minus: additive inverse on real ****)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   109
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   110
Goalw [congruent_def]
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   111
  "congruent realrel (%p. split (%x y. realrel^^{(y,x)}) p)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   112
by Safe_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   113
by (asm_full_simp_tac (simpset() addsimps [preal_add_commute]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   114
qed "real_minus_congruent";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   115
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   116
(*Resolve th against the corresponding facts for real_minus*)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   117
val real_minus_ize = RSLIST [equiv_realrel, real_minus_congruent];
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   118
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   119
Goalw [real_minus_def]
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   120
      "%~ (Abs_real(realrel^^{(x,y)})) = Abs_real(realrel ^^ {(y,x)})";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   121
by (res_inst_tac [("f","Abs_real")] arg_cong 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   122
by (simp_tac (simpset() addsimps 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   123
   [realrel_in_real RS Abs_real_inverse,real_minus_ize UN_equiv_class]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   124
qed "real_minus";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   125
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   126
Goal "%~ (%~ z) = z";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   127
by (res_inst_tac [("z","z")] eq_Abs_real 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   128
by (asm_simp_tac (simpset() addsimps [real_minus]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   129
qed "real_minus_minus";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   130
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   131
Addsimps [real_minus_minus];
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   132
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   133
Goal "inj(real_minus)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   134
by (rtac injI 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   135
by (dres_inst_tac [("f","real_minus")] arg_cong 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   136
by (asm_full_simp_tac (simpset() addsimps [real_minus_minus]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   137
qed "inj_real_minus";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   138
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   139
Goalw [real_zero_def] "%~0r = 0r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   140
by (simp_tac (simpset() addsimps [real_minus]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   141
qed "real_minus_zero";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   142
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   143
Addsimps [real_minus_zero];
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   144
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   145
Goal "(%~x = 0r) = (x = 0r)"; 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   146
by (res_inst_tac [("z","x")] eq_Abs_real 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   147
by (auto_tac (claset(),simpset() addsimps [real_zero_def,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   148
    real_minus] @ preal_add_ac));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   149
qed "real_minus_zero_iff";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   150
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   151
Addsimps [real_minus_zero_iff];
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   152
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   153
Goal "(%~x ~= 0r) = (x ~= 0r)"; 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   154
by Auto_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   155
qed "real_minus_not_zero_iff";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   156
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   157
(*** Congruence property for addition ***)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   158
Goalw [congruent2_def]
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   159
    "congruent2 realrel (%p1 p2.                  \
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   160
\         split (%x1 y1. split (%x2 y2. realrel^^{(x1+x2, y1+y2)}) p2) p1)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   161
by Safe_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   162
by (asm_simp_tac (simpset() addsimps [preal_add_assoc]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   163
by (res_inst_tac [("z1.1","x1a")] (preal_add_left_commute RS ssubst) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   164
by (asm_simp_tac (simpset() addsimps [preal_add_assoc RS sym]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   165
by (asm_simp_tac (simpset() addsimps preal_add_ac) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   166
qed "real_add_congruent2";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   167
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   168
(*Resolve th against the corresponding facts for real_add*)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   169
val real_add_ize = RSLIST [equiv_realrel, real_add_congruent2];
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   170
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   171
Goalw [real_add_def]
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   172
  "Abs_real(realrel^^{(x1,y1)}) + Abs_real(realrel^^{(x2,y2)}) = \
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   173
\  Abs_real(realrel^^{(x1+x2, y1+y2)})";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   174
by (asm_simp_tac
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   175
    (simpset() addsimps [real_add_ize UN_equiv_class2]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   176
qed "real_add";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   177
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   178
Goal "(z::real) + w = w + z";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   179
by (res_inst_tac [("z","z")] eq_Abs_real 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   180
by (res_inst_tac [("z","w")] eq_Abs_real 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   181
by (asm_simp_tac (simpset() addsimps (preal_add_ac @ [real_add])) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   182
qed "real_add_commute";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   183
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   184
Goal "((z1::real) + z2) + z3 = z1 + (z2 + z3)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   185
by (res_inst_tac [("z","z1")] eq_Abs_real 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   186
by (res_inst_tac [("z","z2")] eq_Abs_real 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   187
by (res_inst_tac [("z","z3")] eq_Abs_real 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   188
by (asm_simp_tac (simpset() addsimps [real_add, preal_add_assoc]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   189
qed "real_add_assoc";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   190
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   191
(*For AC rewriting*)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   192
Goal "(x::real)+(y+z)=y+(x+z)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   193
by (rtac (real_add_commute RS trans) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   194
by (rtac (real_add_assoc RS trans) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   195
by (rtac (real_add_commute RS arg_cong) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   196
qed "real_add_left_commute";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   197
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   198
(* real addition is an AC operator *)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   199
val real_add_ac = [real_add_assoc,real_add_commute,real_add_left_commute];
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   200
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   201
Goalw [real_preal_def,real_zero_def] "0r + z = z";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   202
by (res_inst_tac [("z","z")] eq_Abs_real 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   203
by (asm_full_simp_tac (simpset() addsimps [real_add] @ preal_add_ac) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   204
qed "real_add_zero_left";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   205
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   206
Goal "z + 0r = z";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   207
by (simp_tac (simpset() addsimps [real_add_zero_left,real_add_commute]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   208
qed "real_add_zero_right";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   209
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   210
Goalw [real_zero_def] "z + %~z = 0r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   211
by (res_inst_tac [("z","z")] eq_Abs_real 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   212
by (asm_full_simp_tac (simpset() addsimps [real_minus,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   213
        real_add, preal_add_commute]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   214
qed "real_add_minus";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   215
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   216
Goal "%~z + z = 0r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   217
by (simp_tac (simpset() addsimps 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   218
    [real_add_commute,real_add_minus]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   219
qed "real_add_minus_left";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   220
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   221
Goal "? y. (x::real) + y = 0r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   222
by (fast_tac (claset() addIs [real_add_minus]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   223
qed "real_minus_ex";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   224
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   225
Goal "?! y. (x::real) + y = 0r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   226
by (auto_tac (claset() addIs [real_add_minus],simpset()));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   227
by (dres_inst_tac [("f","%x. ya+x")] arg_cong 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   228
by (asm_full_simp_tac (simpset() addsimps [real_add_assoc RS sym]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   229
by (asm_full_simp_tac (simpset() addsimps [real_add_commute,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   230
    real_add_zero_right,real_add_zero_left]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   231
qed "real_minus_ex1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   232
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   233
Goal "?! y. y + (x::real) = 0r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   234
by (auto_tac (claset() addIs [real_add_minus_left],simpset()));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   235
by (dres_inst_tac [("f","%x. x+ya")] arg_cong 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   236
by (asm_full_simp_tac (simpset() addsimps [real_add_assoc]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   237
by (asm_full_simp_tac (simpset() addsimps [real_add_commute,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   238
    real_add_zero_right,real_add_zero_left]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   239
qed "real_minus_left_ex1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   240
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   241
Goal "x + y = 0r ==> x = %~y";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   242
by (cut_inst_tac [("z","y")] real_add_minus_left 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   243
by (res_inst_tac [("x1","y")] (real_minus_left_ex1 RS ex1E) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   244
by (Blast_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   245
qed "real_add_minus_eq_minus";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   246
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   247
Goal "? y. x = %~y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   248
by (cut_inst_tac [("x","x")] real_minus_ex 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   249
by (etac exE 1 THEN dtac real_add_minus_eq_minus 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   250
by (Fast_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   251
qed "real_as_add_inverse_ex";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   252
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   253
(* real_minus_add_distrib *)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   254
Goal "%~(x + y) = %~x + %~y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   255
by (res_inst_tac [("z","x")] eq_Abs_real 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   256
by (res_inst_tac [("z","y")] eq_Abs_real 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   257
by (auto_tac (claset(),simpset() addsimps [real_minus,real_add]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   258
qed "real_minus_add_eq";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   259
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   260
val real_minus_add_distrib = real_minus_add_eq;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   261
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   262
Goal "((x::real) + y = x + z) = (y = z)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   263
by (Step_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   264
by (dres_inst_tac [("f","%t.%~x + t")] arg_cong 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   265
by (asm_full_simp_tac (simpset() addsimps [real_add_minus_left,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   266
                 real_add_assoc RS sym,real_add_zero_left]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   267
qed "real_add_left_cancel";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   268
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   269
Goal "(y + (x::real)= z + x) = (y = z)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   270
by (simp_tac (simpset() addsimps [real_add_commute,real_add_left_cancel]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   271
qed "real_add_right_cancel";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   272
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   273
(*** Congruence property for multiplication ***)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   274
Goal "!!(x1::preal). [| x1 + y2 = x2 + y1 |] ==> \
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   275
\         x * x1 + y * y1 + (x * y2 + x2 * y) = \
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   276
\         x * x2 + y * y2 + (x * y1 + x1 * y)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   277
by (asm_full_simp_tac (simpset() addsimps [preal_add_left_commute,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   278
    preal_add_assoc RS sym,preal_add_mult_distrib2 RS sym]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   279
by (rtac (preal_mult_commute RS subst) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   280
by (res_inst_tac [("y1","x2")] (preal_mult_commute RS subst) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   281
by (asm_full_simp_tac (simpset() addsimps [preal_add_assoc,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   282
    preal_add_mult_distrib2 RS sym]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   283
by (asm_full_simp_tac (simpset() addsimps [preal_add_commute]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   284
qed "real_mult_congruent2_lemma";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   285
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   286
Goal 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   287
    "congruent2 realrel (%p1 p2.                  \
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   288
\         split (%x1 y1. split (%x2 y2. realrel^^{(x1*x2 + y1*y2, x1*y2+x2*y1)}) p2) p1)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   289
by (rtac (equiv_realrel RS congruent2_commuteI) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   290
by Safe_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   291
by (rewtac split_def);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   292
by (asm_simp_tac (simpset() addsimps [preal_mult_commute,preal_add_commute]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   293
by (auto_tac (claset(),simpset() addsimps [real_mult_congruent2_lemma]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   294
qed "real_mult_congruent2";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   295
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   296
(*Resolve th against the corresponding facts for real_mult*)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   297
val real_mult_ize = RSLIST [equiv_realrel, real_mult_congruent2];
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   298
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   299
Goalw [real_mult_def]
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   300
   "Abs_real((realrel^^{(x1,y1)})) * Abs_real((realrel^^{(x2,y2)})) =   \
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   301
\   Abs_real(realrel ^^ {(x1*x2+y1*y2,x1*y2+x2*y1)})";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   302
by (simp_tac (simpset() addsimps [real_mult_ize UN_equiv_class2]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   303
qed "real_mult";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   304
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   305
Goal "(z::real) * w = w * z";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   306
by (res_inst_tac [("z","z")] eq_Abs_real 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   307
by (res_inst_tac [("z","w")] eq_Abs_real 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   308
by (asm_simp_tac (simpset() addsimps ([real_mult] @ preal_add_ac @ preal_mult_ac)) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   309
qed "real_mult_commute";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   310
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   311
Goal "((z1::real) * z2) * z3 = z1 * (z2 * z3)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   312
by (res_inst_tac [("z","z1")] eq_Abs_real 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   313
by (res_inst_tac [("z","z2")] eq_Abs_real 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   314
by (res_inst_tac [("z","z3")] eq_Abs_real 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   315
by (asm_simp_tac (simpset() addsimps ([preal_add_mult_distrib2,real_mult] @ 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   316
                                     preal_add_ac @ preal_mult_ac)) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   317
qed "real_mult_assoc";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   318
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   319
qed_goal "real_mult_left_commute" thy
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   320
    "(z1::real) * (z2 * z3) = z2 * (z1 * z3)"
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   321
 (fn _ => [rtac (real_mult_commute RS trans) 1, rtac (real_mult_assoc RS trans) 1,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   322
           rtac (real_mult_commute RS arg_cong) 1]);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   323
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   324
(* real multiplication is an AC operator *)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   325
val real_mult_ac = [real_mult_assoc, real_mult_commute, real_mult_left_commute];
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   326
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   327
Goalw [real_one_def,pnat_one_def] "1r * z = z";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   328
by (res_inst_tac [("z","z")] eq_Abs_real 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   329
by (asm_full_simp_tac (simpset() addsimps [real_mult,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   330
    preal_add_mult_distrib2,preal_mult_1_right] 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   331
    @ preal_mult_ac @ preal_add_ac) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   332
qed "real_mult_1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   333
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   334
Goal "z * 1r = z";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   335
by (simp_tac (simpset() addsimps [real_mult_commute,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   336
    real_mult_1]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   337
qed "real_mult_1_right";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   338
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   339
Goalw [real_zero_def,pnat_one_def] "0r * z = 0r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   340
by (res_inst_tac [("z","z")] eq_Abs_real 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   341
by (asm_full_simp_tac (simpset() addsimps [real_mult,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   342
    preal_add_mult_distrib2,preal_mult_1_right] 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   343
    @ preal_mult_ac @ preal_add_ac) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   344
qed "real_mult_0";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   345
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   346
Goal "z * 0r = 0r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   347
by (simp_tac (simpset() addsimps [real_mult_commute,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   348
    real_mult_0]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   349
qed "real_mult_0_right";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   350
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   351
Addsimps [real_mult_0_right,real_mult_0];
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   352
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   353
Goal "%~(x * y) = %~x * y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   354
by (res_inst_tac [("z","x")] eq_Abs_real 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   355
by (res_inst_tac [("z","y")] eq_Abs_real 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   356
by (auto_tac (claset(),simpset() addsimps [real_minus,real_mult] 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   357
    @ preal_mult_ac @ preal_add_ac));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   358
qed "real_minus_mult_eq1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   359
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   360
Goal "%~(x * y) = x * %~y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   361
by (res_inst_tac [("z","x")] eq_Abs_real 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   362
by (res_inst_tac [("z","y")] eq_Abs_real 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   363
by (auto_tac (claset(),simpset() addsimps [real_minus,real_mult] 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   364
    @ preal_mult_ac @ preal_add_ac));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   365
qed "real_minus_mult_eq2";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   366
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   367
Goal "%~x*%~y = x*y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   368
by (full_simp_tac (simpset() addsimps [real_minus_mult_eq2 RS sym,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   369
    real_minus_mult_eq1 RS sym]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   370
qed "real_minus_mult_cancel";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   371
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   372
Addsimps [real_minus_mult_cancel];
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   373
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   374
Goal "%~x*y = x*%~y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   375
by (full_simp_tac (simpset() addsimps [real_minus_mult_eq2 RS sym,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   376
    real_minus_mult_eq1 RS sym]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   377
qed "real_minus_mult_commute";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   378
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   379
(*-----------------------------------------------------------------------------
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   380
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   381
 -----------------------------------------------------------------------------*)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   382
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   383
(** Lemmas **)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   384
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   385
qed_goal "real_add_assoc_cong" thy
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   386
    "!!z. (z::real) + v = z' + v' ==> z + (v + w) = z' + (v' + w)"
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   387
 (fn _ => [(asm_simp_tac (simpset() addsimps [real_add_assoc RS sym]) 1)]);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   388
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   389
qed_goal "real_add_assoc_swap" thy "(z::real) + (v + w) = v + (z + w)"
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   390
 (fn _ => [(REPEAT (ares_tac [real_add_commute RS real_add_assoc_cong] 1))]);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   391
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   392
Goal "((z1::real) + z2) * w = (z1 * w) + (z2 * w)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   393
by (res_inst_tac [("z","z1")] eq_Abs_real 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   394
by (res_inst_tac [("z","z2")] eq_Abs_real 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   395
by (res_inst_tac [("z","w")] eq_Abs_real 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   396
by (asm_simp_tac 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   397
    (simpset() addsimps ([preal_add_mult_distrib2, real_add, real_mult] @ 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   398
                        preal_add_ac @ preal_mult_ac)) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   399
qed "real_add_mult_distrib";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   400
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   401
val real_mult_commute'= read_instantiate [("z","w")] real_mult_commute;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   402
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   403
Goal "(w::real) * (z1 + z2) = (w * z1) + (w * z2)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   404
by (simp_tac (simpset() addsimps [real_mult_commute',real_add_mult_distrib]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   405
qed "real_add_mult_distrib2";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   406
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   407
val real_mult_simps = [real_mult_1, real_mult_1_right];
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   408
Addsimps real_mult_simps;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   409
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   410
(*** one and zero are distinct ***)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   411
Goalw [real_zero_def,real_one_def] "0r ~= 1r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   412
by (auto_tac (claset(),simpset() addsimps 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   413
   [preal_self_less_add_left RS preal_not_refl2]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   414
qed "real_zero_not_eq_one";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   415
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   416
(*** existence of inverse ***)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   417
(** lemma -- alternative definition for 0r **)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   418
Goalw [real_zero_def] "0r = Abs_real (realrel ^^ {(x, x)})";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   419
by (auto_tac (claset(),simpset() addsimps [preal_add_commute]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   420
qed "real_zero_iff";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   421
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   422
Goalw [real_zero_def,real_one_def] 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   423
          "!!(x::real). x ~= 0r ==> ? y. x*y = 1r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   424
by (res_inst_tac [("z","x")] eq_Abs_real 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   425
by (cut_inst_tac [("r1.0","xa"),("r2.0","y")] preal_linear 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   426
by (auto_tac (claset() addSDs [preal_less_add_left_Ex],
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   427
           simpset() addsimps [real_zero_iff RS sym]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   428
by (res_inst_tac [("x","Abs_real (realrel ^^ {(@#$#1p,pinv(D)+@#$#1p)})")] exI 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   429
by (res_inst_tac [("x","Abs_real (realrel ^^ {(pinv(D)+@#$#1p,@#$#1p)})")] exI 2);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   430
by (auto_tac (claset(),simpset() addsimps [real_mult,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   431
    pnat_one_def,preal_mult_1_right,preal_add_mult_distrib2,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   432
    preal_add_mult_distrib,preal_mult_1,preal_mult_inv_right] 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   433
    @ preal_add_ac @ preal_mult_ac));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   434
qed "real_mult_inv_right_ex";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   435
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   436
Goal "!!(x::real). x ~= 0r ==> ? y. y*x = 1r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   437
by (asm_simp_tac (simpset() addsimps [real_mult_commute,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   438
    real_mult_inv_right_ex]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   439
qed "real_mult_inv_left_ex";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   440
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   441
Goalw [rinv_def] "!!(x::real). x ~= 0r ==> rinv(x)*x = 1r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   442
by (forward_tac [real_mult_inv_left_ex] 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   443
by (Step_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   444
by (rtac selectI2 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   445
by Auto_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   446
qed "real_mult_inv_left";
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). x ~= 0r ==> x*rinv(x) = 1r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   449
by (auto_tac (claset() addIs [real_mult_commute RS subst],
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   450
              simpset() addsimps [real_mult_inv_left]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   451
qed "real_mult_inv_right";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   452
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   453
Goal "(c::real) ~= 0r ==> (c*a=c*b) = (a=b)";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   454
by Auto_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   455
by (dres_inst_tac [("f","%x. x*rinv c")] arg_cong 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   456
by (asm_full_simp_tac (simpset() addsimps [real_mult_inv_right] @ real_mult_ac)  1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   457
qed "real_mult_left_cancel";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   458
    
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   459
Goal "(c::real) ~= 0r ==> (a*c=b*c) = (a=b)";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   460
by (Step_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   461
by (dres_inst_tac [("f","%x. x*rinv c")] arg_cong 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   462
by (asm_full_simp_tac (simpset() addsimps [real_mult_inv_right] @ real_mult_ac)  1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   463
qed "real_mult_right_cancel";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   464
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   465
Goalw [rinv_def] "x ~= 0r ==> rinv(x) ~= 0r";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   466
by (forward_tac [real_mult_inv_left_ex] 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   467
by (etac exE 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   468
by (rtac selectI2 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   469
by (auto_tac (claset(),simpset() addsimps [real_mult_0,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   470
    real_zero_not_eq_one]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   471
qed "rinv_not_zero";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   472
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   473
Addsimps [real_mult_inv_left,real_mult_inv_right];
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   474
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   475
Goal "x ~= 0r ==> rinv(rinv x) = x";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   476
by (res_inst_tac [("c1","rinv x")] (real_mult_right_cancel RS iffD1) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   477
by (etac rinv_not_zero 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   478
by (auto_tac (claset() addDs [rinv_not_zero],simpset()));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   479
qed "real_rinv_rinv";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   480
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   481
Goalw [rinv_def] "rinv(1r) = 1r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   482
by (cut_facts_tac [real_zero_not_eq_one RS 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   483
       not_sym RS real_mult_inv_left_ex] 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   484
by (etac exE 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   485
by (rtac selectI2 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   486
by (auto_tac (claset(),simpset() addsimps 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   487
    [real_zero_not_eq_one RS not_sym]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   488
qed "real_rinv_1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   489
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   490
Goal "x ~= 0r ==> rinv(%~x) = %~rinv(x)";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   491
by (res_inst_tac [("c1","%~x")] (real_mult_right_cancel RS iffD1) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   492
by Auto_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   493
qed "real_minus_rinv";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   494
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   495
      (*** theorems for ordering ***)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   496
(* prove introduction and elimination rules for real_less *)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   497
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   498
Goalw [real_less_def]
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   499
 "P < (Q::real) = (EX x1 y1 x2 y2. x1 + y2 < x2 + y1 & \
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   500
\                                  (x1,y1::preal):Rep_real(P) & \
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   501
\                                  (x2,y2):Rep_real(Q))";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   502
by (Fast_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   503
qed "real_less_iff";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   504
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   505
Goalw [real_less_def]
5148
74919e8f221c More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5143
diff changeset
   506
 "[| x1 + y2 < x2 + y1; (x1,y1::preal):Rep_real(P); \
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   507
\         (x2,y2):Rep_real(Q) |] ==> P < (Q::real)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   508
by (Fast_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   509
qed "real_lessI";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   510
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   511
Goalw [real_less_def]
5148
74919e8f221c More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5143
diff changeset
   512
 "!!P. [| R1 < (R2::real); \
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   513
\         !!x1 x2 y1 y2. x1 + y2 < x2 + y1 ==> P; \
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   514
\         !!x1 y1. (x1,y1::preal):Rep_real(R1) ==> P; \ 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   515
\         !!x2 y2. (x2,y2::preal):Rep_real(R2) ==> P |] \
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   516
\     ==> P";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   517
by Auto_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   518
qed "real_lessE";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   519
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   520
Goalw [real_less_def]
5148
74919e8f221c More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5143
diff changeset
   521
 "R1 < (R2::real) ==> (EX x1 y1 x2 y2. x1 + y2 < x2 + y1 & \
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   522
\                                  (x1,y1::preal):Rep_real(R1) & \
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   523
\                                  (x2,y2):Rep_real(R2))";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   524
by (Fast_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   525
qed "real_lessD";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   526
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   527
(* real_less is a strong order i.e nonreflexive and transitive *)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   528
(*** lemmas ***)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   529
Goal "!!(x::preal). [| x = y; x1 = y1 |] ==> x + y1 = x1 + y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   530
by (asm_simp_tac (simpset() addsimps [preal_add_commute]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   531
qed "preal_lemma_eq_rev_sum";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   532
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   533
Goal "!!(b::preal). x + (b + y) = x1 + (b + y1) ==> x + y = x1 + y1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   534
by (asm_full_simp_tac (simpset() addsimps preal_add_ac) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   535
qed "preal_add_left_commute_cancel";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   536
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   537
Goal 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   538
     "!!(x::preal). [| x + y2a = x2a + y; \
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   539
\                      x + y2b = x2b + y |] \
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   540
\                   ==> x2a + y2b = x2b + y2a";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   541
by (dtac preal_lemma_eq_rev_sum 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   542
by (assume_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   543
by (thin_tac "x + y2b = x2b + y" 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   544
by (asm_full_simp_tac (simpset() addsimps preal_add_ac) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   545
by (dtac preal_add_left_commute_cancel 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   546
by (asm_full_simp_tac (simpset() addsimps preal_add_ac) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   547
qed "preal_lemma_for_not_refl";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   548
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   549
Goal "~ (R::real) < R";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   550
by (res_inst_tac [("z","R")] eq_Abs_real 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   551
by (auto_tac (claset(),simpset() addsimps [real_less_def]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   552
by (dtac preal_lemma_for_not_refl 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   553
by (assume_tac 1 THEN rotate_tac 2 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   554
by (auto_tac (claset(),simpset() addsimps [preal_less_not_refl]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   555
qed "real_less_not_refl";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   556
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   557
(*** y < y ==> P ***)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   558
bind_thm("real_less_irrefl",real_less_not_refl RS notE);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   559
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   560
Goal "!!(x::real). x < y ==> x ~= y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   561
by (auto_tac (claset(),simpset() addsimps [real_less_not_refl]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   562
qed "real_not_refl2";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   563
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   564
(* lemma re-arranging and eliminating terms *)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   565
Goal "!! (a::preal). [| a + b = c + d; \
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   566
\            x2b + d + (c + y2e) < a + y2b + (x2e + b) |] \
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   567
\         ==> x2b + y2e < x2e + y2b";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   568
by (asm_full_simp_tac (simpset() addsimps preal_add_ac) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   569
by (res_inst_tac [("C","c+d")] preal_add_left_less_cancel 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   570
by (asm_full_simp_tac (simpset() addsimps [preal_add_assoc RS sym]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   571
qed "preal_lemma_trans";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   572
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   573
(** heavy re-writing involved*)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   574
Goal "!!(R1::real). [| R1 < R2; R2 < R3 |] ==> R1 < R3";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   575
by (res_inst_tac [("z","R1")] eq_Abs_real 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   576
by (res_inst_tac [("z","R2")] eq_Abs_real 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   577
by (res_inst_tac [("z","R3")] eq_Abs_real 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   578
by (auto_tac (claset(),simpset() addsimps [real_less_def]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   579
by (REPEAT(rtac exI 1));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   580
by (EVERY[rtac conjI 1, rtac conjI 2]);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   581
by (REPEAT(Blast_tac 2));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   582
by (dtac preal_lemma_for_not_refl 1 THEN assume_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   583
by (blast_tac (claset() addDs [preal_add_less_mono] 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   584
    addIs [preal_lemma_trans]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   585
qed "real_less_trans";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   586
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   587
Goal "!! (R1::real). [| R1 < R2; R2 < R1 |] ==> P";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   588
by (dtac real_less_trans 1 THEN assume_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   589
by (asm_full_simp_tac (simpset() addsimps [real_less_not_refl]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   590
qed "real_less_asym";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   591
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   592
(****)(****)(****)(****)(****)(****)(****)(****)(****)(****)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   593
    (****** Map and more real_less ******)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   594
(*** mapping from preal into real ***)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   595
Goalw [real_preal_def] 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   596
            "%#((z1::preal) + z2) = %#z1 + %#z2";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   597
by (asm_simp_tac (simpset() addsimps [real_add,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   598
       preal_add_mult_distrib,preal_mult_1] addsimps preal_add_ac) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   599
qed "real_preal_add";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   600
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   601
Goalw [real_preal_def] 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   602
            "%#((z1::preal) * z2) = %#z1* %#z2";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   603
by (full_simp_tac (simpset() addsimps [real_mult,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   604
        preal_add_mult_distrib2,preal_mult_1,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   605
        preal_mult_1_right,pnat_one_def] 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   606
        @ preal_add_ac @ preal_mult_ac) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   607
qed "real_preal_mult";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   608
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   609
Goalw [real_preal_def]
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   610
      "!!(x::preal). y < x ==> ? m. Abs_real (realrel ^^ {(x,y)}) = %#m";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   611
by (auto_tac (claset() addSDs [preal_less_add_left_Ex],
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   612
    simpset() addsimps preal_add_ac));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   613
qed "real_preal_ExI";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   614
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   615
Goalw [real_preal_def]
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   616
      "!!(x::preal). ? m. Abs_real (realrel ^^ {(x,y)}) = %#m ==> y < x";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   617
by (auto_tac (claset(),simpset() addsimps 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   618
    [preal_add_commute,preal_add_assoc]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   619
by (asm_full_simp_tac (simpset() addsimps 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   620
    [preal_add_assoc RS sym,preal_self_less_add_left]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   621
qed "real_preal_ExD";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   622
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   623
Goal "(? m. Abs_real (realrel ^^ {(x,y)}) = %#m) = (y < x)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   624
by (fast_tac (claset() addSIs [real_preal_ExI,real_preal_ExD]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   625
qed "real_preal_iff";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   626
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   627
(*** Gleason prop 9-4.4 p 127 ***)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   628
Goalw [real_preal_def,real_zero_def] 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   629
      "? m. (x::real) = %#m | x = 0r | x = %~(%#m)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   630
by (res_inst_tac [("z","x")] eq_Abs_real 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   631
by (auto_tac (claset(),simpset() addsimps [real_minus] @ preal_add_ac));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   632
by (cut_inst_tac [("r1.0","x"),("r2.0","y")] preal_linear 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   633
by (auto_tac (claset() addSDs [preal_less_add_left_Ex],
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   634
    simpset() addsimps [preal_add_assoc RS sym]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   635
by (auto_tac (claset(),simpset() addsimps [preal_add_commute]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   636
qed "real_preal_trichotomy";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   637
5148
74919e8f221c More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5143
diff changeset
   638
Goal "!!P. [| !!m. x = %#m ==> P; \
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   639
\             x = 0r ==> P; \
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   640
\             !!m. x = %~(%#m) ==> P |] ==> P";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   641
by (cut_inst_tac [("x","x")] real_preal_trichotomy 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   642
by Auto_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   643
qed "real_preal_trichotomyE";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   644
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   645
Goalw [real_preal_def] "%#m1 < %#m2 ==> m1 < m2";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   646
by (auto_tac (claset(),simpset() addsimps [real_less_def] @ preal_add_ac));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   647
by (auto_tac (claset(),simpset() addsimps [preal_add_assoc RS sym]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   648
by (auto_tac (claset(),simpset() addsimps preal_add_ac));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   649
qed "real_preal_lessD";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   650
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   651
Goal "m1 < m2 ==> %#m1 < %#m2";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   652
by (dtac preal_less_add_left_Ex 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   653
by (auto_tac (claset(),simpset() addsimps [real_preal_add,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   654
    real_preal_def,real_less_def]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   655
by (REPEAT(rtac exI 1));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   656
by (EVERY[rtac conjI 1, rtac conjI 2]);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   657
by (REPEAT(Fast_tac 2));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   658
by (simp_tac (simpset() addsimps [preal_self_less_add_left] 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   659
    delsimps [preal_add_less_iff2]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   660
qed "real_preal_lessI";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   661
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   662
Goal "(%#m1 < %#m2) = (m1 < m2)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   663
by (fast_tac (claset() addIs [real_preal_lessI,real_preal_lessD]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   664
qed "real_preal_less_iff1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   665
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   666
Addsimps [real_preal_less_iff1];
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   667
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   668
Goal "%~ %#m < %#m";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   669
by (auto_tac (claset(),simpset() addsimps 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   670
    [real_preal_def,real_less_def,real_minus]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   671
by (REPEAT(rtac exI 1));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   672
by (EVERY[rtac conjI 1, rtac conjI 2]);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   673
by (REPEAT(Fast_tac 2));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   674
by (full_simp_tac (simpset() addsimps preal_add_ac) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   675
by (full_simp_tac (simpset() addsimps [preal_self_less_add_right,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   676
    preal_add_assoc RS sym]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   677
qed "real_preal_minus_less_self";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   678
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   679
Goalw [real_zero_def] "%~ %#m < 0r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   680
by (auto_tac (claset(),simpset() addsimps 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   681
    [real_preal_def,real_less_def,real_minus]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   682
by (REPEAT(rtac exI 1));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   683
by (EVERY[rtac conjI 1, rtac conjI 2]);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   684
by (REPEAT(Fast_tac 2));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   685
by (full_simp_tac (simpset() addsimps 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   686
  [preal_self_less_add_right] @ preal_add_ac) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   687
qed "real_preal_minus_less_zero";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   688
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   689
Goal "~ 0r < %~ %#m";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   690
by (cut_facts_tac [real_preal_minus_less_zero] 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   691
by (fast_tac (claset() addDs [real_less_trans] 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   692
               addEs [real_less_irrefl]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   693
qed "real_preal_not_minus_gt_zero";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   694
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   695
Goalw [real_zero_def] " 0r < %#m";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   696
by (auto_tac (claset(),simpset() addsimps 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   697
    [real_preal_def,real_less_def,real_minus]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   698
by (REPEAT(rtac exI 1));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   699
by (EVERY[rtac conjI 1, rtac conjI 2]);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   700
by (REPEAT(Fast_tac 2));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   701
by (full_simp_tac (simpset() addsimps 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   702
  [preal_self_less_add_right] @ preal_add_ac) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   703
qed "real_preal_zero_less";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   704
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   705
Goal "~ %#m < 0r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   706
by (cut_facts_tac [real_preal_zero_less] 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   707
by (fast_tac (claset() addDs [real_less_trans] 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   708
               addEs [real_less_irrefl]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   709
qed "real_preal_not_less_zero";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   710
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   711
Goal "0r < %~ %~ %#m";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   712
by (simp_tac (simpset() addsimps 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   713
    [real_preal_zero_less]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   714
qed "real_minus_minus_zero_less";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   715
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   716
(* another lemma *)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   717
Goalw [real_zero_def] " 0r < %#m + %#m1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   718
by (auto_tac (claset(),simpset() addsimps 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   719
    [real_preal_def,real_less_def,real_add]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   720
by (REPEAT(rtac exI 1));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   721
by (EVERY[rtac conjI 1, rtac conjI 2]);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   722
by (REPEAT(Fast_tac 2));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   723
by (full_simp_tac (simpset() addsimps preal_add_ac) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   724
by (full_simp_tac (simpset() addsimps [preal_self_less_add_right,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   725
    preal_add_assoc RS sym]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   726
qed "real_preal_sum_zero_less";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   727
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   728
Goal "%~ %#m < %#m1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   729
by (auto_tac (claset(),simpset() addsimps 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   730
    [real_preal_def,real_less_def,real_minus]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   731
by (REPEAT(rtac exI 1));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   732
by (EVERY[rtac conjI 1, rtac conjI 2]);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   733
by (REPEAT(Fast_tac 2));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   734
by (full_simp_tac (simpset() addsimps preal_add_ac) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   735
by (full_simp_tac (simpset() addsimps [preal_self_less_add_right,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   736
    preal_add_assoc RS sym]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   737
qed "real_preal_minus_less_all";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   738
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   739
Goal "~ %#m < %~ %#m1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   740
by (cut_facts_tac [real_preal_minus_less_all] 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   741
by (fast_tac (claset() addDs [real_less_trans] 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   742
               addEs [real_less_irrefl]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   743
qed "real_preal_not_minus_gt_all";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   744
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   745
Goal "%~ %#m1 < %~ %#m2 ==> %#m2 < %#m1";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   746
by (auto_tac (claset(),simpset() addsimps 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   747
    [real_preal_def,real_less_def,real_minus]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   748
by (REPEAT(rtac exI 1));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   749
by (EVERY[rtac conjI 1, rtac conjI 2]);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   750
by (REPEAT(Fast_tac 2));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   751
by (auto_tac (claset(),simpset() addsimps preal_add_ac));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   752
by (asm_full_simp_tac (simpset() addsimps [preal_add_assoc RS sym]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   753
by (auto_tac (claset(),simpset() addsimps preal_add_ac));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   754
qed "real_preal_minus_less_rev1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   755
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   756
Goal "%#m1 < %#m2 ==> %~ %#m2 < %~ %#m1";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   757
by (auto_tac (claset(),simpset() addsimps 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   758
    [real_preal_def,real_less_def,real_minus]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   759
by (REPEAT(rtac exI 1));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   760
by (EVERY[rtac conjI 1, rtac conjI 2]);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   761
by (REPEAT(Fast_tac 2));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   762
by (auto_tac (claset(),simpset() addsimps preal_add_ac));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   763
by (asm_full_simp_tac (simpset() addsimps [preal_add_assoc RS sym]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   764
by (auto_tac (claset(),simpset() addsimps preal_add_ac));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   765
qed "real_preal_minus_less_rev2";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   766
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   767
Goal "(%~ %#m1 < %~ %#m2) = (%#m2 < %#m1)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   768
by (blast_tac (claset() addSIs [real_preal_minus_less_rev1,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   769
               real_preal_minus_less_rev2]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   770
qed "real_preal_minus_less_rev_iff";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   771
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   772
Addsimps [real_preal_minus_less_rev_iff];
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   773
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   774
(*** linearity ***)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   775
Goal "(R1::real) < R2 | R1 = R2 | R2 < R1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   776
by (res_inst_tac [("x","R1")]  real_preal_trichotomyE 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   777
by (ALLGOALS(res_inst_tac [("x","R2")]  real_preal_trichotomyE));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   778
by (auto_tac (claset() addSDs [preal_le_anti_sym],
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   779
              simpset() addsimps [preal_less_le_iff,real_preal_minus_less_zero,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   780
               real_preal_zero_less,real_preal_minus_less_all]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   781
qed "real_linear";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   782
5148
74919e8f221c More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5143
diff changeset
   783
Goal "!!(R1::real). [| R1 < R2 ==> P;  R1 = R2 ==> P; \
74919e8f221c More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5143
diff changeset
   784
\                      R2 < R1 ==> P |] ==> P";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   785
by (cut_inst_tac [("R1.0","R1"),("R2.0","R2")] real_linear 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   786
by Auto_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   787
qed "real_linear_less2";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   788
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   789
(*** Properties of <= ***)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   790
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   791
Goalw [real_le_def] "~(w < z) ==> z <= (w::real)";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   792
by (assume_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   793
qed "real_leI";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   794
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   795
Goalw [real_le_def] "z<=w ==> ~(w<(z::real))";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   796
by (assume_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   797
qed "real_leD";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   798
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   799
val real_leE = make_elim real_leD;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   800
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   801
Goal "(~(w < z)) = (z <= (w::real))";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   802
by (fast_tac (claset() addSIs [real_leI,real_leD]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   803
qed "real_less_le_iff";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   804
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   805
Goalw [real_le_def] "~ z <= w ==> w<(z::real)";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   806
by (Fast_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   807
qed "not_real_leE";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   808
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   809
Goalw [real_le_def] "z < w ==> z <= (w::real)";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   810
by (fast_tac (claset() addEs [real_less_asym]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   811
qed "real_less_imp_le";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   812
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   813
Goalw [real_le_def] "!!(x::real). x <= y ==> x < y | x = y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   814
by (cut_facts_tac [real_linear] 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   815
by (fast_tac (claset() addEs [real_less_irrefl,real_less_asym]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   816
qed "real_le_imp_less_or_eq";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   817
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   818
Goalw [real_le_def] "z<w | z=w ==> z <=(w::real)";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   819
by (cut_facts_tac [real_linear] 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   820
by (fast_tac (claset() addEs [real_less_irrefl,real_less_asym]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   821
qed "real_less_or_eq_imp_le";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   822
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   823
Goal "(x <= (y::real)) = (x < y | x=y)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   824
by (REPEAT(ares_tac [iffI, real_less_or_eq_imp_le, real_le_imp_less_or_eq] 1));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   825
qed "real_le_eq_less_or_eq";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   826
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   827
Goal "w <= (w::real)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   828
by (simp_tac (simpset() addsimps [real_le_eq_less_or_eq]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   829
qed "real_le_refl";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   830
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   831
val prems = goal Real.thy "!!i. [| i <= j; j < k |] ==> i < (k::real)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   832
by (dtac real_le_imp_less_or_eq 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   833
by (fast_tac (claset() addIs [real_less_trans]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   834
qed "real_le_less_trans";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   835
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   836
Goal "!! (i::real). [| i < j; j <= k |] ==> i < k";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   837
by (dtac real_le_imp_less_or_eq 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   838
by (fast_tac (claset() addIs [real_less_trans]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   839
qed "real_less_le_trans";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   840
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   841
Goal "[| i <= j; j <= k |] ==> i <= (k::real)";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   842
by (EVERY1 [dtac real_le_imp_less_or_eq, dtac real_le_imp_less_or_eq,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   843
            rtac real_less_or_eq_imp_le, fast_tac (claset() addIs [real_less_trans])]);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   844
qed "real_le_trans";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   845
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   846
Goal "[| z <= w; w <= z |] ==> z = (w::real)";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   847
by (EVERY1 [dtac real_le_imp_less_or_eq, dtac real_le_imp_less_or_eq,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   848
            fast_tac (claset() addEs [real_less_irrefl,real_less_asym])]);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   849
qed "real_le_anti_sym";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   850
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   851
Goal "[| ~ y < x; y ~= x |] ==> x < (y::real)";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   852
by (rtac not_real_leE 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   853
by (fast_tac (claset() addDs [real_le_imp_less_or_eq]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   854
qed "not_less_not_eq_real_less";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   855
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   856
Goal "(0r < %~R) = (R < 0r)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   857
by (res_inst_tac [("x","R")]  real_preal_trichotomyE 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   858
by (auto_tac (claset(),simpset() addsimps [real_preal_not_minus_gt_zero,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   859
                        real_preal_not_less_zero,real_preal_zero_less,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   860
                        real_preal_minus_less_zero]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   861
qed "real_minus_zero_less_iff";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   862
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   863
Addsimps [real_minus_zero_less_iff];
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   864
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   865
Goal "(%~R < 0r) = (0r < R)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   866
by (res_inst_tac [("x","R")]  real_preal_trichotomyE 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   867
by (auto_tac (claset(),simpset() addsimps [real_preal_not_minus_gt_zero,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   868
                        real_preal_not_less_zero,real_preal_zero_less,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   869
                        real_preal_minus_less_zero]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   870
qed "real_minus_zero_less_iff2";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   871
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   872
(** lemma **)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   873
Goal "(0r < x) = (? y. x = %#y)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   874
by (auto_tac (claset(),simpset() addsimps [real_preal_zero_less]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   875
by (cut_inst_tac [("x","x")] real_preal_trichotomy 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   876
by (blast_tac (claset() addSEs [real_less_irrefl,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   877
     real_preal_not_minus_gt_zero RS notE]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   878
qed "real_gt_zero_preal_Ex";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   879
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   880
Goal "%#z < x ==> ? y. x = %#y";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   881
by (blast_tac (claset() addSDs [real_preal_zero_less RS real_less_trans]
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   882
               addIs [real_gt_zero_preal_Ex RS iffD1]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   883
qed "real_gt_preal_preal_Ex";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   884
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   885
Goal "%#z <= x ==> ? y. x = %#y";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   886
by (blast_tac (claset() addDs [real_le_imp_less_or_eq,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   887
              real_gt_preal_preal_Ex]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   888
qed "real_ge_preal_preal_Ex";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   889
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   890
Goal "y <= 0r ==> !x. y < %#x";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   891
by (auto_tac (claset() addEs [real_le_imp_less_or_eq RS disjE]
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   892
              addIs [real_preal_zero_less RSN(2,real_less_trans)],
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   893
              simpset() addsimps [real_preal_zero_less]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   894
qed "real_less_all_preal";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   895
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   896
Goal "~ 0r < y ==> !x. y < %#x";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   897
by (blast_tac (claset() addSIs [real_less_all_preal,real_leI]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   898
qed "real_less_all_real2";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   899
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   900
(**** Derive alternative definition for real_less ****)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   901
(** lemma **)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   902
Goal "!!(R::real). ? A. S + A = R";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   903
by (res_inst_tac [("x","%~S + R")] exI 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   904
by (simp_tac (simpset() addsimps [real_add_minus,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   905
    real_add_zero_right] @ real_add_ac) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   906
qed "real_lemma_add_left_ex";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   907
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   908
Goal "!!(R::real). R < S ==> ? T. R + T = S";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   909
by (res_inst_tac [("x","R")]  real_preal_trichotomyE 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   910
by (ALLGOALS(res_inst_tac [("x","S")]  real_preal_trichotomyE));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   911
by (auto_tac (claset() addSDs [preal_le_anti_sym] addSDs [preal_less_add_left_Ex],
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   912
              simpset() addsimps [preal_less_le_iff,real_preal_add,real_minus_add_eq,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   913
               real_preal_minus_less_zero,real_less_not_refl,real_minus_ex,real_add_assoc,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   914
               real_preal_zero_less,real_preal_minus_less_all,real_add_minus_left,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   915
               real_preal_not_less_zero,real_add_zero_left,real_lemma_add_left_ex]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   916
qed "real_less_add_left_Ex";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   917
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   918
Goal "!!(R::real). R < S ==> ? T. 0r < T & R + T = S";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   919
by (res_inst_tac [("x","R")]  real_preal_trichotomyE 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   920
by (ALLGOALS(res_inst_tac [("x","S")]  real_preal_trichotomyE));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   921
by (auto_tac (claset() addSDs [preal_less_add_left_Ex],
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   922
                         simpset() addsimps [real_preal_not_minus_gt_all,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   923
            real_preal_add, real_preal_not_less_zero,real_less_not_refl,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   924
    real_preal_not_minus_gt_zero,real_add_zero_left,real_minus_add_eq]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   925
by (res_inst_tac [("x","%#D")] exI 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   926
by (res_inst_tac [("x","%#m+%#ma")] exI 2);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   927
by (res_inst_tac [("x","%#m")] exI 3);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   928
by (res_inst_tac [("x","%#D")] exI 4);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   929
by (auto_tac (claset(),simpset() addsimps [real_preal_zero_less,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   930
    real_preal_sum_zero_less,real_add_minus_left,real_add_assoc,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   931
                          real_add_minus,real_add_zero_right]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   932
by (simp_tac (simpset() addsimps [real_add_assoc RS sym, 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   933
            real_add_minus_left,real_add_zero_left]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   934
qed "real_less_add_positive_left_Ex";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   935
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   936
(* lemmas *)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   937
(** change naff name(s)! **)
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   938
Goal "(W < S) ==> (0r < S + %~W)";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   939
by (dtac real_less_add_positive_left_Ex 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   940
by (auto_tac (claset(),simpset() addsimps [real_add_minus,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   941
    real_add_zero_right] @ real_add_ac));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   942
qed "real_less_sum_gt_zero";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   943
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   944
Goal "!!S. T = S + W ==> S = T + %~W";
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   945
by (asm_simp_tac (simpset() addsimps [real_add_minus, real_add_zero_right] 
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   946
		                     @ real_add_ac) 1);
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   947
qed "real_lemma_change_eq_subj";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   948
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   949
(* FIXME: long! *)
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   950
Goal "(0r < S + %~W) ==> (W < S)";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   951
by (rtac ccontr 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   952
by (dtac (real_leI RS real_le_imp_less_or_eq) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   953
by (auto_tac (claset(),
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   954
    simpset() addsimps [real_less_not_refl,real_add_minus]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   955
by (EVERY1[dtac real_less_add_positive_left_Ex, etac exE, etac conjE]);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   956
by (asm_full_simp_tac (simpset() addsimps [real_add_zero_left]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   957
by (dtac real_lemma_change_eq_subj 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   958
by (auto_tac (claset(),simpset() addsimps [real_minus_minus]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   959
by (dtac real_less_sum_gt_zero 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   960
by (asm_full_simp_tac (simpset() addsimps [real_minus_add_eq] @ real_add_ac) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   961
by (EVERY1[rotate_tac 1, dtac (real_add_left_commute RS ssubst)]);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   962
by (auto_tac (claset() addEs [real_less_asym],
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   963
              simpset() addsimps [real_add_minus,real_add_zero_right]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   964
qed "real_sum_gt_zero_less";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   965
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   966
Goal "(0r < S + %~W) = (W < S)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   967
by (fast_tac (claset() addIs [real_less_sum_gt_zero,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   968
    real_sum_gt_zero_less]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   969
qed "real_less_sum_gt_0_iff";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   970
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   971
Goal "((x::real) < y) = (%~y < %~x)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   972
by (rtac (real_less_sum_gt_0_iff RS subst) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   973
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
   974
by (simp_tac (simpset() addsimps [real_add_commute]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   975
qed "real_less_swap_iff";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   976
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
   977
Goal "[| R + L = S; 0r < L |] ==> R < S";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   978
by (rtac (real_less_sum_gt_0_iff RS iffD1) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   979
by (auto_tac (claset(),simpset() addsimps [
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   980
    real_add_minus,real_add_zero_right] @ real_add_ac));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   981
qed "real_lemma_add_positive_imp_less";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   982
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   983
Goal "!!(R::real). ? T. 0r < T & R + T = S ==> R < S";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   984
by (blast_tac (claset() addIs [real_lemma_add_positive_imp_less]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   985
qed "real_ex_add_positive_left_less";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   986
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   987
(*** alternative definition for real_less ***)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   988
Goal "!!(R::real). (? T. 0r < T & R + T = S) = (R < S)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   989
by (fast_tac (claset() addSIs [real_less_add_positive_left_Ex,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   990
    real_ex_add_positive_left_less]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   991
qed "real_less_iffdef";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   992
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   993
Goal "(0r < x) = (%~x < x)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   994
by (Step_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   995
by (rtac ccontr 2 THEN forward_tac 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   996
    [real_leI RS real_le_imp_less_or_eq] 2);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   997
by (Step_tac 2);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   998
by (dtac (real_minus_zero_less_iff RS iffD2) 2);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
   999
by (fast_tac (claset() addDs [real_less_trans]) 2);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1000
by (auto_tac (claset(),simpset() addsimps 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1001
    [real_gt_zero_preal_Ex,real_preal_minus_less_self]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1002
qed "real_gt_zero_iff";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1003
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1004
Goal "(x < 0r) = (x < %~x)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1005
by (rtac (real_minus_zero_less_iff RS subst) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1006
by (stac real_gt_zero_iff 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1007
by (Full_simp_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1008
qed "real_lt_zero_iff";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1009
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1010
Goalw [real_le_def] "(0r <= x) = (%~x <= x)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1011
by (auto_tac (claset(),simpset() addsimps [real_lt_zero_iff RS sym]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1012
qed "real_ge_zero_iff";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1013
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1014
Goalw [real_le_def] "(x <= 0r) = (x <= %~x)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1015
by (auto_tac (claset(),simpset() addsimps [real_gt_zero_iff RS sym]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1016
qed "real_le_zero_iff";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1017
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1018
Goal "(%#m1 <= %#m2) = (m1 <= m2)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1019
by (auto_tac (claset() addSIs [preal_leI],
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1020
    simpset() addsimps [real_less_le_iff RS sym]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1021
by (dtac preal_le_less_trans 1 THEN assume_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1022
by (etac preal_less_irrefl 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1023
qed "real_preal_le_iff";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1024
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1025
Goal "!!(x::real). [| 0r < x; 0r < y |] ==> 0r < x * y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1026
by (auto_tac (claset(),simpset() addsimps [real_gt_zero_preal_Ex]));  
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1027
by (res_inst_tac [("x","y*ya")] exI 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1028
by (full_simp_tac (simpset() addsimps [real_preal_mult]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1029
qed "real_mult_order";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1030
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1031
Goal "!!(x::real). [| x < 0r; y < 0r |] ==> 0r < x * y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1032
by (REPEAT(dtac (real_minus_zero_less_iff RS iffD2) 1));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1033
by (dtac real_mult_order 1 THEN assume_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1034
by (Asm_full_simp_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1035
qed "real_mult_less_zero1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1036
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1037
Goal "!!(x::real). [| 0r <= x; 0r <= y |] ==> 0r <= x * y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1038
by (REPEAT(dtac real_le_imp_less_or_eq 1));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1039
by (auto_tac (claset() addIs [real_mult_order,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1040
    real_less_imp_le],simpset() addsimps [real_le_refl]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1041
qed "real_le_mult_order";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1042
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1043
Goal "!!(x::real). [| x <= 0r; y <= 0r |] ==> 0r <= x * y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1044
by (rtac real_less_or_eq_imp_le 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1045
by (dtac real_le_imp_less_or_eq 1 THEN etac disjE 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1046
by Auto_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1047
by (dtac real_le_imp_less_or_eq 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1048
by (auto_tac (claset() addDs [real_mult_less_zero1],simpset()));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1049
qed "real_mult_le_zero1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1050
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1051
Goal "!!(x::real). [| 0r <= x; y < 0r |] ==> x * y <= 0r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1052
by (rtac real_less_or_eq_imp_le 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1053
by (dtac real_le_imp_less_or_eq 1 THEN etac disjE 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1054
by Auto_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1055
by (dtac (real_minus_zero_less_iff RS iffD2) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1056
by (rtac (real_minus_zero_less_iff RS subst) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1057
by (blast_tac (claset() addDs [real_mult_order] 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1058
    addIs [real_minus_mult_eq2 RS ssubst]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1059
qed "real_mult_le_zero";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1060
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1061
Goal "!!(x::real). [| 0r < x; y < 0r |] ==> x*y < 0r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1062
by (dtac (real_minus_zero_less_iff RS iffD2) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1063
by (dtac real_mult_order 1 THEN assume_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1064
by (rtac (real_minus_zero_less_iff RS iffD1) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1065
by (asm_full_simp_tac (simpset() addsimps [real_minus_mult_eq2]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1066
qed "real_mult_less_zero";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1067
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1068
Goalw [real_one_def] "0r < 1r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1069
by (auto_tac (claset() addIs [real_gt_zero_preal_Ex RS iffD2],
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1070
    simpset() addsimps [real_preal_def]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1071
qed "real_zero_less_one";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1072
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1073
(*** Completeness of reals ***)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1074
(** use supremum property of preal and theorems about real_preal **)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1075
              (*** a few lemmas ***)
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
  1076
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
  1077
by (blast_tac (claset() addSDs [bspec,real_gt_zero_preal_Ex RS iffD1]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1078
qed "real_sup_lemma1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1079
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
  1080
Goal "[| ! x:P. 0r < x; ? x. x: P; ? y. !x: P. x < y |] \
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1081
\         ==> (? X. X: {w. %#w : P}) & (? Y. !X: {w. %#w : P}. X < Y)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1082
by (rtac conjI 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1083
by (blast_tac (claset() addDs [bspec,real_gt_zero_preal_Ex RS iffD1]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1084
by Auto_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1085
by (dtac bspec 1 THEN assume_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1086
by (forward_tac [bspec] 1  THEN assume_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1087
by (dtac real_less_trans 1 THEN assume_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1088
by (dtac (real_gt_zero_preal_Ex RS iffD1) 1 THEN etac exE 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1089
by (res_inst_tac [("x","ya")] exI 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1090
by Auto_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1091
by (dres_inst_tac [("x","%#X")] bspec 1 THEN assume_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1092
by (etac real_preal_lessD 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1093
qed "real_sup_lemma2";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1094
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1095
(*-------------------------------------------------------------
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1096
            Completeness of Positive Reals
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1097
 -------------------------------------------------------------*)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1098
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1099
(* Supremum property for the set of positive reals *)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1100
(* FIXME: long proof - can be improved - need only have one case split *)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1101
(* will do for now *)
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
  1102
Goal "[| ! x:P. 0r < x; ? x. x: P; ? y. !x: P. x < y |] \
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1103
\         ==> (? S. !y. (? x: P. y < x) = (y < S))";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1104
by (res_inst_tac [("x","%#psup({w. %#w : P})")] exI 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1105
by Auto_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1106
by (forward_tac [real_sup_lemma2] 1 THEN Auto_tac);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1107
by (case_tac "0r < ya" 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1108
by (dtac (real_gt_zero_preal_Ex RS iffD1) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1109
by (dtac real_less_all_real2 2);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1110
by Auto_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1111
by (rtac (preal_complete RS spec RS iffD1) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1112
by Auto_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1113
by (forward_tac [real_gt_preal_preal_Ex] 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1114
by Auto_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1115
(* second part *)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1116
by (rtac (real_sup_lemma1 RS iffD2) 1 THEN assume_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1117
by (case_tac "0r < ya" 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1118
by (auto_tac (claset() addSDs [real_less_all_real2,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1119
        real_gt_zero_preal_Ex RS iffD1],simpset()));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1120
by (forward_tac [real_sup_lemma2] 2 THEN Auto_tac);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1121
by (forward_tac [real_sup_lemma2] 1 THEN Auto_tac);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1122
by (rtac (preal_complete RS spec RS iffD2 RS bexE) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1123
by (Fast_tac 3);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1124
by (Fast_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1125
by (Fast_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1126
by (Blast_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1127
qed "posreal_complete";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1128
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1129
(*------------------------------------------------------------------
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1130
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1131
 ------------------------------------------------------------------*)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1132
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1133
Goal "!!(A::real). A < B ==> A + C < B + C";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1134
by (dtac (real_less_iffdef RS iffD2) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1135
by (rtac (real_less_iffdef RS iffD1) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1136
by (REPEAT(Step_tac 1));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1137
by (full_simp_tac (simpset() addsimps real_add_ac) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1138
qed "real_add_less_mono1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1139
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1140
Goal "!!(A::real). A < B ==> C + A < C + B";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1141
by (auto_tac (claset() addIs [real_add_less_mono1],
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1142
    simpset() addsimps [real_add_commute]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1143
qed "real_add_less_mono2";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1144
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1145
Goal "!!(A::real). A + C < B + C ==> A < B";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1146
by (dres_inst_tac [("C","%~C")] real_add_less_mono1 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1147
by (asm_full_simp_tac (simpset() addsimps [real_add_assoc,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1148
    real_add_minus,real_add_zero_right]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1149
qed "real_less_add_right_cancel";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1150
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1151
Goal "!!(A::real). C + A < C + B ==> A < B";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1152
by (dres_inst_tac [("C","%~C")] real_add_less_mono2 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1153
by (asm_full_simp_tac (simpset() addsimps [real_add_assoc RS sym,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1154
    real_add_minus_left,real_add_zero_left]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1155
qed "real_less_add_left_cancel";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1156
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
  1157
Goal "[| 0r < x; 0r < y |] ==> 0r < x + y";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1158
by (REPEAT(dtac (real_gt_zero_preal_Ex RS iffD1) 1));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1159
by (rtac (real_gt_zero_preal_Ex RS iffD2) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1160
by (Step_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1161
by (res_inst_tac [("x","y + ya")] exI 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1162
by (full_simp_tac (simpset() addsimps [real_preal_add]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1163
qed "real_add_order";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1164
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1165
Goal "!!(x::real). [| 0r <= x; 0r <= y |] ==> 0r <= x + y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1166
by (REPEAT(dtac real_le_imp_less_or_eq 1));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1167
by (auto_tac (claset() addIs [real_add_order,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1168
    real_less_imp_le],simpset() addsimps [real_add_zero_left,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1169
    real_add_zero_right,real_le_refl]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1170
qed "real_le_add_order";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1171
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1172
Goal 
5148
74919e8f221c More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5143
diff changeset
  1173
      "[| R1 < S1; R2 < S2 |] ==> R1 + R2 < S1 + (S2::real)";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1174
by (dtac (real_less_iffdef RS iffD2) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1175
by (dtac (real_less_iffdef RS iffD2) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1176
by (rtac (real_less_iffdef RS iffD1) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1177
by Auto_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1178
by (res_inst_tac [("x","T + Ta")] exI 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1179
by (auto_tac (claset(),simpset() addsimps [real_add_order] @ real_add_ac));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1180
qed "real_add_less_mono";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1181
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1182
Goal "!!(x::real). [| 0r <= x; 0r <= y |] ==> 0r <= x + y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1183
by (REPEAT(dtac real_le_imp_less_or_eq 1));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1184
by (auto_tac (claset() addIs [real_add_order,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1185
    real_less_imp_le],simpset() addsimps [real_add_zero_left,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1186
    real_add_zero_right,real_le_refl]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1187
qed "real_le_add_order";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1188
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1189
Goal "!!(q1::real). q1 <= q2  ==> x + q1 <= x + q2";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1190
by (dtac real_le_imp_less_or_eq 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1191
by (Step_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1192
by (auto_tac (claset() addSIs [real_le_refl,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1193
    real_less_imp_le,real_add_less_mono1],
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1194
    simpset() addsimps [real_add_commute]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1195
qed "real_add_left_le_mono1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1196
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1197
Goal "!!(q1::real). q1 <= q2  ==> q1 + x <= q2 + x";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1198
by (auto_tac (claset() addDs [real_add_left_le_mono1],
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1199
    simpset() addsimps [real_add_commute]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1200
qed "real_add_le_mono1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1201
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1202
Goal "!!k l::real. [|i<=j;  k<=l |] ==> i + k <= j + l";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1203
by (etac (real_add_le_mono1 RS real_le_trans) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1204
by (simp_tac (simpset() addsimps [real_add_commute]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1205
(*j moves to the end because it is free while k, l are bound*)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1206
by (etac real_add_le_mono1 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1207
qed "real_add_le_mono";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1208
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1209
Goal "EX (x::real). x < y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1210
by (rtac (real_add_zero_right RS subst) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1211
by (res_inst_tac [("x","y + %~1r")] exI 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1212
by (auto_tac (claset() addSIs [real_add_less_mono2],
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1213
    simpset() addsimps [real_minus_zero_less_iff2,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1214
    real_zero_less_one]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1215
qed "real_less_Ex";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1216
(*---------------------------------------------------------------------------------
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1217
             An embedding of the naturals in the reals
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1218
 ---------------------------------------------------------------------------------*)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1219
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1220
Goalw [real_nat_def] "%%#0 = 1r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1221
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
  1222
by (fold_tac [real_one_def]);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1223
by (rtac refl 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1224
qed "real_nat_one";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1225
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1226
Goalw [real_nat_def] "%%#1 = 1r + 1r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1227
by (full_simp_tac (simpset() addsimps [real_preal_def,real_one_def,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1228
    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
  1229
    ] @ pnat_add_ac) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1230
qed "real_nat_two";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1231
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1232
Goalw [real_nat_def]
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1233
          "%%#n1 + %%#n2 = %%#(n1 + n2) + 1r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1234
by (full_simp_tac (simpset() addsimps [real_nat_one RS sym,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1235
    real_nat_def,real_preal_add RS sym,preal_prat_add RS sym,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1236
    prat_pnat_add RS sym,pnat_nat_add]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1237
qed "real_nat_add";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1238
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1239
Goal "%%#(n + 1) = %%#n + 1r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1240
by (res_inst_tac [("x1","1r")] (real_add_right_cancel RS iffD1) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1241
by (rtac (real_nat_add RS subst) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1242
by (full_simp_tac (simpset() addsimps [real_nat_two,real_add_assoc]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1243
qed "real_nat_add_one";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1244
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1245
Goal "Suc n = n + 1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1246
by Auto_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1247
qed "lemma";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1248
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1249
Goal "%%#Suc n = %%#n + 1r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1250
by (stac lemma 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1251
by (rtac real_nat_add_one 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1252
qed "real_nat_Suc";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1253
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1254
Goal "inj(real_nat)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1255
by (rtac injI 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1256
by (rewtac real_nat_def);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1257
by (dtac (inj_real_preal RS injD) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1258
by (dtac (inj_preal_prat RS injD) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1259
by (dtac (inj_prat_pnat RS injD) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1260
by (etac (inj_pnat_nat RS injD) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1261
qed "inj_real_nat";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1262
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1263
Goalw [real_nat_def] "0r < %%#n";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1264
by (rtac (real_gt_zero_preal_Ex RS iffD2) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1265
by (Blast_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1266
qed "real_nat_less_zero";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1267
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
  1268
Goal "1r <= %%#n";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1269
by (simp_tac (simpset() addsimps [real_nat_one RS sym]) 1);
5184
9b8547a9496a Adapted to new datatype package.
berghofe
parents: 5148
diff changeset
  1270
by (induct_tac "n" 1);
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1271
by (auto_tac (claset(),simpset () 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1272
    addsimps [real_nat_Suc,real_le_refl,real_nat_one]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1273
by (res_inst_tac [("t","1r")] (real_add_zero_left RS subst) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1274
by (rtac real_add_le_mono 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1275
by (auto_tac (claset(),simpset () 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1276
    addsimps [real_le_refl,real_nat_less_zero,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1277
    real_less_imp_le,real_add_zero_left]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1278
qed "real_nat_less_one";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1279
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1280
Goal "rinv(%%#n) ~= 0r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1281
by (rtac ((real_nat_less_zero RS 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1282
    real_not_refl2 RS not_sym) RS rinv_not_zero) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1283
qed "real_nat_rinv_not_zero";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1284
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
  1285
Goal "rinv(%%#x) = rinv(%%#y) ==> x = y";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1286
by (rtac (inj_real_nat RS injD) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1287
by (res_inst_tac [("n2","x")] 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1288
    (real_nat_rinv_not_zero RS real_mult_left_cancel RS iffD1) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1289
by (full_simp_tac (simpset() addsimps [(real_nat_less_zero RS 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1290
    real_not_refl2 RS not_sym) RS real_mult_inv_left]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1291
by (asm_full_simp_tac (simpset() addsimps [(real_nat_less_zero RS 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1292
    real_not_refl2 RS not_sym)]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1293
qed "real_nat_rinv_inj";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1294
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
  1295
Goal "0r < x ==> 0r < rinv x";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1296
by (EVERY1[rtac ccontr, dtac real_leI]);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1297
by (forward_tac [real_minus_zero_less_iff2 RS iffD2] 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1298
by (forward_tac [real_not_refl2 RS not_sym] 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1299
by (dtac (real_not_refl2 RS not_sym RS rinv_not_zero) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1300
by (EVERY1[dtac real_le_imp_less_or_eq, Step_tac]); 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1301
by (dtac real_mult_less_zero1 1 THEN assume_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1302
by (auto_tac (claset() addIs [real_zero_less_one RS real_less_asym],
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1303
    simpset() addsimps [real_minus_mult_eq1 RS sym]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1304
qed "real_rinv_gt_zero";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1305
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
  1306
Goal "x < 0r ==> rinv x < 0r";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1307
by (forward_tac [real_not_refl2] 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1308
by (dtac (real_minus_zero_less_iff RS iffD2) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1309
by (rtac (real_minus_zero_less_iff RS iffD1) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1310
by (dtac (real_minus_rinv RS sym) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1311
by (auto_tac (claset() addIs [real_rinv_gt_zero],
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1312
    simpset()));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1313
qed "real_rinv_less_zero";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1314
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1315
Goal "x+x=x*(1r+1r)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1316
by (simp_tac (simpset() addsimps [real_add_mult_distrib2]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1317
qed "real_add_self";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1318
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1319
Goal "x < x + 1r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1320
by (rtac (real_less_sum_gt_0_iff RS iffD1) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1321
by (full_simp_tac (simpset() addsimps [real_zero_less_one,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1322
    real_add_assoc,real_add_minus,real_add_zero_right,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1323
    real_add_left_commute]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1324
qed "real_self_less_add_one";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1325
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1326
Goal "1r < 1r + 1r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1327
by (rtac real_self_less_add_one 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1328
qed "real_one_less_two";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1329
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1330
Goal "0r < 1r + 1r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1331
by (rtac ([real_zero_less_one,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1332
          real_one_less_two] MRS real_less_trans) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1333
qed "real_zero_less_two";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1334
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1335
Goal "1r + 1r ~= 0r";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1336
by (rtac (real_zero_less_two RS real_not_refl2 RS not_sym) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1337
qed "real_two_not_zero";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1338
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1339
Addsimps [real_two_not_zero];
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1340
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1341
Goal "x*rinv(1r + 1r) + x*rinv(1r + 1r) = x";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1342
by (stac real_add_self 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1343
by (full_simp_tac (simpset() addsimps [real_mult_assoc]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1344
qed "real_sum_of_halves";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1345
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1346
Goal "!!(x::real). [| 0r<z; x<y |] ==> x*z<y*z";       
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1347
by (rotate_tac 1 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1348
by (dtac real_less_sum_gt_zero 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1349
by (rtac real_sum_gt_zero_less 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1350
by (dtac real_mult_order 1 THEN assume_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1351
by (asm_full_simp_tac (simpset() addsimps [real_add_mult_distrib2,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1352
    real_minus_mult_eq2 RS sym, real_mult_commute ]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1353
qed "real_mult_less_mono1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1354
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1355
Goal "!!(y::real). [| 0r<z; x<y |] ==> z*x<z*y";       
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1356
by (asm_simp_tac (simpset() addsimps [real_mult_commute,real_mult_less_mono1]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1357
qed "real_mult_less_mono2";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1358
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1359
Goal "!!(x::real). [| 0r<z; x*z<y*z |] ==> x<y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1360
by (forw_inst_tac [("x","x*z")] (real_rinv_gt_zero 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1361
                       RS real_mult_less_mono1) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1362
by (auto_tac (claset(),simpset() addsimps 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1363
     [real_mult_assoc,real_not_refl2 RS not_sym]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1364
qed "real_mult_less_cancel1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1365
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1366
Goal "!!(x::real). [| 0r<z; z*x<z*y |] ==> x<y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1367
by (etac real_mult_less_cancel1 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1368
by (asm_full_simp_tac (simpset() addsimps [real_mult_commute]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1369
qed "real_mult_less_cancel2";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1370
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
  1371
Goal "0r < z ==> (x*z < y*z) = (x < y)";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1372
by (blast_tac (claset() addIs [real_mult_less_mono1,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1373
    real_mult_less_cancel1]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1374
qed "real_mult_less_iff1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1375
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
  1376
Goal "0r < z ==> (z*x < z*y) = (x < y)";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1377
by (blast_tac (claset() addIs [real_mult_less_mono2,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1378
    real_mult_less_cancel2]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1379
qed "real_mult_less_iff2";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1380
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1381
Addsimps [real_mult_less_iff1,real_mult_less_iff2];
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1382
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1383
Goal "!!(x::real). [| 0r<=z; x<y |] ==> x*z<=y*z";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1384
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
  1385
by (auto_tac (claset() addIs [real_mult_less_mono1],simpset()));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1386
qed "real_mult_le_less_mono1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1387
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1388
Goal "!!(x::real). [| 0r<=z; x<y |] ==> z*x<=z*y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1389
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
  1390
qed "real_mult_le_less_mono2";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1391
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1392
Goal "!!x y (z::real). [| 0r<=z; x<=y |] ==> z*x<=z*y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1393
by (dres_inst_tac [("x","x")] real_le_imp_less_or_eq 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1394
by (auto_tac (claset() addIs [real_mult_le_less_mono2,real_le_refl],simpset()));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1395
qed "real_mult_le_le_mono1";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1396
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1397
Goal "!!(x::real). x < y ==> x < (x + y)*rinv(1r + 1r)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1398
by (dres_inst_tac [("C","x")] real_add_less_mono2 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1399
by (dtac (real_add_self RS subst) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1400
by (dtac (real_zero_less_two RS real_rinv_gt_zero RS 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1401
          real_mult_less_mono1) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1402
by (asm_full_simp_tac (simpset() addsimps [real_mult_assoc]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1403
qed "real_less_half_sum";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1404
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1405
Goal "!!(x::real). x < y ==> (x + y)*rinv(1r + 1r) < y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1406
by (dres_inst_tac [("C","y")] real_add_less_mono1 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1407
by (dtac (real_add_self RS subst) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1408
by (dtac (real_zero_less_two RS real_rinv_gt_zero RS 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1409
          real_mult_less_mono1) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1410
by (asm_full_simp_tac (simpset() addsimps [real_mult_assoc]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1411
qed "real_gt_half_sum";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1412
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1413
Goal "!!(x::real). x < y ==> EX r. x < r & r < y";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1414
by (blast_tac (claset() addSIs [real_less_half_sum,real_gt_half_sum]) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1415
qed "real_dense";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1416
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1417
Goal "(EX n. rinv(%%#n) < r) = (EX n. 1r < r * %%#n)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1418
by (Step_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1419
by (dres_inst_tac [("n1","n")] (real_nat_less_zero 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1420
                       RS real_mult_less_mono1) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1421
by (dres_inst_tac [("n2","n")] (real_nat_less_zero RS 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1422
        real_rinv_gt_zero RS real_mult_less_mono1) 2);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1423
by (auto_tac (claset(),simpset() addsimps [(real_nat_less_zero RS 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1424
    real_not_refl2 RS not_sym),real_mult_assoc]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1425
qed "real_nat_rinv_Ex_iff";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1426
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1427
Goalw [real_nat_def] "(%%#n < %%#m) = (n < m)";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1428
by Auto_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1429
qed "real_nat_less_iff";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1430
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1431
Addsimps [real_nat_less_iff];
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1432
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
  1433
Goal "0r < u  ==> (u < rinv (%%#n)) = (%%#n < rinv(u))";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1434
by (Step_tac 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1435
by (res_inst_tac [("n2","n")] (real_nat_less_zero RS 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1436
    real_rinv_gt_zero RS real_mult_less_cancel1) 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1437
by (res_inst_tac [("x1","u")] ( real_rinv_gt_zero
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1438
   RS real_mult_less_cancel1) 2);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1439
by (auto_tac (claset(),simpset() addsimps [real_nat_less_zero, 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1440
    real_not_refl2 RS not_sym]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1441
by (res_inst_tac [("z","u")] real_mult_less_cancel2 1);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1442
by (res_inst_tac [("n1","n")] (real_nat_less_zero RS 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1443
    real_mult_less_cancel2) 3);
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1444
by (auto_tac (claset(),simpset() addsimps [real_nat_less_zero, 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1445
    real_not_refl2 RS not_sym,real_mult_assoc RS sym]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1446
qed "real_nat_less_rinv_iff";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1447
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5078
diff changeset
  1448
Goal "0r < u ==> (u = rinv(%%#n)) = (%%#n = rinv u)";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1449
by (auto_tac (claset(),simpset() addsimps [real_rinv_rinv,
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1450
    real_nat_less_zero,real_not_refl2 RS not_sym]));
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1451
qed "real_nat_rinv_eq_iff";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1452
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1453
(*
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1454
(*------------------------------------------------------------------
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1455
     lemmas about upper bounds and least upper bound
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1456
 ------------------------------------------------------------------*)
5148
74919e8f221c More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5143
diff changeset
  1457
Goalw [real_ub_def] "[| real_ub u S; x : S |] ==> x <= u";
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1458
by Auto_tac;
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1459
qed "real_ubD";
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1460
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
  1461
*)