300 by (dtac (inj_preal_of_prat RS injD) 1); |
300 by (dtac (inj_preal_of_prat RS injD) 1); |
301 by (dtac (inj_prat_of_pnat RS injD) 1); |
301 by (dtac (inj_prat_of_pnat RS injD) 1); |
302 by (etac (inj_pnat_of_nat RS injD) 1); |
302 by (etac (inj_pnat_of_nat RS injD) 1); |
303 qed "inj_real_of_posnat"; |
303 qed "inj_real_of_posnat"; |
304 |
304 |
305 Goalw [real_of_nat_def] "real_of_nat 0 = 0"; |
305 Goalw [real_of_nat_def] "real (0::nat) = 0"; |
306 by (simp_tac (simpset() addsimps [real_of_posnat_one]) 1); |
306 by (simp_tac (simpset() addsimps [real_of_posnat_one]) 1); |
307 qed "real_of_nat_zero"; |
307 qed "real_of_nat_zero"; |
308 |
308 |
309 Goalw [real_of_nat_def] "real_of_nat 1 = 1r"; |
309 Goalw [real_of_nat_def] "real (1::nat) = 1r"; |
310 by (simp_tac (simpset() addsimps [real_of_posnat_two, real_add_assoc]) 1); |
310 by (simp_tac (simpset() addsimps [real_of_posnat_two, real_add_assoc]) 1); |
311 qed "real_of_nat_one"; |
311 qed "real_of_nat_one"; |
312 Addsimps [real_of_nat_zero, real_of_nat_one]; |
312 Addsimps [real_of_nat_zero, real_of_nat_one]; |
313 |
313 |
314 Goalw [real_of_nat_def] |
314 Goalw [real_of_nat_def] |
315 "real_of_nat (m + n) = real_of_nat m + real_of_nat n"; |
315 "real (m + n) = real (m::nat) + real n"; |
316 by (simp_tac (simpset() addsimps |
316 by (simp_tac (simpset() addsimps |
317 [real_of_posnat_add,real_add_assoc RS sym]) 1); |
317 [real_of_posnat_add,real_add_assoc RS sym]) 1); |
318 qed "real_of_nat_add"; |
318 qed "real_of_nat_add"; |
319 Addsimps [real_of_nat_add]; |
319 Addsimps [real_of_nat_add]; |
320 |
320 |
321 (*Not for addsimps: often the LHS is used to represent a positive natural*) |
321 (*Not for addsimps: often the LHS is used to represent a positive natural*) |
322 Goalw [real_of_nat_def] "real_of_nat (Suc n) = real_of_nat n + 1r"; |
322 Goalw [real_of_nat_def] "real (Suc n) = real n + 1r"; |
323 by (simp_tac (simpset() addsimps [real_of_posnat_Suc] @ real_add_ac) 1); |
323 by (simp_tac (simpset() addsimps [real_of_posnat_Suc] @ real_add_ac) 1); |
324 qed "real_of_nat_Suc"; |
324 qed "real_of_nat_Suc"; |
325 |
325 |
326 Goalw [real_of_nat_def, real_of_posnat_def] |
326 Goalw [real_of_nat_def, real_of_posnat_def] |
327 "(real_of_nat n < real_of_nat m) = (n < m)"; |
327 "(real (n::nat) < real m) = (n < m)"; |
328 by Auto_tac; |
328 by Auto_tac; |
329 qed "real_of_nat_less_iff"; |
329 qed "real_of_nat_less_iff"; |
330 AddIffs [real_of_nat_less_iff]; |
330 AddIffs [real_of_nat_less_iff]; |
331 |
331 |
332 Goal "(real_of_nat n <= real_of_nat m) = (n <= m)"; |
332 Goal "(real (n::nat) <= real m) = (n <= m)"; |
333 by (simp_tac (simpset() addsimps [linorder_not_less RS sym]) 1); |
333 by (simp_tac (simpset() addsimps [linorder_not_less RS sym]) 1); |
334 qed "real_of_nat_le_iff"; |
334 qed "real_of_nat_le_iff"; |
335 AddIffs [real_of_nat_le_iff]; |
335 AddIffs [real_of_nat_le_iff]; |
336 |
336 |
337 Goal "inj real_of_nat"; |
337 Goal "inj (real :: nat => real)"; |
338 by (rtac injI 1); |
338 by (rtac injI 1); |
339 by (auto_tac (claset() addSIs [inj_real_of_posnat RS injD], |
339 by (auto_tac (claset() addSIs [inj_real_of_posnat RS injD], |
340 simpset() addsimps [real_of_nat_def,real_add_right_cancel])); |
340 simpset() addsimps [real_of_nat_def,real_add_right_cancel])); |
341 qed "inj_real_of_nat"; |
341 qed "inj_real_of_nat"; |
342 |
342 |
343 Goal "0 <= real_of_nat n"; |
343 Goal "0 <= real (n::nat)"; |
344 by (induct_tac "n" 1); |
344 by (induct_tac "n" 1); |
345 by (auto_tac (claset(), |
345 by (auto_tac (claset(), |
346 simpset () addsimps [real_of_nat_Suc])); |
346 simpset () addsimps [real_of_nat_Suc])); |
347 by (dtac real_add_le_less_mono 1); |
347 by (dtac real_add_le_less_mono 1); |
348 by (rtac real_zero_less_one 1); |
348 by (rtac real_zero_less_one 1); |
349 by (asm_full_simp_tac (simpset() addsimps [order_less_imp_le]) 1); |
349 by (asm_full_simp_tac (simpset() addsimps [order_less_imp_le]) 1); |
350 qed "real_of_nat_ge_zero"; |
350 qed "real_of_nat_ge_zero"; |
351 AddIffs [real_of_nat_ge_zero]; |
351 AddIffs [real_of_nat_ge_zero]; |
352 |
352 |
353 Goal "real_of_nat (m * n) = real_of_nat m * real_of_nat n"; |
353 Goal "real (m * n) = real (m::nat) * real n"; |
354 by (induct_tac "m" 1); |
354 by (induct_tac "m" 1); |
355 by (auto_tac (claset(), |
355 by (auto_tac (claset(), |
356 simpset() addsimps [real_of_nat_Suc, |
356 simpset() addsimps [real_of_nat_Suc, |
357 real_add_mult_distrib, real_add_commute])); |
357 real_add_mult_distrib, real_add_commute])); |
358 qed "real_of_nat_mult"; |
358 qed "real_of_nat_mult"; |
359 Addsimps [real_of_nat_mult]; |
359 Addsimps [real_of_nat_mult]; |
360 |
360 |
361 Goal "(real_of_nat n = real_of_nat m) = (n = m)"; |
361 Goal "(real (n::nat) = real m) = (n = m)"; |
362 by (auto_tac (claset() addDs [inj_real_of_nat RS injD], simpset())); |
362 by (auto_tac (claset() addDs [inj_real_of_nat RS injD], simpset())); |
363 qed "real_of_nat_eq_cancel"; |
363 qed "real_of_nat_eq_cancel"; |
364 Addsimps [real_of_nat_eq_cancel]; |
364 Addsimps [real_of_nat_eq_cancel]; |
365 |
365 |
366 Goal "n <= m --> real_of_nat (m - n) = real_of_nat m + (-real_of_nat n)"; |
366 Goal "n <= m --> real (m - n) = real (m::nat) - real n"; |
367 by (induct_tac "m" 1); |
367 by (induct_tac "m" 1); |
368 by (auto_tac (claset(), |
368 by (auto_tac (claset(), |
369 simpset() addsimps [Suc_diff_le, le_Suc_eq, real_of_nat_Suc, |
369 simpset() addsimps [real_diff_def, Suc_diff_le, le_Suc_eq, |
370 real_of_nat_zero] @ real_add_ac)); |
370 real_of_nat_Suc, real_of_nat_zero] @ real_add_ac)); |
371 qed_spec_mp "real_of_nat_minus"; |
371 qed_spec_mp "real_of_nat_diff"; |
372 |
372 |
373 Goalw [real_diff_def] |
373 Goal "(real (n::nat) = 0) = (n = 0)"; |
374 "n < m ==> real_of_nat (m - n) = real_of_nat m - real_of_nat n"; |
|
375 by (auto_tac (claset() addIs [real_of_nat_minus], simpset())); |
|
376 qed "real_of_nat_diff"; |
|
377 |
|
378 Goalw [real_diff_def] |
|
379 "n <= m ==> real_of_nat (m - n) = real_of_nat m - real_of_nat n"; |
|
380 by (etac real_of_nat_minus 1); |
|
381 qed "real_of_nat_diff2"; |
|
382 |
|
383 Goal "(real_of_nat n = 0) = (n = 0)"; |
|
384 by (auto_tac (claset() addIs [inj_real_of_nat RS injD], simpset())); |
374 by (auto_tac (claset() addIs [inj_real_of_nat RS injD], simpset())); |
385 qed "real_of_nat_zero_iff"; |
375 qed "real_of_nat_zero_iff"; |
386 |
376 |
387 Goal "neg z ==> real_of_nat (nat z) = 0"; |
377 Goal "neg z ==> real (nat z) = 0"; |
388 by (asm_simp_tac (simpset() addsimps [neg_nat, real_of_nat_zero]) 1); |
378 by (asm_simp_tac (simpset() addsimps [neg_nat, real_of_nat_zero]) 1); |
389 qed "real_of_nat_neg_int"; |
379 qed "real_of_nat_neg_int"; |
390 Addsimps [real_of_nat_neg_int]; |
380 Addsimps [real_of_nat_neg_int]; |
391 |
381 |
392 |
382 |