doc-src/TutorialI/Types/Numbers.thy
author paulson
Mon, 12 Nov 2001 10:56:38 +0100
changeset 12156 d2758965362e
parent 11711 ecdfd237ffee
child 12843 50bd380e6675
permissions -rw-r--r--
new-style numerals without leading #, along with generic 0 and 1
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)"
paulson@12156
    87
apply (clarsimp split: nat_diff_split)
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@10603
   135
numbers.  
paulson@10603
   136
paulson@10603
   137
Division, remainder of negatives
paulson@10603
   138
paulson@10603
   139
paulson@10603
   140
@{thm[display] pos_mod_sign[no_vars]}
paulson@10603
   141
\rulename{pos_mod_sign}
paulson@10603
   142
paulson@10603
   143
@{thm[display] pos_mod_bound[no_vars]}
paulson@10603
   144
\rulename{pos_mod_bound}
paulson@10603
   145
paulson@10603
   146
@{thm[display] neg_mod_sign[no_vars]}
paulson@10603
   147
\rulename{neg_mod_sign}
paulson@10603
   148
paulson@10603
   149
@{thm[display] neg_mod_bound[no_vars]}
paulson@10603
   150
\rulename{neg_mod_bound}
paulson@10603
   151
paulson@10603
   152
@{thm[display] zdiv_zadd1_eq[no_vars]}
paulson@10603
   153
\rulename{zdiv_zadd1_eq}
paulson@10603
   154
paulson@10603
   155
@{thm[display] zmod_zadd1_eq[no_vars]}
paulson@10603
   156
\rulename{zmod_zadd1_eq}
paulson@10603
   157
paulson@10603
   158
@{thm[display] zdiv_zmult1_eq[no_vars]}
paulson@10603
   159
\rulename{zdiv_zmult1_eq}
paulson@10603
   160
paulson@10603
   161
@{thm[display] zmod_zmult1_eq[no_vars]}
paulson@10603
   162
\rulename{zmod_zmult1_eq}
paulson@10603
   163
paulson@10603
   164
@{thm[display] zdiv_zmult2_eq[no_vars]}
paulson@10603
   165
\rulename{zdiv_zmult2_eq}
paulson@10603
   166
paulson@10603
   167
@{thm[display] zmod_zmult2_eq[no_vars]}
paulson@10603
   168
\rulename{zmod_zmult2_eq}
paulson@10603
   169
paulson@10603
   170
@{thm[display] abs_mult[no_vars]}
paulson@10603
   171
\rulename{abs_mult}
paulson@10603
   172
*}  
paulson@10603
   173
paulson@11174
   174
lemma "abs (x+y) \<le> abs x + abs (y :: int)"
paulson@10880
   175
by arith
paulson@10880
   176
wenzelm@11711
   177
lemma "abs (2*x) = 2 * abs (x :: int)"
paulson@11174
   178
by (simp add: zabs_def) 
paulson@11174
   179
paulson@10764
   180
text {*REALS
paulson@10603
   181
paulson@10603
   182
@{thm[display] realpow_abs[no_vars]}
paulson@10603
   183
\rulename{realpow_abs}
paulson@10603
   184
paulson@10764
   185
@{thm[display] real_dense[no_vars]}
paulson@10764
   186
\rulename{real_dense}
paulson@10764
   187
paulson@10764
   188
@{thm[display] realpow_abs[no_vars]}
paulson@10764
   189
\rulename{realpow_abs}
paulson@10764
   190
paulson@10764
   191
@{thm[display] real_times_divide1_eq[no_vars]}
paulson@10764
   192
\rulename{real_times_divide1_eq}
paulson@10764
   193
paulson@10764
   194
@{thm[display] real_times_divide2_eq[no_vars]}
paulson@10764
   195
\rulename{real_times_divide2_eq}
paulson@10764
   196
paulson@10764
   197
@{thm[display] real_divide_divide1_eq[no_vars]}
paulson@10764
   198
\rulename{real_divide_divide1_eq}
paulson@10764
   199
paulson@10764
   200
@{thm[display] real_divide_divide2_eq[no_vars]}
paulson@10764
   201
\rulename{real_divide_divide2_eq}
paulson@10764
   202
paulson@10764
   203
@{thm[display] real_minus_divide_eq[no_vars]}
paulson@10764
   204
\rulename{real_minus_divide_eq}
paulson@10764
   205
paulson@10764
   206
@{thm[display] real_divide_minus_eq[no_vars]}
paulson@10764
   207
\rulename{real_divide_minus_eq}
paulson@10764
   208
paulson@10764
   209
This last NOT a simprule
paulson@10764
   210
paulson@10777
   211
@{thm[display] real_add_divide_distrib[no_vars]}
paulson@10777
   212
\rulename{real_add_divide_distrib}
paulson@10764
   213
*}
paulson@10603
   214
wenzelm@11711
   215
lemma "3/4 < (7/8 :: real)"
paulson@11174
   216
by simp 
paulson@11174
   217
wenzelm@11711
   218
lemma "P ((3/4) * (8/15 :: real))"
paulson@11174
   219
txt{*
paulson@11174
   220
@{subgoals[display,indent=0,margin=65]}
paulson@11174
   221
*};
paulson@11174
   222
apply simp 
paulson@11174
   223
txt{*
paulson@11174
   224
@{subgoals[display,indent=0,margin=65]}
paulson@11174
   225
*};
paulson@11174
   226
oops
paulson@11174
   227
wenzelm@11711
   228
lemma "(3/4) * (8/15) < (x :: real)"
paulson@11174
   229
txt{*
paulson@11174
   230
@{subgoals[display,indent=0,margin=65]}
paulson@11174
   231
*};
paulson@11174
   232
apply simp 
paulson@11174
   233
txt{*
paulson@11174
   234
@{subgoals[display,indent=0,margin=65]}
paulson@11174
   235
*};
paulson@11174
   236
oops
paulson@11174
   237
wenzelm@11711
   238
lemma "(3/4) * (10^15) < (x :: real)"
paulson@11174
   239
apply simp 
paulson@11174
   240
oops
paulson@11174
   241
paulson@11174
   242
paulson@11174
   243
paulson@10603
   244
end