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 |