equal
deleted
inserted
replaced
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) |