615 lemmas power_nat_number_of_number_of = power_nat_number_of [of _ "number_of w", standard] |
615 lemmas power_nat_number_of_number_of = power_nat_number_of [of _ "number_of w", standard] |
616 declare power_nat_number_of_number_of [simp] |
616 declare power_nat_number_of_number_of [simp] |
617 |
617 |
618 |
618 |
619 |
619 |
620 text{*For the integers*} |
620 text{*For arbitrary rings*} |
621 |
621 |
622 lemma zpower_number_of_even: |
622 lemma power_number_of_even: |
623 "(z::int) ^ number_of (w BIT bit.B0) = (let w = z ^ (number_of w) in w * w)" |
623 fixes z :: "'a::{number_ring,recpower}" |
|
624 shows "z ^ number_of (w BIT bit.B0) = (let w = z ^ (number_of w) in w * w)" |
624 unfolding Let_def nat_number_of_def number_of_BIT bit.cases |
625 unfolding Let_def nat_number_of_def number_of_BIT bit.cases |
625 apply (rule_tac x = "number_of w" in spec, clarify) |
626 apply (rule_tac x = "number_of w" in spec, clarify) |
626 apply (case_tac " (0::int) <= x") |
627 apply (case_tac " (0::int) <= x") |
627 apply (auto simp add: nat_mult_distrib power_even_eq power2_eq_square) |
628 apply (auto simp add: nat_mult_distrib power_even_eq power2_eq_square) |
628 done |
629 done |
629 |
630 |
630 lemma zpower_number_of_odd: |
631 lemma power_number_of_odd: |
631 "(z::int) ^ number_of (w BIT bit.B1) = (if (0::int) <= number_of w |
632 fixes z :: "'a::{number_ring,recpower}" |
|
633 shows "z ^ number_of (w BIT bit.B1) = (if (0::int) <= number_of w |
632 then (let w = z ^ (number_of w) in z * w * w) else 1)" |
634 then (let w = z ^ (number_of w) in z * w * w) else 1)" |
633 unfolding Let_def nat_number_of_def number_of_BIT bit.cases |
635 unfolding Let_def nat_number_of_def number_of_BIT bit.cases |
634 apply (rule_tac x = "number_of w" in spec, auto) |
636 apply (rule_tac x = "number_of w" in spec, auto) |
635 apply (simp only: nat_add_distrib nat_mult_distrib) |
637 apply (simp only: nat_add_distrib nat_mult_distrib) |
636 apply simp |
638 apply simp |
637 apply (auto simp add: nat_add_distrib nat_mult_distrib power_even_eq power2_eq_square neg_nat) |
639 apply (auto simp add: nat_add_distrib nat_mult_distrib power_even_eq power2_eq_square neg_nat power_Suc) |
638 done |
640 done |
639 |
641 |
640 lemmas zpower_number_of_even_number_of = |
642 lemmas zpower_number_of_even = power_number_of_even [where 'a=int] |
641 zpower_number_of_even [of "number_of v", standard] |
643 lemmas zpower_number_of_odd = power_number_of_odd [where 'a=int] |
642 declare zpower_number_of_even_number_of [simp] |
644 |
643 |
645 lemmas power_number_of_even_number_of [simp] = |
644 lemmas zpower_number_of_odd_number_of = |
646 power_number_of_even [of "number_of v", standard] |
645 zpower_number_of_odd [of "number_of v", standard] |
647 |
646 declare zpower_number_of_odd_number_of [simp] |
648 lemmas power_number_of_odd_number_of [simp] = |
647 |
649 power_number_of_odd [of "number_of v", standard] |
648 |
650 |
649 |
651 |
650 |
652 |
651 ML |
653 ML |
652 {* |
654 {* |
707 |
709 |
708 lemma Let_Suc [simp]: "Let (Suc n) f == f (Suc n)" |
710 lemma Let_Suc [simp]: "Let (Suc n) f == f (Suc n)" |
709 by (simp add: Let_def) |
711 by (simp add: Let_def) |
710 |
712 |
711 lemma power_m1_even: "(-1) ^ (2*n) = (1::'a::{number_ring,recpower})" |
713 lemma power_m1_even: "(-1) ^ (2*n) = (1::'a::{number_ring,recpower})" |
712 by (simp add: power_mult); |
714 by (simp add: power_mult power_Suc); |
713 |
715 |
714 lemma power_m1_odd: "(-1) ^ Suc(2*n) = (-1::'a::{number_ring,recpower})" |
716 lemma power_m1_odd: "(-1) ^ Suc(2*n) = (-1::'a::{number_ring,recpower})" |
715 by (simp add: power_mult power_Suc); |
717 by (simp add: power_mult power_Suc); |
716 |
718 |
717 |
719 |