doc-src/TutorialI/Types/Numbers.thy
author paulson
Mon, 12 Jan 2004 16:51:45 +0100
changeset 14353 79f9fbef9106
parent 14295 7f115e5c5de4
child 14400 6069098854b9
permissions -rw-r--r--
Added lemmas to Ring_and_Field with slightly modified simplification rules

Deleted some little-used integer theorems, replacing them by the generic ones
in Ring_and_Field

Consolidated integer powers
paulson@10603
     1
(* ID:         $Id$ *)
paulson@10764
     2
theory Numbers = Real:
paulson@10603
     3
paulson@10603
     4
ML "Pretty.setmargin 64"
paulson@10777
     5
ML "IsarOutput.indent := 0"  (*we don't want 5 for listing theorems*)
paulson@10603
     6
paulson@10603
     7
text{*
paulson@10603
     8
paulson@10603
     9
numeric literals; default simprules; can re-orient
paulson@10603
    10
*}
paulson@10603
    11
wenzelm@11711
    12
lemma "2 * m = m + m"
paulson@10880
    13
txt{*
paulson@10880
    14
@{subgoals[display,indent=0,margin=65]}
paulson@10880
    15
*};
paulson@10603
    16
oops
paulson@10603
    17
paulson@10880
    18
consts h :: "nat \<Rightarrow> nat"
paulson@10880
    19
recdef h "{}"
wenzelm@11711
    20
"h i = (if i = 3 then 2 else i)"
paulson@10880
    21
paulson@10603
    22
text{*
wenzelm@11711
    23
@{term"h 3 = 2"}
paulson@10880
    24
@{term"h i  = i"}
paulson@10880
    25
*}
paulson@10603
    26
paulson@10880
    27
text{*
paulson@10603
    28
@{thm[display] numeral_0_eq_0[no_vars]}
paulson@10603
    29
\rulename{numeral_0_eq_0}
paulson@10603
    30
paulson@10603
    31
@{thm[display] numeral_1_eq_1[no_vars]}
paulson@10603
    32
\rulename{numeral_1_eq_1}
paulson@10603
    33
paulson@10603
    34
@{thm[display] add_2_eq_Suc[no_vars]}
paulson@10603
    35
\rulename{add_2_eq_Suc}
paulson@10603
    36
paulson@10603
    37
@{thm[display] add_2_eq_Suc'[no_vars]}
paulson@10603
    38
\rulename{add_2_eq_Suc'}
paulson@10603
    39
paulson@10603
    40
@{thm[display] add_assoc[no_vars]}
paulson@10603
    41
\rulename{add_assoc}
paulson@10603
    42
paulson@10603
    43
@{thm[display] add_commute[no_vars]}
paulson@10603
    44
\rulename{add_commute}
paulson@10603
    45
paulson@10603
    46
@{thm[display] add_left_commute[no_vars]}
paulson@10603
    47
\rulename{add_left_commute}
paulson@10603
    48
paulson@10603
    49
these form add_ac; similarly there is mult_ac
paulson@10603
    50
*}
paulson@10603
    51
paulson@10603
    52
lemma "Suc(i + j*l*k + m*n) = f (n*m + i + k*j*l)"
paulson@10880
    53
txt{*
paulson@10880
    54
@{subgoals[display,indent=0,margin=65]}
paulson@10880
    55
*};
paulson@10603
    56
apply (simp add: add_ac mult_ac)
paulson@10880
    57
txt{*
paulson@10880
    58
@{subgoals[display,indent=0,margin=65]}
paulson@10880
    59
*};
paulson@10603
    60
oops
paulson@10603
    61
paulson@10603
    62
text{*
paulson@10603
    63
@{thm[display] mult_le_mono[no_vars]}
paulson@10603
    64
\rulename{mult_le_mono}
paulson@10603
    65
paulson@10603
    66
@{thm[display] mult_less_mono1[no_vars]}
paulson@10603
    67
\rulename{mult_less_mono1}
paulson@10603
    68
paulson@10603
    69
@{thm[display] div_le_mono[no_vars]}
paulson@10603
    70
\rulename{div_le_mono}
paulson@10603
    71
paulson@10603
    72
@{thm[display] add_mult_distrib[no_vars]}
paulson@10603
    73
\rulename{add_mult_distrib}
paulson@10603
    74
paulson@10603
    75
@{thm[display] diff_mult_distrib[no_vars]}
paulson@10603
    76
\rulename{diff_mult_distrib}
paulson@10603
    77
paulson@10603
    78
@{thm[display] mod_mult_distrib[no_vars]}
paulson@10603
    79
\rulename{mod_mult_distrib}
paulson@10603
    80
paulson@10603
    81
@{thm[display] nat_diff_split[no_vars]}
paulson@10603
    82
\rulename{nat_diff_split}
paulson@10603
    83
*}
paulson@10603
    84
paulson@10603
    85
paulson@12156
    86
lemma "(n - 1) * (n + 1) = n * n - (1::nat)"
wenzelm@12843
    87
apply (clarsimp split: nat_diff_split iff del: less_Suc0)
paulson@12156
    88
 --{* @{subgoals[display,indent=0,margin=65]} *}
paulson@12156
    89
apply (subgoal_tac "n=0", force, arith)
paulson@12156
    90
done
paulson@12156
    91
paulson@12156
    92
wenzelm@11711
    93
lemma "(n - 2) * (n + 2) = n * n - (4::nat)"
paulson@12156
    94
apply (simp split: nat_diff_split, clarify)
paulson@11480
    95
 --{* @{subgoals[display,indent=0,margin=65]} *}
paulson@11480
    96
apply (subgoal_tac "n=0 | n=1", force, arith)
paulson@10603
    97
done
paulson@10603
    98
paulson@10603
    99
text{*
paulson@10603
   100
@{thm[display] mod_if[no_vars]}
paulson@10603
   101
\rulename{mod_if}
paulson@10603
   102
paulson@10603
   103
@{thm[display] mod_div_equality[no_vars]}
paulson@10603
   104
\rulename{mod_div_equality}
paulson@10603
   105
paulson@10603
   106
paulson@10603
   107
@{thm[display] div_mult1_eq[no_vars]}
paulson@10603
   108
\rulename{div_mult1_eq}
paulson@10603
   109
paulson@10603
   110
@{thm[display] mod_mult1_eq[no_vars]}
paulson@10603
   111
\rulename{mod_mult1_eq}
paulson@10603
   112
paulson@10603
   113
@{thm[display] div_mult2_eq[no_vars]}
paulson@10603
   114
\rulename{div_mult2_eq}
paulson@10603
   115
paulson@10603
   116
@{thm[display] mod_mult2_eq[no_vars]}
paulson@10603
   117
\rulename{mod_mult2_eq}
paulson@10603
   118
paulson@10603
   119
@{thm[display] div_mult_mult1[no_vars]}
paulson@10603
   120
\rulename{div_mult_mult1}
paulson@10603
   121
paulson@10603
   122
@{thm[display] DIVISION_BY_ZERO_DIV[no_vars]}
paulson@10603
   123
\rulename{DIVISION_BY_ZERO_DIV}
paulson@10603
   124
paulson@10603
   125
@{thm[display] DIVISION_BY_ZERO_MOD[no_vars]}
paulson@10603
   126
\rulename{DIVISION_BY_ZERO_MOD}
paulson@10603
   127
paulson@10603
   128
@{thm[display] dvd_anti_sym[no_vars]}
paulson@10603
   129
\rulename{dvd_anti_sym}
paulson@10603
   130
paulson@10603
   131
@{thm[display] dvd_add[no_vars]}
paulson@10603
   132
\rulename{dvd_add}
paulson@10603
   133
paulson@10603
   134
For the integers, I'd list a few theorems that somehow involve negative 
paulson@13757
   135
numbers.*}
paulson@10603
   136
paulson@13757
   137
paulson@13757
   138
text{*
paulson@10603
   139
Division, remainder of negatives
paulson@10603
   140
paulson@10603
   141
paulson@10603
   142
@{thm[display] pos_mod_sign[no_vars]}
paulson@10603
   143
\rulename{pos_mod_sign}
paulson@10603
   144
paulson@10603
   145
@{thm[display] pos_mod_bound[no_vars]}
paulson@10603
   146
\rulename{pos_mod_bound}
paulson@10603
   147
paulson@10603
   148
@{thm[display] neg_mod_sign[no_vars]}
paulson@10603
   149
\rulename{neg_mod_sign}
paulson@10603
   150
paulson@10603
   151
@{thm[display] neg_mod_bound[no_vars]}
paulson@10603
   152
\rulename{neg_mod_bound}
paulson@10603
   153
paulson@10603
   154
@{thm[display] zdiv_zadd1_eq[no_vars]}
paulson@10603
   155
\rulename{zdiv_zadd1_eq}
paulson@10603
   156
paulson@10603
   157
@{thm[display] zmod_zadd1_eq[no_vars]}
paulson@10603
   158
\rulename{zmod_zadd1_eq}
paulson@10603
   159
paulson@10603
   160
@{thm[display] zdiv_zmult1_eq[no_vars]}
paulson@10603
   161
\rulename{zdiv_zmult1_eq}
paulson@10603
   162
paulson@10603
   163
@{thm[display] zmod_zmult1_eq[no_vars]}
paulson@10603
   164
\rulename{zmod_zmult1_eq}
paulson@10603
   165
paulson@10603
   166
@{thm[display] zdiv_zmult2_eq[no_vars]}
paulson@10603
   167
\rulename{zdiv_zmult2_eq}
paulson@10603
   168
paulson@10603
   169
@{thm[display] zmod_zmult2_eq[no_vars]}
paulson@10603
   170
\rulename{zmod_zmult2_eq}
paulson@10603
   171
paulson@10603
   172
@{thm[display] abs_mult[no_vars]}
paulson@10603
   173
\rulename{abs_mult}
paulson@10603
   174
*}  
paulson@10603
   175
paulson@11174
   176
lemma "abs (x+y) \<le> abs x + abs (y :: int)"
paulson@10880
   177
by arith
paulson@10880
   178
wenzelm@11711
   179
lemma "abs (2*x) = 2 * abs (x :: int)"
paulson@11174
   180
by (simp add: zabs_def) 
paulson@11174
   181
paulson@13757
   182
paulson@13757
   183
text {*Induction rules for the Integers
paulson@13757
   184
paulson@13757
   185
@{thm[display] int_ge_induct[no_vars]}
paulson@13757
   186
\rulename{int_ge_induct}
paulson@13757
   187
paulson@13757
   188
@{thm[display] int_gr_induct[no_vars]}
paulson@13757
   189
\rulename{int_gr_induct}
paulson@13757
   190
paulson@13757
   191
@{thm[display] int_le_induct[no_vars]}
paulson@13757
   192
\rulename{int_le_induct}
paulson@13757
   193
paulson@13757
   194
@{thm[display] int_less_induct[no_vars]}
paulson@13757
   195
\rulename{int_less_induct}
paulson@13757
   196
*}  
paulson@13757
   197
paulson@10764
   198
text {*REALS
paulson@10603
   199
paulson@14295
   200
@{thm[display] dense[no_vars]}
paulson@14295
   201
\rulename{dense}
paulson@10764
   202
paulson@14353
   203
@{thm[display] power_abs[no_vars]}
paulson@14353
   204
\rulename{power_abs}
paulson@10764
   205
paulson@14288
   206
@{thm[display] times_divide_eq_right[no_vars]}
paulson@14288
   207
\rulename{times_divide_eq_right}
paulson@10764
   208
paulson@14288
   209
@{thm[display] times_divide_eq_left[no_vars]}
paulson@14288
   210
\rulename{times_divide_eq_left}
paulson@10764
   211
paulson@14288
   212
@{thm[display] divide_divide_eq_right[no_vars]}
paulson@14288
   213
\rulename{divide_divide_eq_right}
paulson@10764
   214
paulson@14288
   215
@{thm[display] divide_divide_eq_left[no_vars]}
paulson@14288
   216
\rulename{divide_divide_eq_left}
paulson@10764
   217
paulson@14295
   218
@{thm[display] minus_divide_left[no_vars]}
paulson@14295
   219
\rulename{minus_divide_left}
paulson@10764
   220
paulson@14295
   221
@{thm[display] minus_divide_right[no_vars]}
paulson@14295
   222
\rulename{minus_divide_right}
paulson@10764
   223
paulson@10764
   224
This last NOT a simprule
paulson@10764
   225
paulson@14295
   226
@{thm[display] add_divide_distrib[no_vars]}
paulson@14295
   227
\rulename{add_divide_distrib}
paulson@10764
   228
*}
paulson@10603
   229
wenzelm@11711
   230
lemma "3/4 < (7/8 :: real)"
paulson@11174
   231
by simp 
paulson@11174
   232
wenzelm@11711
   233
lemma "P ((3/4) * (8/15 :: real))"
paulson@11174
   234
txt{*
paulson@11174
   235
@{subgoals[display,indent=0,margin=65]}
paulson@11174
   236
*};
paulson@11174
   237
apply simp 
paulson@11174
   238
txt{*
paulson@11174
   239
@{subgoals[display,indent=0,margin=65]}
paulson@11174
   240
*};
paulson@11174
   241
oops
paulson@11174
   242
wenzelm@11711
   243
lemma "(3/4) * (8/15) < (x :: real)"
paulson@11174
   244
txt{*
paulson@11174
   245
@{subgoals[display,indent=0,margin=65]}
paulson@11174
   246
*};
paulson@11174
   247
apply simp 
paulson@11174
   248
txt{*
paulson@11174
   249
@{subgoals[display,indent=0,margin=65]}
paulson@11174
   250
*};
paulson@11174
   251
oops
paulson@11174
   252
wenzelm@11711
   253
lemma "(3/4) * (10^15) < (x :: real)"
paulson@11174
   254
apply simp 
paulson@11174
   255
oops
paulson@11174
   256
paulson@11174
   257
paulson@11174
   258
paulson@10603
   259
end