src/HOL/Integ/NatBin.ML
changeset 9064 eacebbcafe57
parent 8935 548901d05a0e
child 9108 9fff97d29837
equal deleted inserted replaced
9063:0d7628966069 9064:eacebbcafe57
   124 
   124 
   125 (** Multiplication **)
   125 (** Multiplication **)
   126 
   126 
   127 Goal "(#0::int) <= z ==> nat (z*z') = nat z * nat z'";
   127 Goal "(#0::int) <= z ==> nat (z*z') = nat z * nat z'";
   128 by (case_tac "#0 <= z'" 1);
   128 by (case_tac "#0 <= z'" 1);
   129 by (subgoal_tac "z'*z <= #0" 2);
   129 by (asm_full_simp_tac (simpset() addsimps [zmult_le_0_iff]) 2);
   130 by (rtac (neg_imp_zmult_nonpos_iff RS iffD2) 3);
       
   131 by (auto_tac (claset(),
       
   132 	      simpset() addsimps [zmult_commute]));
       
   133 by (subgoal_tac "#0 <= z*z'" 1);
       
   134 by (force_tac (claset() addDs [zmult_zle_mono1], simpset()) 2);
       
   135 by (rtac (inj_int RS injD) 1);
   130 by (rtac (inj_int RS injD) 1);
   136 by (asm_simp_tac (simpset() addsimps [zmult_int RS sym]) 1);
   131 by (asm_simp_tac (simpset() addsimps [zmult_int RS sym,
       
   132 				      int_0_le_mult_iff]) 1);
   137 qed "nat_mult_distrib";
   133 qed "nat_mult_distrib";
   138 
   134 
   139 Goal "(number_of v :: nat) * number_of v' = \
   135 Goal "(number_of v :: nat) * number_of v' = \
   140 \      (if neg (number_of v) then #0 else number_of (bin_mult v v'))";
   136 \      (if neg (number_of v) then #0 else number_of (bin_mult v v'))";
   141 by (simp_tac
   137 by (simp_tac