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