src/HOL/Library/Numeral_Type.thy
changeset 61649 268d88ec9087
parent 61585 a9599d3d7610
child 62348 9a5f43dac883
equal deleted inserted replaced
61644:b1c24adc1581 61649:268d88ec9087
   374   bit0.Rep_1[code abstract]
   374   bit0.Rep_1[code abstract]
   375 
   375 
   376 lemma Abs_bit0'_code [code abstract]:
   376 lemma Abs_bit0'_code [code abstract]:
   377   "Rep_bit0 (Abs_bit0' x :: 'a :: finite bit0) = x mod int (CARD('a bit0))"
   377   "Rep_bit0 (Abs_bit0' x :: 'a :: finite bit0) = x mod int (CARD('a bit0))"
   378 by(auto simp add: Abs_bit0'_def intro!: Abs_bit0_inverse)
   378 by(auto simp add: Abs_bit0'_def intro!: Abs_bit0_inverse)
   379   (metis bit0.Rep_Abs_mod bit0.Rep_less_n card_bit0 of_nat_numeral zmult_int)
       
   380 
   379 
   381 lemma inj_on_Abs_bit0:
   380 lemma inj_on_Abs_bit0:
   382   "inj_on (Abs_bit0 :: int \<Rightarrow> 'a bit0) {0..<2 * int CARD('a :: finite)}"
   381   "inj_on (Abs_bit0 :: int \<Rightarrow> 'a bit0) {0..<2 * int CARD('a :: finite)}"
   383 by(auto intro: inj_onI simp add: Abs_bit0_inject)
   382 by(auto intro: inj_onI simp add: Abs_bit0_inject)
   384 
   383 
   387   bit1.Rep_0[code abstract]
   386   bit1.Rep_0[code abstract]
   388   bit1.Rep_1[code abstract]
   387   bit1.Rep_1[code abstract]
   389 
   388 
   390 lemma Abs_bit1'_code [code abstract]:
   389 lemma Abs_bit1'_code [code abstract]:
   391   "Rep_bit1 (Abs_bit1' x :: 'a :: finite bit1) = x mod int (CARD('a bit1))"
   390   "Rep_bit1 (Abs_bit1' x :: 'a :: finite bit1) = x mod int (CARD('a bit1))"
   392 by(auto simp add: Abs_bit1'_def intro!: Abs_bit1_inverse)
   391   by(auto simp add: Abs_bit1'_def intro!: Abs_bit1_inverse)
   393   (metis of_nat_0_less_iff of_nat_Suc of_nat_mult of_nat_numeral pos_mod_conj zero_less_Suc)
       
   394 
   392 
   395 lemma inj_on_Abs_bit1:
   393 lemma inj_on_Abs_bit1:
   396   "inj_on (Abs_bit1 :: int \<Rightarrow> 'a bit1) {0..<1 + 2 * int CARD('a :: finite)}"
   394   "inj_on (Abs_bit1 :: int \<Rightarrow> 'a bit1) {0..<1 + 2 * int CARD('a :: finite)}"
   397 by(auto intro: inj_onI simp add: Abs_bit1_inject)
   395 by(auto intro: inj_onI simp add: Abs_bit1_inject)
   398 
   396 
   412 definition "enum_class.enum_ex P = (\<exists>b :: 'a bit0 \<in> set enum_class.enum. P b)"
   410 definition "enum_class.enum_ex P = (\<exists>b :: 'a bit0 \<in> set enum_class.enum. P b)"
   413 
   411 
   414 instance
   412 instance
   415 proof(intro_classes)
   413 proof(intro_classes)
   416   show "distinct (enum_class.enum :: 'a bit0 list)"
   414   show "distinct (enum_class.enum :: 'a bit0 list)"
   417     by(auto intro!: inj_onI simp add: Abs_bit0'_def Abs_bit0_inject zmod_int[symmetric] enum_bit0_def distinct_map)
   415     by (simp add: enum_bit0_def distinct_map inj_on_def Abs_bit0'_def Abs_bit0_inject mod_pos_pos_trivial)
   418 
   416 
   419   show univ_eq: "(UNIV :: 'a bit0 set) = set enum_class.enum"
   417   show univ_eq: "(UNIV :: 'a bit0 set) = set enum_class.enum"
   420     unfolding enum_bit0_def type_definition.Abs_image[OF type_definition_bit0, symmetric]
   418     unfolding enum_bit0_def type_definition.Abs_image[OF type_definition_bit0, symmetric]
   421     by(simp add: image_comp [symmetric] inj_on_Abs_bit0 card_image image_int_atLeastLessThan)
   419     by(simp add: image_comp [symmetric] inj_on_Abs_bit0 card_image image_int_atLeastLessThan)
   422       (auto intro!: image_cong[OF refl] simp add: Abs_bit0'_def mod_pos_pos_trivial)
   420       (auto intro!: image_cong[OF refl] simp add: Abs_bit0'_def mod_pos_pos_trivial)