diff -r 60110f6d0b4e -r d51e5e41fafe src/HOL/Library/Numeral_Type.thy --- a/src/HOL/Library/Numeral_Type.thy Wed Jan 16 10:27:57 2019 +0100 +++ b/src/HOL/Library/Numeral_Type.thy Wed Jan 16 11:48:06 2019 +0100 @@ -45,6 +45,8 @@ unfolding type_definition.card [OF type_definition_bit1] by simp +subsection \@{typ num1}\ + instance num1 :: finite proof show "finite (UNIV::num1 set)" @@ -62,6 +64,42 @@ end +lemma num1_eq_iff: "(x::num1) = (y::num1) \ True" + by (induct x, induct y) simp + +instantiation num1 :: "{comm_ring,comm_monoid_mult,numeral}" +begin + +instance + by standard (simp_all add: num1_eq_iff) + +end + +lemma num1_eqI: + fixes a::num1 shows "a = b" +by(simp add: num1_eq_iff) + +lemma num1_eq1 [simp]: + fixes a::num1 shows "a = 1" + by (rule num1_eqI) + +lemma forall_1[simp]: "(\i::num1. P i) \ P 1" + by (metis (full_types) num1_eq_iff) + +lemma ex_1[simp]: "(\x::num1. P x) \ P 1" + by auto (metis (full_types) num1_eq_iff) + +instantiation num1 :: linorder begin +definition "a < b \ Rep_num1 a < Rep_num1 b" +definition "a \ b \ Rep_num1 a \ Rep_num1 b" +instance + by intro_classes (auto simp: less_eq_num1_def less_num1_def intro: num1_eqI) +end + +instance num1 :: wellorder + by intro_classes (auto simp: less_eq_num1_def less_num1_def) + + instance bit0 :: (finite) card2 proof show "finite (UNIV::'a bit0 set)" @@ -195,17 +233,6 @@ \<^typ>\num1\, since 0 and 1 are not distinct. \ -instantiation num1 :: "{comm_ring,comm_monoid_mult,numeral}" -begin - -lemma num1_eq_iff: "(x::num1) = (y::num1) \ True" - by (induct x, induct y) simp - -instance - by standard (simp_all add: num1_eq_iff) - -end - instantiation bit0 and bit1 :: (finite) "{zero,one,plus,times,uminus,minus}" begin @@ -360,8 +387,7 @@ definition "enum_class.enum_ex P = P (1 :: num1)" instance by intro_classes - (auto simp add: enum_num1_def enum_all_num1_def enum_ex_num1_def num1_eq_iff Ball_def, - (metis (full_types) num1_eq_iff)+) + (auto simp add: enum_num1_def enum_all_num1_def enum_ex_num1_def num1_eq_iff Ball_def) end instantiation num0 and num1 :: card_UNIV begin