equal
deleted
inserted
replaced
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 |