src/HOL/Real/RealDef.ML
changeset 11713 883d559b0b8c
parent 11701 3d51fbf81c17
child 12018 ec054019c910
equal deleted inserted replaced
11712:deb8cac87063 11713:883d559b0b8c
   336 
   336 
   337 (* real multiplication is an AC operator *)
   337 (* real multiplication is an AC operator *)
   338 bind_thms ("real_mult_ac", 
   338 bind_thms ("real_mult_ac", 
   339 	   [real_mult_assoc, real_mult_commute, real_mult_left_commute]);
   339 	   [real_mult_assoc, real_mult_commute, real_mult_left_commute]);
   340 
   340 
   341 Goalw [real_one_def,pnat_one_def] "1r * z = z";
   341 Goalw [real_one_def,pnat_one_def] "(1::real) * z = z";
   342 by (res_inst_tac [("z","z")] eq_Abs_REAL 1);
   342 by (res_inst_tac [("z","z")] eq_Abs_REAL 1);
   343 by (asm_full_simp_tac
   343 by (asm_full_simp_tac
   344     (simpset() addsimps [real_mult,
   344     (simpset() addsimps [real_mult,
   345 			 preal_add_mult_distrib2,preal_mult_1_right] 
   345 			 preal_add_mult_distrib2,preal_mult_1_right] 
   346                         @ preal_mult_ac @ preal_add_ac) 1);
   346                         @ preal_mult_ac @ preal_add_ac) 1);
   347 qed "real_mult_1";
   347 qed "real_mult_1";
   348 
   348 
   349 Addsimps [real_mult_1];
   349 Addsimps [real_mult_1];
   350 
   350 
   351 Goal "z * 1r = z";
   351 Goal "z * (1::real) = z";
   352 by (simp_tac (simpset() addsimps [real_mult_commute]) 1);
   352 by (simp_tac (simpset() addsimps [real_mult_commute]) 1);
   353 qed "real_mult_1_right";
   353 qed "real_mult_1_right";
   354 
   354 
   355 Addsimps [real_mult_1_right];
   355 Addsimps [real_mult_1_right];
   356 
   356 
   380 				  real_minus_mult_eq1]) 1);
   380 				  real_minus_mult_eq1]) 1);
   381 qed "real_minus_mult_eq2";
   381 qed "real_minus_mult_eq2";
   382 
   382 
   383 Addsimps [real_minus_mult_eq1 RS sym, real_minus_mult_eq2 RS sym];
   383 Addsimps [real_minus_mult_eq1 RS sym, real_minus_mult_eq2 RS sym];
   384 
   384 
   385 Goal "(- 1r) * z = -z";
   385 Goal "(- (1::real)) * z = -z";
   386 by (Simp_tac 1);
   386 by (Simp_tac 1);
   387 qed "real_mult_minus_1";
   387 qed "real_mult_minus_1";
   388 
   388 
   389 Goal "z * (- 1r) = -z";
   389 Goal "z * (- (1::real)) = -z";
   390 by (stac real_mult_commute 1);
   390 by (stac real_mult_commute 1);
   391 by (Simp_tac 1);
   391 by (Simp_tac 1);
   392 qed "real_mult_minus_1_right";
   392 qed "real_mult_minus_1_right";
   393 
   393 
   394 Addsimps [real_mult_minus_1_right];
   394 Addsimps [real_mult_minus_1_right];
   439 by (simp_tac (simpset() addsimps [real_mult_commute', 
   439 by (simp_tac (simpset() addsimps [real_mult_commute', 
   440 				  real_diff_mult_distrib]) 1);
   440 				  real_diff_mult_distrib]) 1);
   441 qed "real_diff_mult_distrib2";
   441 qed "real_diff_mult_distrib2";
   442 
   442 
   443 (*** one and zero are distinct ***)
   443 (*** one and zero are distinct ***)
   444 Goalw [real_zero_def,real_one_def] "0 ~= 1r";
   444 Goalw [real_zero_def,real_one_def] "0 ~= (1::real)";
   445 by (auto_tac (claset(),
   445 by (auto_tac (claset(),
   446          simpset() addsimps [preal_self_less_add_left RS preal_not_refl2]));
   446          simpset() addsimps [preal_self_less_add_left RS preal_not_refl2]));
   447 qed "real_zero_not_eq_one";
   447 qed "real_zero_not_eq_one";
   448 
   448 
   449 (*** existence of inverse ***)
   449 (*** existence of inverse ***)
   451 Goalw [real_zero_def] "0 = Abs_REAL (realrel `` {(x, x)})";
   451 Goalw [real_zero_def] "0 = Abs_REAL (realrel `` {(x, x)})";
   452 by (auto_tac (claset(),simpset() addsimps [preal_add_commute]));
   452 by (auto_tac (claset(),simpset() addsimps [preal_add_commute]));
   453 qed "real_zero_iff";
   453 qed "real_zero_iff";
   454 
   454 
   455 Goalw [real_zero_def,real_one_def] 
   455 Goalw [real_zero_def,real_one_def] 
   456           "!!(x::real). x ~= 0 ==> EX y. x*y = 1r";
   456           "!!(x::real). x ~= 0 ==> EX y. x*y = (1::real)";
   457 by (res_inst_tac [("z","x")] eq_Abs_REAL 1);
   457 by (res_inst_tac [("z","x")] eq_Abs_REAL 1);
   458 by (cut_inst_tac [("r1.0","xa"),("r2.0","y")] preal_linear 1);
   458 by (cut_inst_tac [("r1.0","xa"),("r2.0","y")] preal_linear 1);
   459 by (auto_tac (claset() addSDs [preal_less_add_left_Ex],
   459 by (auto_tac (claset() addSDs [preal_less_add_left_Ex],
   460            simpset() addsimps [real_zero_iff RS sym]));
   460            simpset() addsimps [real_zero_iff RS sym]));
   461 by (res_inst_tac [("x","Abs_REAL (realrel `` \
   461 by (res_inst_tac [("x","Abs_REAL (realrel `` \
   469     pnat_one_def,preal_mult_1_right,preal_add_mult_distrib2,
   469     pnat_one_def,preal_mult_1_right,preal_add_mult_distrib2,
   470     preal_add_mult_distrib,preal_mult_1,preal_mult_inv_right] 
   470     preal_add_mult_distrib,preal_mult_1,preal_mult_inv_right] 
   471     @ preal_add_ac @ preal_mult_ac));
   471     @ preal_add_ac @ preal_mult_ac));
   472 qed "real_mult_inv_right_ex";
   472 qed "real_mult_inv_right_ex";
   473 
   473 
   474 Goal "x ~= 0 ==> EX y. y*x = 1r";
   474 Goal "x ~= 0 ==> EX y. y*x = (1::real)";
   475 by (dtac real_mult_inv_right_ex 1); 
   475 by (dtac real_mult_inv_right_ex 1); 
   476 by (auto_tac (claset(), simpset() addsimps [real_mult_commute]));  
   476 by (auto_tac (claset(), simpset() addsimps [real_mult_commute]));  
   477 qed "real_mult_inv_left_ex";
   477 qed "real_mult_inv_left_ex";
   478 
   478 
   479 Goalw [real_inverse_def] "x ~= 0 ==> inverse(x)*x = 1r";
   479 Goalw [real_inverse_def] "x ~= 0 ==> inverse(x)*x = (1::real)";
   480 by (ftac real_mult_inv_left_ex 1);
   480 by (ftac real_mult_inv_left_ex 1);
   481 by (Step_tac 1);
   481 by (Step_tac 1);
   482 by (rtac someI2 1);
   482 by (rtac someI2 1);
   483 by Auto_tac;
   483 by Auto_tac;
   484 qed "real_mult_inv_left";
   484 qed "real_mult_inv_left";
   485 Addsimps [real_mult_inv_left];
   485 Addsimps [real_mult_inv_left];
   486 
   486 
   487 Goal "x ~= 0 ==> x*inverse(x) = 1r";
   487 Goal "x ~= 0 ==> x*inverse(x) = (1::real)";
   488 by (stac real_mult_commute 1);
   488 by (stac real_mult_commute 1);
   489 by (auto_tac (claset(), simpset() addsimps [real_mult_inv_left]));
   489 by (auto_tac (claset(), simpset() addsimps [real_mult_inv_left]));
   490 qed "real_mult_inv_right";
   490 qed "real_mult_inv_right";
   491 Addsimps [real_mult_inv_right];
   491 Addsimps [real_mult_inv_right];
   492 
   492 
   546 by (etac real_inverse_not_zero 1);
   546 by (etac real_inverse_not_zero 1);
   547 by (auto_tac (claset() addDs [real_inverse_not_zero],simpset()));
   547 by (auto_tac (claset() addDs [real_inverse_not_zero],simpset()));
   548 qed "real_inverse_inverse";
   548 qed "real_inverse_inverse";
   549 Addsimps [real_inverse_inverse];
   549 Addsimps [real_inverse_inverse];
   550 
   550 
   551 Goalw [real_inverse_def] "inverse(1r) = 1r";
   551 Goalw [real_inverse_def] "inverse((1::real)) = (1::real)";
   552 by (cut_facts_tac [real_zero_not_eq_one RS 
   552 by (cut_facts_tac [real_zero_not_eq_one RS 
   553                    not_sym RS real_mult_inv_left_ex] 1);
   553                    not_sym RS real_mult_inv_left_ex] 1);
   554 by (auto_tac (claset(),
   554 by (auto_tac (claset(),
   555 	      simpset() addsimps [real_zero_not_eq_one RS not_sym]));
   555 	      simpset() addsimps [real_zero_not_eq_one RS not_sym]));
   556 qed "real_inverse_1";
   556 qed "real_inverse_1";