src/HOL/Parity.thy
changeset 30240 5b25fee0362c
parent 29803 c56a5571f60a
child 30738 0842e906300c
equal deleted inserted replaced
30239:179ff9cb160b 30240:5b25fee0362c
   226   apply (rule zero_le_square)
   226   apply (rule zero_le_square)
   227   done
   227   done
   228 
   228 
   229 lemma zero_le_odd_power: "odd n ==>
   229 lemma zero_le_odd_power: "odd n ==>
   230     (0 <= (x::'a::{recpower,ordered_idom}) ^ n) = (0 <= x)"
   230     (0 <= (x::'a::{recpower,ordered_idom}) ^ n) = (0 <= x)"
   231   apply (simp add: odd_nat_equiv_def2)
   231 apply (auto simp: odd_nat_equiv_def2 power_Suc power_add zero_le_mult_iff)
   232   apply (erule exE)
   232 apply (metis field_power_not_zero no_zero_divirors_neq0 order_antisym_conv zero_le_square)
   233   apply (erule ssubst)
   233 done
   234   apply (subst power_Suc)
       
   235   apply (subst power_add)
       
   236   apply (subst zero_le_mult_iff)
       
   237   apply auto
       
   238   apply (subgoal_tac "x = 0 & y > 0")
       
   239   apply (erule conjE, assumption)
       
   240   apply (subst power_eq_0_iff [symmetric])
       
   241   apply (subgoal_tac "0 <= x^y * x^y")
       
   242   apply simp
       
   243   apply (rule zero_le_square)+
       
   244   done
       
   245 
   234 
   246 lemma zero_le_power_eq[presburger]: "(0 <= (x::'a::{recpower,ordered_idom}) ^ n) =
   235 lemma zero_le_power_eq[presburger]: "(0 <= (x::'a::{recpower,ordered_idom}) ^ n) =
   247     (even n | (odd n & 0 <= x))"
   236     (even n | (odd n & 0 <= x))"
   248   apply auto
   237   apply auto
   249   apply (subst zero_le_odd_power [symmetric])
   238   apply (subst zero_le_odd_power [symmetric])