src/HOL/Parity.thy
changeset 47108 2a1953f0d20d
parent 45607 16b4f5774621
child 47163 248376f8881d
--- a/src/HOL/Parity.thy	Sat Mar 24 16:27:04 2012 +0100
+++ b/src/HOL/Parity.thy	Sun Mar 25 20:15:39 2012 +0200
@@ -45,9 +45,11 @@
 
 lemma odd_1_nat [simp]: "odd (1::nat)" by presburger
 
-declare even_def[of "number_of v", simp] for v
+(* TODO: proper simp rules for Num.Bit0, Num.Bit1 *)
+declare even_def[of "numeral v", simp] for v
+declare even_def[of "neg_numeral v", simp] for v
 
-declare even_nat_def[of "number_of v", simp] for v
+declare even_nat_def[of "numeral v", simp] for v
 
 subsection {* Even and odd are mutually exclusive *}
 
@@ -197,18 +199,18 @@
   using minus_one_even_odd_power by blast
 
 lemma neg_one_even_odd_power:
-     "(even x --> (-1::'a::{number_ring})^x = 1) &
+     "(even x --> (-1::'a::{comm_ring_1})^x = 1) &
       (odd x --> (-1::'a)^x = -1)"
   apply (induct x)
   apply (simp, simp)
   done
 
 lemma neg_one_even_power [simp]:
-    "even x ==> (-1::'a::{number_ring})^x = 1"
+    "even x ==> (-1::'a::{comm_ring_1})^x = 1"
   using neg_one_even_odd_power by blast
 
 lemma neg_one_odd_power [simp]:
-    "odd x ==> (-1::'a::{number_ring})^x = -1"
+    "odd x ==> (-1::'a::{comm_ring_1})^x = -1"
   using neg_one_even_odd_power by blast
 
 lemma neg_power_if:
@@ -347,27 +349,28 @@
 
 text {* Simplify, when the exponent is a numeral *}
 
-lemmas power_0_left_number_of = power_0_left [of "number_of w"] for w
-declare power_0_left_number_of [simp]
+lemma power_0_left_numeral [simp]:
+  "0 ^ numeral w = (0::'a::{power,semiring_0})"
+by (simp add: power_0_left)
 
-lemmas zero_le_power_eq_number_of [simp] =
-    zero_le_power_eq [of _ "number_of w"] for w
+lemmas zero_le_power_eq_numeral [simp] =
+    zero_le_power_eq [of _ "numeral w"] for w
 
-lemmas zero_less_power_eq_number_of [simp] =
-    zero_less_power_eq [of _ "number_of w"] for w
+lemmas zero_less_power_eq_numeral [simp] =
+    zero_less_power_eq [of _ "numeral w"] for w
 
-lemmas power_le_zero_eq_number_of [simp] =
-    power_le_zero_eq [of _ "number_of w"] for w
+lemmas power_le_zero_eq_numeral [simp] =
+    power_le_zero_eq [of _ "numeral w"] for w
 
-lemmas power_less_zero_eq_number_of [simp] =
-    power_less_zero_eq [of _ "number_of w"] for w
+lemmas power_less_zero_eq_numeral [simp] =
+    power_less_zero_eq [of _ "numeral w"] for w
 
-lemmas zero_less_power_nat_eq_number_of [simp] =
-    zero_less_power_nat_eq [of _ "number_of w"] for w
+lemmas zero_less_power_nat_eq_numeral [simp] =
+    zero_less_power_nat_eq [of _ "numeral w"] for w
 
-lemmas power_eq_0_iff_number_of [simp] = power_eq_0_iff [of _ "number_of w"] for w
+lemmas power_eq_0_iff_numeral [simp] = power_eq_0_iff [of _ "numeral w"] for w
 
-lemmas power_even_abs_number_of [simp] = power_even_abs [of "number_of w" _] for w
+lemmas power_even_abs_numeral [simp] = power_even_abs [of "numeral w" _] for w
 
 
 subsection {* An Equivalence for @{term [source] "0 \<le> a^n"} *}