doc-src/TutorialI/Types/Numbers.thy
author paulson
Fri, 12 Jan 2001 16:10:56 +0100
changeset 10880 729a36e469ec
parent 10777 a5a6255748c3
child 11174 96a533d300a6
permissions -rw-r--r--
updated for new version of numerics.tex
     1 (* ID:         $Id$ *)
     2 theory Numbers = Real:
     3 
     4 ML "Pretty.setmargin 64"
     5 ML "IsarOutput.indent := 0"  (*we don't want 5 for listing theorems*)
     6 
     7 text{*
     8 
     9 numeric literals; default simprules; can re-orient
    10 *}
    11 
    12 lemma "#2 * m = m + m"
    13 txt{*
    14 @{subgoals[display,indent=0,margin=65]}
    15 *};
    16 oops
    17 
    18 consts h :: "nat \<Rightarrow> nat"
    19 recdef h "{}"
    20 "h i = (if i = #3 then #2 else i)"
    21 
    22 text{*
    23 @{term"h #3 = #2"}
    24 @{term"h i  = i"}
    25 *}
    26 
    27 text{*
    28 @{thm[display] numeral_0_eq_0[no_vars]}
    29 \rulename{numeral_0_eq_0}
    30 
    31 @{thm[display] numeral_1_eq_1[no_vars]}
    32 \rulename{numeral_1_eq_1}
    33 
    34 @{thm[display] add_2_eq_Suc[no_vars]}
    35 \rulename{add_2_eq_Suc}
    36 
    37 @{thm[display] add_2_eq_Suc'[no_vars]}
    38 \rulename{add_2_eq_Suc'}
    39 
    40 @{thm[display] add_assoc[no_vars]}
    41 \rulename{add_assoc}
    42 
    43 @{thm[display] add_commute[no_vars]}
    44 \rulename{add_commute}
    45 
    46 @{thm[display] add_left_commute[no_vars]}
    47 \rulename{add_left_commute}
    48 
    49 these form add_ac; similarly there is mult_ac
    50 *}
    51 
    52 lemma "Suc(i + j*l*k + m*n) = f (n*m + i + k*j*l)"
    53 txt{*
    54 @{subgoals[display,indent=0,margin=65]}
    55 *};
    56 apply (simp add: add_ac mult_ac)
    57 txt{*
    58 @{subgoals[display,indent=0,margin=65]}
    59 *};
    60 oops
    61 
    62 text{*
    63 @{thm[display] mult_le_mono[no_vars]}
    64 \rulename{mult_le_mono}
    65 
    66 @{thm[display] mult_less_mono1[no_vars]}
    67 \rulename{mult_less_mono1}
    68 
    69 @{thm[display] div_le_mono[no_vars]}
    70 \rulename{div_le_mono}
    71 
    72 @{thm[display] add_mult_distrib[no_vars]}
    73 \rulename{add_mult_distrib}
    74 
    75 @{thm[display] diff_mult_distrib[no_vars]}
    76 \rulename{diff_mult_distrib}
    77 
    78 @{thm[display] mod_mult_distrib[no_vars]}
    79 \rulename{mod_mult_distrib}
    80 
    81 @{thm[display] nat_diff_split[no_vars]}
    82 \rulename{nat_diff_split}
    83 *}
    84 
    85 
    86 lemma "(n-1)*(n+1) = n*n - 1"
    87 apply (simp split: nat_diff_split)
    88 done
    89 
    90 text{*
    91 @{thm[display] mod_if[no_vars]}
    92 \rulename{mod_if}
    93 
    94 @{thm[display] mod_div_equality[no_vars]}
    95 \rulename{mod_div_equality}
    96 
    97 
    98 @{thm[display] div_mult1_eq[no_vars]}
    99 \rulename{div_mult1_eq}
   100 
   101 @{thm[display] mod_mult1_eq[no_vars]}
   102 \rulename{mod_mult1_eq}
   103 
   104 @{thm[display] div_mult2_eq[no_vars]}
   105 \rulename{div_mult2_eq}
   106 
   107 @{thm[display] mod_mult2_eq[no_vars]}
   108 \rulename{mod_mult2_eq}
   109 
   110 @{thm[display] div_mult_mult1[no_vars]}
   111 \rulename{div_mult_mult1}
   112 
   113 @{thm[display] DIVISION_BY_ZERO_DIV[no_vars]}
   114 \rulename{DIVISION_BY_ZERO_DIV}
   115 
   116 @{thm[display] DIVISION_BY_ZERO_MOD[no_vars]}
   117 \rulename{DIVISION_BY_ZERO_MOD}
   118 
   119 @{thm[display] dvd_anti_sym[no_vars]}
   120 \rulename{dvd_anti_sym}
   121 
   122 @{thm[display] dvd_add[no_vars]}
   123 \rulename{dvd_add}
   124 
   125 For the integers, I'd list a few theorems that somehow involve negative 
   126 numbers.  
   127 
   128 Division, remainder of negatives
   129 
   130 
   131 @{thm[display] pos_mod_sign[no_vars]}
   132 \rulename{pos_mod_sign}
   133 
   134 @{thm[display] pos_mod_bound[no_vars]}
   135 \rulename{pos_mod_bound}
   136 
   137 @{thm[display] neg_mod_sign[no_vars]}
   138 \rulename{neg_mod_sign}
   139 
   140 @{thm[display] neg_mod_bound[no_vars]}
   141 \rulename{neg_mod_bound}
   142 
   143 @{thm[display] zdiv_zadd1_eq[no_vars]}
   144 \rulename{zdiv_zadd1_eq}
   145 
   146 @{thm[display] zmod_zadd1_eq[no_vars]}
   147 \rulename{zmod_zadd1_eq}
   148 
   149 @{thm[display] zdiv_zmult1_eq[no_vars]}
   150 \rulename{zdiv_zmult1_eq}
   151 
   152 @{thm[display] zmod_zmult1_eq[no_vars]}
   153 \rulename{zmod_zmult1_eq}
   154 
   155 @{thm[display] zdiv_zmult2_eq[no_vars]}
   156 \rulename{zdiv_zmult2_eq}
   157 
   158 @{thm[display] zmod_zmult2_eq[no_vars]}
   159 \rulename{zmod_zmult2_eq}
   160 
   161 @{thm[display] abs_mult[no_vars]}
   162 \rulename{abs_mult}
   163 *}  
   164 
   165 lemma "\<lbrakk>abs x < a; abs y < b\<rbrakk> \<Longrightarrow> abs x + abs y < (a + b :: int)"
   166 by arith
   167 
   168 text {*REALS
   169 
   170 @{thm[display] realpow_abs[no_vars]}
   171 \rulename{realpow_abs}
   172 
   173 @{thm[display] real_dense[no_vars]}
   174 \rulename{real_dense}
   175 
   176 @{thm[display] realpow_abs[no_vars]}
   177 \rulename{realpow_abs}
   178 
   179 @{thm[display] real_times_divide1_eq[no_vars]}
   180 \rulename{real_times_divide1_eq}
   181 
   182 @{thm[display] real_times_divide2_eq[no_vars]}
   183 \rulename{real_times_divide2_eq}
   184 
   185 @{thm[display] real_divide_divide1_eq[no_vars]}
   186 \rulename{real_divide_divide1_eq}
   187 
   188 @{thm[display] real_divide_divide2_eq[no_vars]}
   189 \rulename{real_divide_divide2_eq}
   190 
   191 @{thm[display] real_minus_divide_eq[no_vars]}
   192 \rulename{real_minus_divide_eq}
   193 
   194 @{thm[display] real_divide_minus_eq[no_vars]}
   195 \rulename{real_divide_minus_eq}
   196 
   197 This last NOT a simprule
   198 
   199 @{thm[display] real_add_divide_distrib[no_vars]}
   200 \rulename{real_add_divide_distrib}
   201 *}
   202 
   203 end