src/HOL/Complex/NSComplexBin.ML
changeset 14335 9c0b5e081037
parent 14320 fb7a114826be
child 14353 79f9fbef9106
equal deleted inserted replaced
14334:6137d24eef79 14335:9c0b5e081037
   150 by (rtac hcomplex_add_number_of_left 1);
   150 by (rtac hcomplex_add_number_of_left 1);
   151 qed "hcomplex_add_number_of_diff1";
   151 qed "hcomplex_add_number_of_diff1";
   152 
   152 
   153 Goal "number_of v + (c - number_of w) = \
   153 Goal "number_of v + (c - number_of w) = \
   154 \     number_of (bin_add v (bin_minus w)) + (c::hcomplex)";
   154 \     number_of (bin_add v (bin_minus w)) + (c::hcomplex)";
   155 by (auto_tac (claset(),simpset() addsimps [hcomplex_diff_def]@ hcomplex_add_ac));
   155 by (auto_tac (claset(),simpset() addsimps [hcomplex_diff_def]@ add_ac));
   156 qed "hcomplex_add_number_of_diff2";
   156 qed "hcomplex_add_number_of_diff2";
   157 
   157 
   158 Addsimps [hcomplex_add_number_of_left, hcomplex_mult_number_of_left,
   158 Addsimps [hcomplex_add_number_of_left, hcomplex_mult_number_of_left,
   159 	  hcomplex_add_number_of_diff1, hcomplex_add_number_of_diff2]; 
   159 	  hcomplex_add_number_of_diff1, hcomplex_add_number_of_diff2]; 
   160 
   160 
   169 
   169 
   170 (** For combine_numerals **)
   170 (** For combine_numerals **)
   171 
   171 
   172 Goal "i*u + (j*u + k) = (i+j)*u + (k::hcomplex)";
   172 Goal "i*u + (j*u + k) = (i+j)*u + (k::hcomplex)";
   173 by (asm_simp_tac (simpset() addsimps [hcomplex_add_mult_distrib]
   173 by (asm_simp_tac (simpset() addsimps [hcomplex_add_mult_distrib]
   174     @ hcomplex_add_ac) 1);
   174     @ add_ac) 1);
   175 qed "left_hcomplex_add_mult_distrib";
   175 qed "left_hcomplex_add_mult_distrib";
   176 
   176 
   177 (** For cancel_numerals **)
   177 (** For cancel_numerals **)
   178 
   178 
   179 Goal "((x::hcomplex) = u + v) = (x - (u + v) = 0)";
   179 Goal "((x::hcomplex) = u + v) = (x - (u + v) = 0)";
   186 
   186 
   187 val hcomplex_rel_iff_rel_0_rls = [hcomplex_eq_diff_eq_0,hcomplex_eq_add_diff_eq_0];
   187 val hcomplex_rel_iff_rel_0_rls = [hcomplex_eq_diff_eq_0,hcomplex_eq_add_diff_eq_0];
   188 
   188 
   189 Goal "!!i::hcomplex. (i*u + m = j*u + n) = ((i-j)*u + m = n)";
   189 Goal "!!i::hcomplex. (i*u + m = j*u + n) = ((i-j)*u + m = n)";
   190 by (auto_tac (claset(), simpset() addsimps [hcomplex_add_mult_distrib,
   190 by (auto_tac (claset(), simpset() addsimps [hcomplex_add_mult_distrib,
   191     hcomplex_diff_def] @ hcomplex_add_ac));
   191     hcomplex_diff_def] @ add_ac));
   192 by (asm_simp_tac (simpset() addsimps [hcomplex_add_assoc RS sym]) 1);
   192 by (asm_simp_tac (simpset() addsimps [hcomplex_add_assoc RS sym]) 1);
   193 by (simp_tac (simpset() addsimps [hcomplex_add_assoc]) 1);
   193 by (simp_tac (simpset() addsimps [hcomplex_add_assoc]) 1);
   194 qed "hcomplex_eq_add_iff1";
   194 qed "hcomplex_eq_add_iff1";
   195 
   195 
   196 Goal "!!i::hcomplex. (i*u + m = j*u + n) = (m = (j-i)*u + n)";
   196 Goal "!!i::hcomplex. (i*u + m = j*u + n) = (m = (j-i)*u + n)";
   307 		    bin_minus_1, bin_minus_0, bin_minus_Pls, bin_minus_Min,
   307 		    bin_minus_1, bin_minus_0, bin_minus_Pls, bin_minus_Min,
   308 		    bin_pred_1, bin_pred_0, bin_pred_Pls, bin_pred_Min];
   308 		    bin_pred_1, bin_pred_0, bin_pred_Pls, bin_pred_Min];
   309 
   309 
   310 
   310 
   311 (*To let us treat subtraction as addition*)
   311 (*To let us treat subtraction as addition*)
   312 val diff_simps = [hcomplex_diff_def, hcomplex_minus_add_distrib, 
   312 val diff_simps = [hcomplex_diff_def, minus_add_distrib, minus_minus];
   313                   minus_minus];
       
   314 
   313 
   315 (*push the unary minus down: - x * y = x * - y *)
   314 (*push the unary minus down: - x * y = x * - y *)
   316 val hcomplex_minus_mult_eq_1_to_2 = 
   315 val hcomplex_minus_mult_eq_1_to_2 = 
   317     [hcomplex_minus_mult_eq1 RS sym, hcomplex_minus_mult_eq2] MRS trans 
   316     [minus_mult_left RS sym, minus_mult_right] MRS trans 
   318     |> standard;
   317     |> standard;
   319 
   318 
   320 (*to extract again any uncancelled minuses*)
   319 (*to extract again any uncancelled minuses*)
   321 val hcomplex_minus_from_mult_simps = 
   320 val hcomplex_minus_from_mult_simps = 
   322     [minus_minus, hcomplex_minus_mult_eq1 RS sym, 
   321     [minus_minus, minus_mult_left RS sym, minus_mult_right RS sym];
   323      hcomplex_minus_mult_eq2 RS sym];
       
   324 
   322 
   325 (*combine unary minus with numeric literals, however nested within a product*)
   323 (*combine unary minus with numeric literals, however nested within a product*)
   326 val hcomplex_mult_minus_simps =
   324 val hcomplex_mult_minus_simps =
   327     [hcomplex_mult_assoc, hcomplex_minus_mult_eq1, hcomplex_minus_mult_eq_1_to_2];
   325     [hcomplex_mult_assoc, minus_mult_left, hcomplex_minus_mult_eq_1_to_2];
   328 
   326 
   329 (*Final simplification: cancel + and *  *)
   327 (*Final simplification: cancel + and *  *)
   330 val simplify_meta_eq = 
   328 val simplify_meta_eq = 
   331     Int_Numeral_Simprocs.simplify_meta_eq
   329     Int_Numeral_Simprocs.simplify_meta_eq
   332          [hcomplex_add_zero_left, hcomplex_add_zero_right,
   330          [add_zero_left, add_zero_right,
   333  	  hcomplex_mult_zero_left, hcomplex_mult_zero_right, hcomplex_mult_one_left, 
   331  	  mult_left_zero, mult_right_zero, mult_1, 
   334           hcomplex_mult_one_right];
   332           mult_1_right];
   335 
   333 
   336 val prep_simproc = Complex_Numeral_Simprocs.prep_simproc;
   334 val prep_simproc = Complex_Numeral_Simprocs.prep_simproc;
   337 
   335 
   338 
   336 
   339 structure CancelNumeralsCommon =
   337 structure CancelNumeralsCommon =
   344   val dest_coeff	= dest_coeff 1
   342   val dest_coeff	= dest_coeff 1
   345   val find_first_coeff	= find_first_coeff []
   343   val find_first_coeff	= find_first_coeff []
   346   val trans_tac         = Real_Numeral_Simprocs.trans_tac
   344   val trans_tac         = Real_Numeral_Simprocs.trans_tac
   347   val norm_tac = 
   345   val norm_tac = 
   348      ALLGOALS (simp_tac (HOL_ss addsimps add_0s@mult_1s@diff_simps@
   346      ALLGOALS (simp_tac (HOL_ss addsimps add_0s@mult_1s@diff_simps@
   349                                          hcomplex_minus_simps@hcomplex_add_ac))
   347                                          hcomplex_minus_simps@add_ac))
   350      THEN ALLGOALS (simp_tac (HOL_ss addsimps non_add_bin_simps@hcomplex_mult_minus_simps))
   348      THEN ALLGOALS (simp_tac (HOL_ss addsimps non_add_bin_simps@hcomplex_mult_minus_simps))
   351      THEN ALLGOALS
   349      THEN ALLGOALS
   352               (simp_tac (HOL_ss addsimps hcomplex_minus_from_mult_simps@
   350               (simp_tac (HOL_ss addsimps hcomplex_minus_from_mult_simps@
   353                                          hcomplex_add_ac@hcomplex_mult_ac))
   351                                          add_ac@mult_ac))
   354   val numeral_simp_tac	= ALLGOALS (simp_tac (HOL_ss addsimps add_0s@bin_simps))
   352   val numeral_simp_tac	= ALLGOALS (simp_tac (HOL_ss addsimps add_0s@bin_simps))
   355   val simplify_meta_eq  = simplify_meta_eq
   353   val simplify_meta_eq  = simplify_meta_eq
   356   end;
   354   end;
   357 
   355 
   358 
   356 
   384   val left_distrib	= left_hcomplex_add_mult_distrib RS trans
   382   val left_distrib	= left_hcomplex_add_mult_distrib RS trans
   385   val prove_conv	= Bin_Simprocs.prove_conv_nohyps
   383   val prove_conv	= Bin_Simprocs.prove_conv_nohyps
   386   val trans_tac         = Real_Numeral_Simprocs.trans_tac
   384   val trans_tac         = Real_Numeral_Simprocs.trans_tac
   387   val norm_tac = 
   385   val norm_tac = 
   388      ALLGOALS (simp_tac (HOL_ss addsimps add_0s@mult_1s@diff_simps@
   386      ALLGOALS (simp_tac (HOL_ss addsimps add_0s@mult_1s@diff_simps@
   389                                          hcomplex_minus_simps@hcomplex_add_ac))
   387                                          hcomplex_minus_simps@add_ac))
   390      THEN ALLGOALS (simp_tac (HOL_ss addsimps non_add_bin_simps@hcomplex_mult_minus_simps))
   388      THEN ALLGOALS (simp_tac (HOL_ss addsimps non_add_bin_simps@hcomplex_mult_minus_simps))
   391      THEN ALLGOALS (simp_tac (HOL_ss addsimps hcomplex_minus_from_mult_simps@
   389      THEN ALLGOALS (simp_tac (HOL_ss addsimps hcomplex_minus_from_mult_simps@
   392                                               hcomplex_add_ac@hcomplex_mult_ac))
   390                                               add_ac@mult_ac))
   393   val numeral_simp_tac	= ALLGOALS 
   391   val numeral_simp_tac	= ALLGOALS 
   394                     (simp_tac (HOL_ss addsimps add_0s@bin_simps))
   392                     (simp_tac (HOL_ss addsimps add_0s@bin_simps))
   395   val simplify_meta_eq  = simplify_meta_eq
   393   val simplify_meta_eq  = simplify_meta_eq
   396   end;
   394   end;
   397 
   395 
   499   val ss		= HOL_ss
   497   val ss		= HOL_ss
   500   val eq_reflection	= eq_reflection
   498   val eq_reflection	= eq_reflection
   501   val sg_ref    = Sign.self_ref (Theory.sign_of (the_context ()))
   499   val sg_ref    = Sign.self_ref (Theory.sign_of (the_context ()))
   502   val T	     = HComplex_Numeral_Simprocs.hcomplexT
   500   val T	     = HComplex_Numeral_Simprocs.hcomplexT
   503   val plus   = Const ("op *", [T,T] ---> T)
   501   val plus   = Const ("op *", [T,T] ---> T)
   504   val add_ac = hcomplex_mult_ac
   502   val add_ac = mult_ac
   505 end;
   503 end;
   506 
   504 
   507 structure HComplex_Times_Assoc = Assoc_Fold (HComplex_Times_Assoc_Data);
   505 structure HComplex_Times_Assoc = Assoc_Fold (HComplex_Times_Assoc_Data);
   508 
   506 
   509 Addsimprocs [HComplex_Times_Assoc.conv];
   507 Addsimprocs [HComplex_Times_Assoc.conv];