equal
deleted
inserted
replaced
157 else if v' < Int.Pls then number_of v |
157 else if v' < Int.Pls then number_of v |
158 else number_of (v + v'))" |
158 else number_of (v + v'))" |
159 unfolding nat_number_of_def number_of_is_id numeral_simps |
159 unfolding nat_number_of_def number_of_is_id numeral_simps |
160 by (simp add: nat_add_distrib) |
160 by (simp add: nat_add_distrib) |
161 |
161 |
|
162 lemma nat_number_of_add_1 [simp]: |
|
163 "number_of v + (1::nat) = |
|
164 (if v < Int.Pls then 1 else number_of (Int.succ v))" |
|
165 unfolding nat_number_of_def number_of_is_id numeral_simps |
|
166 by (simp add: nat_add_distrib) |
|
167 |
|
168 lemma nat_1_add_number_of [simp]: |
|
169 "(1::nat) + number_of v = |
|
170 (if v < Int.Pls then 1 else number_of (Int.succ v))" |
|
171 unfolding nat_number_of_def number_of_is_id numeral_simps |
|
172 by (simp add: nat_add_distrib) |
|
173 |
|
174 lemma nat_1_add_1 [simp]: "1 + 1 = (2::nat)" |
|
175 by (rule int_int_eq [THEN iffD1]) simp |
|
176 |
162 |
177 |
163 subsubsection{*Subtraction *} |
178 subsubsection{*Subtraction *} |
164 |
179 |
165 lemma diff_nat_eq_if: |
180 lemma diff_nat_eq_if: |
166 "nat z - nat z' = |
181 "nat z - nat z' = |
174 "(number_of v :: nat) - number_of v' = |
189 "(number_of v :: nat) - number_of v' = |
175 (if v' < Int.Pls then number_of v |
190 (if v' < Int.Pls then number_of v |
176 else let d = number_of (v + uminus v') in |
191 else let d = number_of (v + uminus v') in |
177 if neg d then 0 else nat d)" |
192 if neg d then 0 else nat d)" |
178 unfolding nat_number_of_def number_of_is_id numeral_simps neg_def |
193 unfolding nat_number_of_def number_of_is_id numeral_simps neg_def |
|
194 by auto |
|
195 |
|
196 lemma nat_number_of_diff_1 [simp]: |
|
197 "number_of v - (1::nat) = |
|
198 (if v \<le> Int.Pls then 0 else number_of (Int.pred v))" |
|
199 unfolding nat_number_of_def number_of_is_id numeral_simps |
179 by auto |
200 by auto |
180 |
201 |
181 |
202 |
182 subsubsection{*Multiplication *} |
203 subsubsection{*Multiplication *} |
183 |
204 |
360 fixes x y :: "'a::{ordered_semidom,recpower}" |
381 fixes x y :: "'a::{ordered_semidom,recpower}" |
361 shows "\<lbrakk>x\<twosuperior> = y\<twosuperior>; 0 \<le> x; 0 \<le> y\<rbrakk> \<Longrightarrow> x = y" |
382 shows "\<lbrakk>x\<twosuperior> = y\<twosuperior>; 0 \<le> x; 0 \<le> y\<rbrakk> \<Longrightarrow> x = y" |
362 unfolding numeral_2_eq_2 by (erule (2) power_eq_imp_eq_base, simp) |
383 unfolding numeral_2_eq_2 by (erule (2) power_eq_imp_eq_base, simp) |
363 |
384 |
364 lemma power_minus1_even[simp]: "(- 1) ^ (2*n) = (1::'a::{comm_ring_1,recpower})" |
385 lemma power_minus1_even[simp]: "(- 1) ^ (2*n) = (1::'a::{comm_ring_1,recpower})" |
365 apply (induct "n") |
386 proof (induct n) |
366 apply (auto simp add: power_Suc power_add) |
387 case 0 show ?case by simp |
367 done |
388 next |
|
389 case (Suc n) then show ?case by (simp add: power_Suc power_add) |
|
390 qed |
|
391 |
|
392 lemma power_minus1_odd: "(- 1) ^ Suc(2*n) = -(1::'a::{comm_ring_1,recpower})" |
|
393 by (simp add: power_Suc) |
368 |
394 |
369 lemma power_even_eq: "(a::'a::recpower) ^ (2*n) = (a^n)^2" |
395 lemma power_even_eq: "(a::'a::recpower) ^ (2*n) = (a^n)^2" |
370 by (subst mult_commute) (simp add: power_mult) |
396 by (subst mult_commute) (simp add: power_mult) |
371 |
397 |
372 lemma power_odd_eq: "(a::int) ^ Suc(2*n) = a * (a^n)^2" |
398 lemma power_odd_eq: "(a::int) ^ Suc(2*n) = a * (a^n)^2" |
435 by (simp add: numerals) |
461 by (simp add: numerals) |
436 |
462 |
437 (* These two can be useful when m = number_of... *) |
463 (* These two can be useful when m = number_of... *) |
438 |
464 |
439 lemma add_eq_if: "(m::nat) + n = (if m=0 then n else Suc ((m - 1) + n))" |
465 lemma add_eq_if: "(m::nat) + n = (if m=0 then n else Suc ((m - 1) + n))" |
440 apply (case_tac "m") |
466 unfolding One_nat_def by (cases m) simp_all |
441 apply (simp_all add: numerals) |
|
442 done |
|
443 |
467 |
444 lemma mult_eq_if: "(m::nat) * n = (if m=0 then 0 else n + ((m - 1) * n))" |
468 lemma mult_eq_if: "(m::nat) * n = (if m=0 then 0 else n + ((m - 1) * n))" |
445 apply (case_tac "m") |
469 unfolding One_nat_def by (cases m) simp_all |
446 apply (simp_all add: numerals) |
|
447 done |
|
448 |
470 |
449 lemma power_eq_if: "(p ^ m :: nat) = (if m=0 then 1 else p * (p ^ (m - 1)))" |
471 lemma power_eq_if: "(p ^ m :: nat) = (if m=0 then 1 else p * (p ^ (m - 1)))" |
450 apply (case_tac "m") |
472 unfolding One_nat_def by (cases m) simp_all |
451 apply (simp_all add: numerals) |
|
452 done |
|
453 |
473 |
454 |
474 |
455 subsection{*Comparisons involving (0::nat) *} |
475 subsection{*Comparisons involving (0::nat) *} |
456 |
476 |
457 text{*Simplification already does @{term "n<0"}, @{term "n\<le>0"} and @{term "0\<le>n"}.*} |
477 text{*Simplification already does @{term "n<0"}, @{term "n\<le>0"} and @{term "0\<le>n"}.*} |