src/HOL/Real/RealOrd.ML
changeset 10919 144ede948e58
parent 10784 27e4d90b35b5
child 11464 ddea204de5bc
equal deleted inserted replaced
10918:9679326489cd 10919:144ede948e58
   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