src/HOL/Power.thy
changeset 64715 33d5fa0ce6e5
parent 64065 40d440b75b00
child 64964 a0c985a57f7e
equal deleted inserted replaced
64714:53bab28983f1 64715:33d5fa0ce6e5
   580 end
   580 end
   581 
   581 
   582 context linordered_idom
   582 context linordered_idom
   583 begin
   583 begin
   584 
   584 
   585 lemma power_abs: "\<bar>a ^ n\<bar> = \<bar>a\<bar> ^ n"
   585 lemma zero_le_power2 [simp]: "0 \<le> a\<^sup>2"
   586   by (induct n) (auto simp add: abs_mult)
   586   by (simp add: power2_eq_square)
   587 
   587 
   588 lemma abs_power_minus [simp]: "\<bar>(-a) ^ n\<bar> = \<bar>a ^ n\<bar>"
   588 lemma zero_less_power2 [simp]: "0 < a\<^sup>2 \<longleftrightarrow> a \<noteq> 0"
       
   589   by (force simp add: power2_eq_square zero_less_mult_iff linorder_neq_iff)
       
   590 
       
   591 lemma power2_less_0 [simp]: "\<not> a\<^sup>2 < 0"
       
   592   by (force simp add: power2_eq_square mult_less_0_iff)
       
   593 
       
   594 lemma power_abs: "\<bar>a ^ n\<bar> = \<bar>a\<bar> ^ n" -- \<open>FIXME simp?\<close>
       
   595   by (induct n) (simp_all add: abs_mult)
       
   596 
       
   597 lemma power_sgn [simp]: "sgn (a ^ n) = sgn a ^ n"
       
   598   by (induct n) (simp_all add: sgn_mult)
       
   599     
       
   600 lemma abs_power_minus [simp]: "\<bar>(- a) ^ n\<bar> = \<bar>a ^ n\<bar>"
   589   by (simp add: power_abs)
   601   by (simp add: power_abs)
   590 
   602 
   591 lemma zero_less_power_abs_iff [simp]: "0 < \<bar>a\<bar> ^ n \<longleftrightarrow> a \<noteq> 0 \<or> n = 0"
   603 lemma zero_less_power_abs_iff [simp]: "0 < \<bar>a\<bar> ^ n \<longleftrightarrow> a \<noteq> 0 \<or> n = 0"
   592 proof (induct n)
   604 proof (induct n)
   593   case 0
   605   case 0
   598 qed
   610 qed
   599 
   611 
   600 lemma zero_le_power_abs [simp]: "0 \<le> \<bar>a\<bar> ^ n"
   612 lemma zero_le_power_abs [simp]: "0 \<le> \<bar>a\<bar> ^ n"
   601   by (rule zero_le_power [OF abs_ge_zero])
   613   by (rule zero_le_power [OF abs_ge_zero])
   602 
   614 
   603 lemma zero_le_power2 [simp]: "0 \<le> a\<^sup>2"
       
   604   by (simp add: power2_eq_square)
       
   605 
       
   606 lemma zero_less_power2 [simp]: "0 < a\<^sup>2 \<longleftrightarrow> a \<noteq> 0"
       
   607   by (force simp add: power2_eq_square zero_less_mult_iff linorder_neq_iff)
       
   608 
       
   609 lemma power2_less_0 [simp]: "\<not> a\<^sup>2 < 0"
       
   610   by (force simp add: power2_eq_square mult_less_0_iff)
       
   611 
       
   612 lemma power2_less_eq_zero_iff [simp]: "a\<^sup>2 \<le> 0 \<longleftrightarrow> a = 0"
   615 lemma power2_less_eq_zero_iff [simp]: "a\<^sup>2 \<le> 0 \<longleftrightarrow> a = 0"
   613   by (simp add: le_less)
   616   by (simp add: le_less)
   614 
   617 
   615 lemma abs_power2 [simp]: "\<bar>a\<^sup>2\<bar> = a\<^sup>2"
   618 lemma abs_power2 [simp]: "\<bar>a\<^sup>2\<bar> = a\<^sup>2"
   616   by (simp add: power2_eq_square)
   619   by (simp add: power2_eq_square)
   617 
   620 
   618 lemma power2_abs [simp]: "\<bar>a\<bar>\<^sup>2 = a\<^sup>2"
   621 lemma power2_abs [simp]: "\<bar>a\<bar>\<^sup>2 = a\<^sup>2"
   619   by (simp add: power2_eq_square)
   622   by (simp add: power2_eq_square)
   620 
   623 
   621 lemma odd_power_less_zero: "a < 0 \<Longrightarrow> a ^ Suc (2*n) < 0"
   624 lemma odd_power_less_zero: "a < 0 \<Longrightarrow> a ^ Suc (2 * n) < 0"
   622 proof (induct n)
   625 proof (induct n)
   623   case 0
   626   case 0
   624   then show ?case by simp
   627   then show ?case by simp
   625 next
   628 next
   626   case (Suc n)
   629   case (Suc n)
   628     by (simp add: ac_simps power_add power2_eq_square)
   631     by (simp add: ac_simps power_add power2_eq_square)
   629   then show ?case
   632   then show ?case
   630     by (simp del: power_Suc add: Suc mult_less_0_iff mult_neg_neg)
   633     by (simp del: power_Suc add: Suc mult_less_0_iff mult_neg_neg)
   631 qed
   634 qed
   632 
   635 
   633 lemma odd_0_le_power_imp_0_le: "0 \<le> a ^ Suc (2*n) \<Longrightarrow> 0 \<le> a"
   636 lemma odd_0_le_power_imp_0_le: "0 \<le> a ^ Suc (2 * n) \<Longrightarrow> 0 \<le> a"
   634   using odd_power_less_zero [of a n]
   637   using odd_power_less_zero [of a n]
   635   by (force simp add: linorder_not_less [symmetric])
   638   by (force simp add: linorder_not_less [symmetric])
   636 
   639 
   637 lemma zero_le_even_power'[simp]: "0 \<le> a ^ (2*n)"
   640 lemma zero_le_even_power'[simp]: "0 \<le> a ^ (2 * n)"
   638 proof (induct n)
   641 proof (induct n)
   639   case 0
   642   case 0
   640   show ?case by simp
   643   show ?case by simp
   641 next
   644 next
   642   case (Suc n)
   645   case (Suc n)