src/HOL/Library/Parity.thy
changeset 23309 678ee30499d2
parent 22473 753123c89d72
child 23431 25ca91279a9b
equal deleted inserted replaced
23308:95a01ddfb024 23309:678ee30499d2
    18 
    18 
    19 instance int :: even_odd
    19 instance int :: even_odd
    20   even_def: "even x \<equiv> x mod 2 = 0" ..
    20   even_def: "even x \<equiv> x mod 2 = 0" ..
    21 
    21 
    22 instance nat :: even_odd
    22 instance nat :: even_odd
    23   even_nat_def: "even x \<equiv> even (int x)" ..
    23   even_nat_def: "even x \<equiv> even (int_of_nat x)" ..
    24 
    24 
    25 
    25 
    26 subsection {* Even and odd are mutually exclusive *}
    26 subsection {* Even and odd are mutually exclusive *}
    27 
    27 
    28 lemma int_pos_lt_two_imp_zero_or_one:
    28 lemma int_pos_lt_two_imp_zero_or_one:
   133 
   133 
   134 lemma pos_int_even_equiv_nat_even: "0 \<le> x ==> even x = even (nat x)"
   134 lemma pos_int_even_equiv_nat_even: "0 \<le> x ==> even x = even (nat x)"
   135   by (simp add: even_nat_def)
   135   by (simp add: even_nat_def)
   136 
   136 
   137 lemma even_nat_product: "even((x::nat) * y) = (even x | even y)"
   137 lemma even_nat_product: "even((x::nat) * y) = (even x | even y)"
   138   by (simp add: even_nat_def int_mult)
   138   by (simp add: even_nat_def)
   139 
   139 
   140 lemma even_nat_sum: "even ((x::nat) + y) =
   140 lemma even_nat_sum: "even ((x::nat) + y) =
   141     ((even x & even y) | (odd x & odd y))"
   141     ((even x & even y) | (odd x & odd y))"
   142   by (unfold even_nat_def, simp)
   142   by (unfold even_nat_def, simp)
   143 
   143 
   144 lemma even_nat_difference:
   144 lemma even_nat_difference:
   145     "even ((x::nat) - y) = (x < y | (even x & even y) | (odd x & odd y))"
   145     "even ((x::nat) - y) = (x < y | (even x & even y) | (odd x & odd y))"
   146   apply (auto simp add: even_nat_def zdiff_int [symmetric])
   146   apply (auto simp add: even_nat_def)
   147   apply (case_tac "x < y", auto simp add: zdiff_int [symmetric])
   147   apply (case_tac "x < y", auto)
   148   apply (case_tac "x < y", auto simp add: zdiff_int [symmetric])
   148   apply (case_tac "x < y", auto)
   149   done
   149   done
   150 
   150 
   151 lemma even_nat_Suc: "even (Suc x) = odd x"
   151 lemma even_nat_Suc: "even (Suc x) = odd x"
   152   by (simp add: even_nat_def)
   152   by (simp add: even_nat_def)
   153 
   153 
   154 lemma even_nat_power: "even ((x::nat)^y) = (even x & 0 < y)"
   154 lemma even_nat_power: "even ((x::nat)^y) = (even x & 0 < y)"
   155   by (simp add: even_nat_def int_power)
   155   by (simp add: even_nat_def of_nat_power)
   156 
   156 
   157 lemma even_nat_zero: "even (0::nat)"
   157 lemma even_nat_zero: "even (0::nat)"
   158   by (simp add: even_nat_def)
   158   by (simp add: even_nat_def)
   159 
   159 
   160 lemmas even_odd_nat_simps [simp] = even_nat_def[of "number_of v",standard]
   160 lemmas even_odd_nat_simps [simp] = even_nat_def[of "number_of v",standard]