src/HOL/Enum.thy
changeset 58646 cd63a4b12a33
parent 58350 919149921e46
child 58659 6c9821c32dd5
equal deleted inserted replaced
58645:94bef115c08f 58646:cd63a4b12a33
   679 instance finite_2 :: complete_distrib_lattice
   679 instance finite_2 :: complete_distrib_lattice
   680 by(intro_classes)(auto simp add: INF_def SUP_def sup_finite_2_def inf_finite_2_def Inf_finite_2_def Sup_finite_2_def)
   680 by(intro_classes)(auto simp add: INF_def SUP_def sup_finite_2_def inf_finite_2_def Inf_finite_2_def Sup_finite_2_def)
   681 
   681 
   682 instance finite_2 :: complete_linorder ..
   682 instance finite_2 :: complete_linorder ..
   683 
   683 
   684 instantiation finite_2 :: "{field_inverse_zero, abs_if, ring_div, semiring_div_parity, sgn_if}" begin
   684 instantiation finite_2 :: "{field_inverse_zero, abs_if, ring_div, sgn_if, semiring_div}" begin
   685 definition [simp]: "0 = a\<^sub>1"
   685 definition [simp]: "0 = a\<^sub>1"
   686 definition [simp]: "1 = a\<^sub>2"
   686 definition [simp]: "1 = a\<^sub>2"
   687 definition "x + y = (case (x, y) of (a\<^sub>1, a\<^sub>1) \<Rightarrow> a\<^sub>1 | (a\<^sub>2, a\<^sub>2) \<Rightarrow> a\<^sub>1 | _ \<Rightarrow> a\<^sub>2)"
   687 definition "x + y = (case (x, y) of (a\<^sub>1, a\<^sub>1) \<Rightarrow> a\<^sub>1 | (a\<^sub>2, a\<^sub>2) \<Rightarrow> a\<^sub>1 | _ \<Rightarrow> a\<^sub>2)"
   688 definition "uminus = (\<lambda>x :: finite_2. x)"
   688 definition "uminus = (\<lambda>x :: finite_2. x)"
   689 definition "op - = (op + :: finite_2 \<Rightarrow> _)"
   689 definition "op - = (op + :: finite_2 \<Rightarrow> _)"
   698 by intro_classes
   698 by intro_classes
   699   (simp_all add: plus_finite_2_def uminus_finite_2_def minus_finite_2_def times_finite_2_def
   699   (simp_all add: plus_finite_2_def uminus_finite_2_def minus_finite_2_def times_finite_2_def
   700        inverse_finite_2_def divide_finite_2_def abs_finite_2_def div_finite_2_def mod_finite_2_def sgn_finite_2_def
   700        inverse_finite_2_def divide_finite_2_def abs_finite_2_def div_finite_2_def mod_finite_2_def sgn_finite_2_def
   701      split: finite_2.splits)
   701      split: finite_2.splits)
   702 end
   702 end
       
   703 
       
   704 lemma two_finite_2 [simp]:
       
   705   "2 = a\<^sub>1"
       
   706   by (simp add: numeral.simps plus_finite_2_def)
       
   707   
       
   708 instance finite_2 :: semiring_div_parity
       
   709 by intro_classes (simp_all add: mod_finite_2_def split: finite_2.splits)
       
   710 
   703 
   711 
   704 hide_const (open) a\<^sub>1 a\<^sub>2
   712 hide_const (open) a\<^sub>1 a\<^sub>2
   705 
   713 
   706 datatype (plugins only: code "quickcheck*" extraction) finite_3 =
   714 datatype (plugins only: code "quickcheck*" extraction) finite_3 =
   707   a\<^sub>1 | a\<^sub>2 | a\<^sub>3
   715   a\<^sub>1 | a\<^sub>2 | a\<^sub>3
   824        inverse_finite_3_def divide_finite_3_def abs_finite_3_def div_finite_3_def mod_finite_3_def sgn_finite_3_def
   832        inverse_finite_3_def divide_finite_3_def abs_finite_3_def div_finite_3_def mod_finite_3_def sgn_finite_3_def
   825        less_finite_3_def
   833        less_finite_3_def
   826      split: finite_3.splits)
   834      split: finite_3.splits)
   827 end
   835 end
   828 
   836 
       
   837 
       
   838 
   829 hide_const (open) a\<^sub>1 a\<^sub>2 a\<^sub>3
   839 hide_const (open) a\<^sub>1 a\<^sub>2 a\<^sub>3
   830 
   840 
   831 datatype (plugins only: code "quickcheck*" extraction) finite_4 =
   841 datatype (plugins only: code "quickcheck*" extraction) finite_4 =
   832   a\<^sub>1 | a\<^sub>2 | a\<^sub>3 | a\<^sub>4
   842   a\<^sub>1 | a\<^sub>2 | a\<^sub>3 | a\<^sub>4
   833 
   843