4 ML "Pretty.setmargin 64"
5 ML "IsarOutput.indent := 0" (*we don't want 5 for listing theorems*)
9 numeric literals; default simprules; can re-orient
14 @{subgoals[display,indent=0,margin=65]}
18 consts h :: "nat \<Rightarrow> nat"
20 "h i = (if i = 3 then 2 else i)"
28 @{thm[display] numeral_0_eq_0[no_vars]}
29 \rulename{numeral_0_eq_0}
31 @{thm[display] numeral_1_eq_1[no_vars]}
32 \rulename{numeral_1_eq_1}
34 @{thm[display] add_2_eq_Suc[no_vars]}
35 \rulename{add_2_eq_Suc}
37 @{thm[display] add_2_eq_Suc'[no_vars]}
38 \rulename{add_2_eq_Suc'}
40 @{thm[display] add_assoc[no_vars]}
43 @{thm[display] add_commute[no_vars]}
44 \rulename{add_commute}
46 @{thm[display] add_left_commute[no_vars]}
47 \rulename{add_left_commute}
49 these form add_ac; similarly there is mult_ac
52 lemma "Suc(i + j*l*k + m*n) = f (n*m + i + k*j*l)"
54 @{subgoals[display,indent=0,margin=65]}
56 apply (simp add: add_ac mult_ac)
58 @{subgoals[display,indent=0,margin=65]}
63 @{thm[display] mult_le_mono[no_vars]}
64 \rulename{mult_le_mono}
66 @{thm[display] mult_less_mono1[no_vars]}
67 \rulename{mult_less_mono1}
69 @{thm[display] div_le_mono[no_vars]}
70 \rulename{div_le_mono}
72 @{thm[display] add_mult_distrib[no_vars]}
73 \rulename{add_mult_distrib}
75 @{thm[display] diff_mult_distrib[no_vars]}
76 \rulename{diff_mult_distrib}
78 @{thm[display] mod_mult_distrib[no_vars]}
79 \rulename{mod_mult_distrib}
81 @{thm[display] nat_diff_split[no_vars]}
82 \rulename{nat_diff_split}
86 lemma "(n - 1) * (n + 1) = n * n - (1::nat)"
87 apply (clarsimp split: nat_diff_split iff del: less_Suc0)
88 --{* @{subgoals[display,indent=0,margin=65]} *}
89 apply (subgoal_tac "n=0", force, arith)
93 lemma "(n - 2) * (n + 2) = n * n - (4::nat)"
94 apply (simp split: nat_diff_split, clarify)
95 --{* @{subgoals[display,indent=0,margin=65]} *}
96 apply (subgoal_tac "n=0 | n=1", force, arith)
100 @{thm[display] mod_if[no_vars]}
103 @{thm[display] mod_div_equality[no_vars]}
104 \rulename{mod_div_equality}
107 @{thm[display] div_mult1_eq[no_vars]}
108 \rulename{div_mult1_eq}
110 @{thm[display] mod_mult1_eq[no_vars]}
111 \rulename{mod_mult1_eq}
113 @{thm[display] div_mult2_eq[no_vars]}
114 \rulename{div_mult2_eq}
116 @{thm[display] mod_mult2_eq[no_vars]}
117 \rulename{mod_mult2_eq}
119 @{thm[display] div_mult_mult1[no_vars]}
120 \rulename{div_mult_mult1}
122 @{thm[display] DIVISION_BY_ZERO_DIV[no_vars]}
123 \rulename{DIVISION_BY_ZERO_DIV}
125 @{thm[display] DIVISION_BY_ZERO_MOD[no_vars]}
126 \rulename{DIVISION_BY_ZERO_MOD}
128 @{thm[display] dvd_anti_sym[no_vars]}
129 \rulename{dvd_anti_sym}
131 @{thm[display] dvd_add[no_vars]}
134 For the integers, I'd list a few theorems that somehow involve negative
139 Division, remainder of negatives
142 @{thm[display] pos_mod_sign[no_vars]}
143 \rulename{pos_mod_sign}
145 @{thm[display] pos_mod_bound[no_vars]}
146 \rulename{pos_mod_bound}
148 @{thm[display] neg_mod_sign[no_vars]}
149 \rulename{neg_mod_sign}
151 @{thm[display] neg_mod_bound[no_vars]}
152 \rulename{neg_mod_bound}
154 @{thm[display] zdiv_zadd1_eq[no_vars]}
155 \rulename{zdiv_zadd1_eq}
157 @{thm[display] zmod_zadd1_eq[no_vars]}
158 \rulename{zmod_zadd1_eq}
160 @{thm[display] zdiv_zmult1_eq[no_vars]}
161 \rulename{zdiv_zmult1_eq}
163 @{thm[display] zmod_zmult1_eq[no_vars]}
164 \rulename{zmod_zmult1_eq}
166 @{thm[display] zdiv_zmult2_eq[no_vars]}
167 \rulename{zdiv_zmult2_eq}
169 @{thm[display] zmod_zmult2_eq[no_vars]}
170 \rulename{zmod_zmult2_eq}
172 @{thm[display] abs_mult[no_vars]}
176 lemma "abs (x+y) \<le> abs x + abs (y :: int)"
179 lemma "abs (2*x) = 2 * abs (x :: int)"
180 by (simp add: zabs_def)
183 text {*Induction rules for the Integers
185 @{thm[display] int_ge_induct[no_vars]}
186 \rulename{int_ge_induct}
188 @{thm[display] int_gr_induct[no_vars]}
189 \rulename{int_gr_induct}
191 @{thm[display] int_le_induct[no_vars]}
192 \rulename{int_le_induct}
194 @{thm[display] int_less_induct[no_vars]}
195 \rulename{int_less_induct}
200 @{thm[display] realpow_abs[no_vars]}
201 \rulename{realpow_abs}
203 @{thm[display] real_dense[no_vars]}
204 \rulename{real_dense}
206 @{thm[display] realpow_abs[no_vars]}
207 \rulename{realpow_abs}
209 @{thm[display] real_times_divide1_eq[no_vars]}
210 \rulename{real_times_divide1_eq}
212 @{thm[display] real_times_divide2_eq[no_vars]}
213 \rulename{real_times_divide2_eq}
215 @{thm[display] real_divide_divide1_eq[no_vars]}
216 \rulename{real_divide_divide1_eq}
218 @{thm[display] real_divide_divide2_eq[no_vars]}
219 \rulename{real_divide_divide2_eq}
221 @{thm[display] real_minus_divide_eq[no_vars]}
222 \rulename{real_minus_divide_eq}
224 @{thm[display] real_divide_minus_eq[no_vars]}
225 \rulename{real_divide_minus_eq}
227 This last NOT a simprule
229 @{thm[display] real_add_divide_distrib[no_vars]}
230 \rulename{real_add_divide_distrib}
233 lemma "3/4 < (7/8 :: real)"
236 lemma "P ((3/4) * (8/15 :: real))"
238 @{subgoals[display,indent=0,margin=65]}
242 @{subgoals[display,indent=0,margin=65]}
246 lemma "(3/4) * (8/15) < (x :: real)"
248 @{subgoals[display,indent=0,margin=65]}
252 @{subgoals[display,indent=0,margin=65]}
256 lemma "(3/4) * (10^15) < (x :: real)"