src/HOL/Integ/NatBin.thy
changeset 15003 6145dd7538d7
parent 14738 83f1a514dcb4
child 15013 34264f5e4691
equal deleted inserted replaced
15002:bc050f23c3f8 15003:6145dd7538d7
   254 
   254 
   255 text{*We cannot refer to the number @{term 2} in @{text Ring_and_Field.thy}.
   255 text{*We cannot refer to the number @{term 2} in @{text Ring_and_Field.thy}.
   256 We cannot prove general results about the numeral @{term "-1"}, so we have to
   256 We cannot prove general results about the numeral @{term "-1"}, so we have to
   257 use @{term "- 1"} instead.*}
   257 use @{term "- 1"} instead.*}
   258 
   258 
   259 lemma power2_eq_square: "(a::'a::{comm_semiring_1_cancel,ringpower})\<twosuperior> = a * a"
   259 lemma power2_eq_square: "(a::'a::{comm_semiring_1_cancel,recpower})\<twosuperior> = a * a"
   260   by (simp add: numeral_2_eq_2 Power.power_Suc)
   260   by (simp add: numeral_2_eq_2 Power.power_Suc)
   261 
   261 
   262 lemma [simp]: "(0::'a::{comm_semiring_1_cancel,ringpower})\<twosuperior> = 0"
   262 lemma [simp]: "(0::'a::{comm_semiring_1_cancel,recpower})\<twosuperior> = 0"
   263   by (simp add: power2_eq_square)
   263   by (simp add: power2_eq_square)
   264 
   264 
   265 lemma [simp]: "(1::'a::{comm_semiring_1_cancel,ringpower})\<twosuperior> = 1"
   265 lemma [simp]: "(1::'a::{comm_semiring_1_cancel,recpower})\<twosuperior> = 1"
   266   by (simp add: power2_eq_square)
   266   by (simp add: power2_eq_square)
   267 
   267 
   268 text{*Squares of literal numerals will be evaluated.*}
   268 text{*Squares of literal numerals will be evaluated.*}
   269 declare power2_eq_square [of "number_of w", standard, simp]
   269 declare power2_eq_square [of "number_of w", standard, simp]
   270 
   270 
   271 lemma zero_le_power2 [simp]: "0 \<le> (a\<twosuperior>::'a::{ordered_idom,ringpower})"
   271 lemma zero_le_power2 [simp]: "0 \<le> (a\<twosuperior>::'a::{ordered_idom,recpower})"
   272   by (simp add: power2_eq_square zero_le_square)
   272   by (simp add: power2_eq_square zero_le_square)
   273 
   273 
   274 lemma zero_less_power2 [simp]:
   274 lemma zero_less_power2 [simp]:
   275      "(0 < a\<twosuperior>) = (a \<noteq> (0::'a::{ordered_idom,ringpower}))"
   275      "(0 < a\<twosuperior>) = (a \<noteq> (0::'a::{ordered_idom,recpower}))"
   276   by (force simp add: power2_eq_square zero_less_mult_iff linorder_neq_iff)
   276   by (force simp add: power2_eq_square zero_less_mult_iff linorder_neq_iff)
   277 
   277 
   278 lemma zero_eq_power2 [simp]:
   278 lemma zero_eq_power2 [simp]:
   279      "(a\<twosuperior> = 0) = (a = (0::'a::{ordered_idom,ringpower}))"
   279      "(a\<twosuperior> = 0) = (a = (0::'a::{ordered_idom,recpower}))"
   280   by (force simp add: power2_eq_square mult_eq_0_iff)
   280   by (force simp add: power2_eq_square mult_eq_0_iff)
   281 
   281 
   282 lemma abs_power2 [simp]:
   282 lemma abs_power2 [simp]:
   283      "abs(a\<twosuperior>) = (a\<twosuperior>::'a::{ordered_idom,ringpower})"
   283      "abs(a\<twosuperior>) = (a\<twosuperior>::'a::{ordered_idom,recpower})"
   284   by (simp add: power2_eq_square abs_mult abs_mult_self)
   284   by (simp add: power2_eq_square abs_mult abs_mult_self)
   285 
   285 
   286 lemma power2_abs [simp]:
   286 lemma power2_abs [simp]:
   287      "(abs a)\<twosuperior> = (a\<twosuperior>::'a::{ordered_idom,ringpower})"
   287      "(abs a)\<twosuperior> = (a\<twosuperior>::'a::{ordered_idom,recpower})"
   288   by (simp add: power2_eq_square abs_mult_self)
   288   by (simp add: power2_eq_square abs_mult_self)
   289 
   289 
   290 lemma power2_minus [simp]:
   290 lemma power2_minus [simp]:
   291      "(- a)\<twosuperior> = (a\<twosuperior>::'a::{comm_ring_1,ringpower})"
   291      "(- a)\<twosuperior> = (a\<twosuperior>::'a::{comm_ring_1,recpower})"
   292   by (simp add: power2_eq_square)
   292   by (simp add: power2_eq_square)
   293 
   293 
   294 lemma power_minus1_even: "(- 1) ^ (2*n) = (1::'a::{comm_ring_1,ringpower})"
   294 lemma power_minus1_even: "(- 1) ^ (2*n) = (1::'a::{comm_ring_1,recpower})"
   295 apply (induct_tac "n")
   295 apply (induct_tac "n")
   296 apply (auto simp add: power_Suc power_add)
   296 apply (auto simp add: power_Suc power_add)
   297 done
   297 done
   298 
   298 
   299 lemma power_even_eq: "(a::'a::ringpower) ^ (2*n) = (a^n)^2"
   299 lemma power_even_eq: "(a::'a::recpower) ^ (2*n) = (a^n)^2"
   300 by (simp add: power_mult power_mult_distrib power2_eq_square)
   300 by (simp add: power_mult power_mult_distrib power2_eq_square)
   301 
   301 
   302 lemma power_odd_eq: "(a::int) ^ Suc(2*n) = a * (a^n)^2"
   302 lemma power_odd_eq: "(a::int) ^ Suc(2*n) = a * (a^n)^2"
   303 by (simp add: power_even_eq) 
   303 by (simp add: power_even_eq) 
   304 
   304 
   305 lemma power_minus_even [simp]:
   305 lemma power_minus_even [simp]:
   306      "(-a) ^ (2*n) = (a::'a::{comm_ring_1,ringpower}) ^ (2*n)"
   306      "(-a) ^ (2*n) = (a::'a::{comm_ring_1,recpower}) ^ (2*n)"
   307 by (simp add: power_minus1_even power_minus [of a]) 
   307 by (simp add: power_minus1_even power_minus [of a]) 
   308 
   308 
   309 lemma zero_le_even_power:
   309 lemma zero_le_even_power:
   310      "0 \<le> (a::'a::{ordered_idom,ringpower}) ^ (2*n)"
   310      "0 \<le> (a::'a::{ordered_idom,recpower}) ^ (2*n)"
   311 proof (induct "n")
   311 proof (induct "n")
   312   case 0
   312   case 0
   313     show ?case by (simp add: zero_le_one)
   313     show ?case by (simp add: zero_le_one)
   314 next
   314 next
   315   case (Suc n)
   315   case (Suc n)
   318     thus ?case
   318     thus ?case
   319       by (simp add: prems zero_le_square zero_le_mult_iff)
   319       by (simp add: prems zero_le_square zero_le_mult_iff)
   320 qed
   320 qed
   321 
   321 
   322 lemma odd_power_less_zero:
   322 lemma odd_power_less_zero:
   323      "(a::'a::{ordered_idom,ringpower}) < 0 ==> a ^ Suc(2*n) < 0"
   323      "(a::'a::{ordered_idom,recpower}) < 0 ==> a ^ Suc(2*n) < 0"
   324 proof (induct "n")
   324 proof (induct "n")
   325   case 0
   325   case 0
   326     show ?case by (simp add: Power.power_Suc)
   326     show ?case by (simp add: Power.power_Suc)
   327 next
   327 next
   328   case (Suc n)
   328   case (Suc n)
   331     thus ?case
   331     thus ?case
   332       by (simp add: prems mult_less_0_iff mult_neg)
   332       by (simp add: prems mult_less_0_iff mult_neg)
   333 qed
   333 qed
   334 
   334 
   335 lemma odd_0_le_power_imp_0_le:
   335 lemma odd_0_le_power_imp_0_le:
   336      "0 \<le> a  ^ Suc(2*n) ==> 0 \<le> (a::'a::{ordered_idom,ringpower})"
   336      "0 \<le> a  ^ Suc(2*n) ==> 0 \<le> (a::'a::{ordered_idom,recpower})"
   337 apply (insert odd_power_less_zero [of a n]) 
   337 apply (insert odd_power_less_zero [of a n]) 
   338 apply (force simp add: linorder_not_less [symmetric]) 
   338 apply (force simp add: linorder_not_less [symmetric]) 
   339 done
   339 done
   340 
   340 
   341 
   341 
   604   nat_number_of_BIT_True nat_number_of_BIT_False
   604   nat_number_of_BIT_True nat_number_of_BIT_False
   605 
   605 
   606 lemma Let_Suc [simp]: "Let (Suc n) f == f (Suc n)"
   606 lemma Let_Suc [simp]: "Let (Suc n) f == f (Suc n)"
   607   by (simp add: Let_def)
   607   by (simp add: Let_def)
   608 
   608 
   609 lemma power_m1_even: "(-1) ^ (2*n) = (1::'a::{number_ring,ringpower})"
   609 lemma power_m1_even: "(-1) ^ (2*n) = (1::'a::{number_ring,recpower})"
   610 by (simp add: power_mult); 
   610 by (simp add: power_mult); 
   611 
   611 
   612 lemma power_m1_odd: "(-1) ^ Suc(2*n) = (-1::'a::{number_ring,ringpower})"
   612 lemma power_m1_odd: "(-1) ^ Suc(2*n) = (-1::'a::{number_ring,recpower})"
   613 by (simp add: power_mult power_Suc); 
   613 by (simp add: power_mult power_Suc); 
   614 
   614 
   615 
   615 
   616 subsection{*Literal arithmetic and @{term of_nat}*}
   616 subsection{*Literal arithmetic and @{term of_nat}*}
   617 
   617