src/HOL/Nat_Numeral.thy
changeset 35815 10e723e54076
parent 35631 0b8a5fd339ab
child 36699 816da1023508
equal deleted inserted replaced
35814:234eaa508359 35815:10e723e54076
   641 
   641 
   642 lemma power_number_of_odd:
   642 lemma power_number_of_odd:
   643   fixes z :: "'a::number_ring"
   643   fixes z :: "'a::number_ring"
   644   shows "z ^ number_of (Int.Bit1 w) = (if (0::int) <= number_of w
   644   shows "z ^ number_of (Int.Bit1 w) = (if (0::int) <= number_of w
   645      then (let w = z ^ (number_of w) in z * w * w) else 1)"
   645      then (let w = z ^ (number_of w) in z * w * w) else 1)"
   646 apply (auto simp add: Let_def Bit1_def nat_number_of_def number_of_is_id
   646 unfolding Let_def Bit1_def nat_number_of_def number_of_is_id
   647   mult_assoc nat_add_distrib power_add not_le simp del: nat_number_of)
   647 apply (cases "0 <= w")
       
   648 apply (simp only: mult_assoc nat_add_distrib power_add, simp)
   648 apply (simp add: not_le mult_2 [symmetric] add_assoc)
   649 apply (simp add: not_le mult_2 [symmetric] add_assoc)
   649 done
   650 done
   650 
   651 
   651 lemmas zpower_number_of_even = power_number_of_even [where 'a=int]
   652 lemmas zpower_number_of_even = power_number_of_even [where 'a=int]
   652 lemmas zpower_number_of_odd = power_number_of_odd [where 'a=int]
   653 lemmas zpower_number_of_odd = power_number_of_odd [where 'a=int]
   671 
   672 
   672 lemma nat_number_of_Bit1:
   673 lemma nat_number_of_Bit1:
   673   "number_of (Int.Bit1 w) =
   674   "number_of (Int.Bit1 w) =
   674     (if neg (number_of w :: int) then 0
   675     (if neg (number_of w :: int) then 0
   675      else let n = number_of w in Suc (n + n))"
   676      else let n = number_of w in Suc (n + n))"
   676 apply (auto simp add: Let_def Bit1_def nat_number_of_def number_of_is_id neg_def
   677 unfolding Let_def Bit1_def nat_number_of_def number_of_is_id neg_def
   677   nat_add_distrib simp del: nat_number_of)
   678 apply (cases "w < 0")
   678 apply (simp add: mult_2 [symmetric] add_assoc)
   679 apply (simp add: mult_2 [symmetric] add_assoc)
       
   680 apply (simp only: nat_add_distrib, simp)
   679 done
   681 done
   680 
   682 
   681 lemmas nat_number =
   683 lemmas nat_number =
   682   nat_number_of_Pls nat_number_of_Min
   684   nat_number_of_Pls nat_number_of_Min
   683   nat_number_of_Bit0 nat_number_of_Bit1
   685   nat_number_of_Bit0 nat_number_of_Bit1