814 |
814 |
815 |
815 |
816 subsection {* Ring and field classes *} |
816 subsection {* Ring and field classes *} |
817 |
817 |
818 instance star :: (semiring) semiring |
818 instance star :: (semiring) semiring |
819 apply (intro_classes) |
819 by (intro_classes; transfer) (fact distrib_right distrib_left)+ |
820 apply (transfer, rule distrib_right) |
|
821 apply (transfer, rule distrib_left) |
|
822 done |
|
823 |
820 |
824 instance star :: (semiring_0) semiring_0 |
821 instance star :: (semiring_0) semiring_0 |
825 by intro_classes (transfer, simp)+ |
822 by (intro_classes; transfer) simp_all |
826 |
823 |
827 instance star :: (semiring_0_cancel) semiring_0_cancel .. |
824 instance star :: (semiring_0_cancel) semiring_0_cancel .. |
828 |
825 |
829 instance star :: (comm_semiring) comm_semiring |
826 instance star :: (comm_semiring) comm_semiring |
830 by (intro_classes, transfer, rule distrib_right) |
827 by (intro_classes; transfer) (fact distrib_right) |
831 |
828 |
832 instance star :: (comm_semiring_0) comm_semiring_0 .. |
829 instance star :: (comm_semiring_0) comm_semiring_0 .. |
833 instance star :: (comm_semiring_0_cancel) comm_semiring_0_cancel .. |
830 instance star :: (comm_semiring_0_cancel) comm_semiring_0_cancel .. |
834 |
831 |
835 instance star :: (zero_neq_one) zero_neq_one |
832 instance star :: (zero_neq_one) zero_neq_one |
836 by (intro_classes, transfer, rule zero_neq_one) |
833 by (intro_classes; transfer) (fact zero_neq_one) |
837 |
834 |
838 instance star :: (semiring_1) semiring_1 .. |
835 instance star :: (semiring_1) semiring_1 .. |
839 instance star :: (comm_semiring_1) comm_semiring_1 .. |
836 instance star :: (comm_semiring_1) comm_semiring_1 .. |
840 |
837 |
841 declare dvd_def [transfer_refold] |
838 declare dvd_def [transfer_refold] |
842 |
839 |
843 instance star :: (comm_semiring_1_diff_distrib) comm_semiring_1_diff_distrib |
840 instance star :: (comm_semiring_1_diff_distrib) comm_semiring_1_diff_distrib |
844 by intro_classes (transfer, fact right_diff_distrib') |
841 by (intro_classes; transfer) (fact right_diff_distrib') |
845 |
842 |
846 instance star :: (semiring_no_zero_divisors) semiring_no_zero_divisors |
843 instance star :: (semiring_no_zero_divisors) semiring_no_zero_divisors |
847 by (intro_classes, transfer, rule no_zero_divisors) |
844 by (intro_classes; transfer) (fact no_zero_divisors) |
|
845 |
|
846 instance star :: (semiring_no_zero_divisors_cancel) semiring_no_zero_divisors_cancel |
|
847 by (intro_classes; transfer) simp_all |
848 |
848 |
849 instance star :: (semiring_1_cancel) semiring_1_cancel .. |
849 instance star :: (semiring_1_cancel) semiring_1_cancel .. |
850 instance star :: (comm_semiring_1_cancel) comm_semiring_1_cancel .. |
850 instance star :: (comm_semiring_1_cancel) comm_semiring_1_cancel .. |
851 instance star :: (ring) ring .. |
851 instance star :: (ring) ring .. |
852 instance star :: (comm_ring) comm_ring .. |
852 instance star :: (comm_ring) comm_ring .. |
853 instance star :: (ring_1) ring_1 .. |
853 instance star :: (ring_1) ring_1 .. |
854 instance star :: (comm_ring_1) comm_ring_1 .. |
854 instance star :: (comm_ring_1) comm_ring_1 .. |
855 instance star :: (semidom) semidom .. |
855 instance star :: (semidom) semidom .. |
|
856 |
856 instance star :: (semidom_divide) semidom_divide |
857 instance star :: (semidom_divide) semidom_divide |
857 proof |
858 by (intro_classes; transfer) simp_all |
858 show "\<And>b a :: 'a star. b \<noteq> 0 \<Longrightarrow> (a * b) div b = a" |
859 |
859 by transfer simp |
|
860 show "\<And>a :: 'a star. a div 0 = 0" |
|
861 by transfer simp |
|
862 qed |
|
863 instance star :: (semiring_div) semiring_div |
860 instance star :: (semiring_div) semiring_div |
864 apply intro_classes |
861 by (intro_classes; transfer) (simp_all add: mod_div_equality) |
865 apply(transfer, rule mod_div_equality) |
|
866 apply(transfer, rule div_by_0) |
|
867 apply(transfer, rule div_0) |
|
868 apply(transfer, erule div_mult_self1) |
|
869 apply(transfer, erule div_mult_mult1) |
|
870 done |
|
871 |
862 |
872 instance star :: (ring_no_zero_divisors) ring_no_zero_divisors .. |
863 instance star :: (ring_no_zero_divisors) ring_no_zero_divisors .. |
873 instance star :: (ring_1_no_zero_divisors) ring_1_no_zero_divisors .. |
864 instance star :: (ring_1_no_zero_divisors) ring_1_no_zero_divisors .. |
874 instance star :: (idom) idom .. |
865 instance star :: (idom) idom .. |
875 instance star :: (idom_divide) idom_divide .. |
866 instance star :: (idom_divide) idom_divide .. |
876 |
867 |
877 instance star :: (division_ring) division_ring |
868 instance star :: (division_ring) division_ring |
878 apply (intro_classes) |
869 by (intro_classes; transfer) (simp_all add: divide_inverse) |
879 apply (transfer, erule left_inverse) |
|
880 apply (transfer, erule right_inverse) |
|
881 apply (transfer, fact divide_inverse) |
|
882 apply (transfer, fact inverse_zero) |
|
883 done |
|
884 |
870 |
885 instance star :: (field) field |
871 instance star :: (field) field |
886 apply (intro_classes) |
872 by (intro_classes; transfer) (simp_all add: divide_inverse) |
887 apply (transfer, erule left_inverse) |
|
888 apply (transfer, rule divide_inverse) |
|
889 apply (transfer, fact inverse_zero) |
|
890 done |
|
891 |
873 |
892 instance star :: (ordered_semiring) ordered_semiring |
874 instance star :: (ordered_semiring) ordered_semiring |
893 apply (intro_classes) |
875 by (intro_classes; transfer) (fact mult_left_mono mult_right_mono)+ |
894 apply (transfer, erule (1) mult_left_mono) |
|
895 apply (transfer, erule (1) mult_right_mono) |
|
896 done |
|
897 |
876 |
898 instance star :: (ordered_cancel_semiring) ordered_cancel_semiring .. |
877 instance star :: (ordered_cancel_semiring) ordered_cancel_semiring .. |
899 |
878 |
900 instance star :: (linordered_semiring_strict) linordered_semiring_strict |
879 instance star :: (linordered_semiring_strict) linordered_semiring_strict |
901 apply (intro_classes) |
880 by (intro_classes; transfer) (fact mult_strict_left_mono mult_strict_right_mono)+ |
902 apply (transfer, erule (1) mult_strict_left_mono) |
|
903 apply (transfer, erule (1) mult_strict_right_mono) |
|
904 done |
|
905 |
881 |
906 instance star :: (ordered_comm_semiring) ordered_comm_semiring |
882 instance star :: (ordered_comm_semiring) ordered_comm_semiring |
907 by (intro_classes, transfer, rule mult_left_mono) |
883 by (intro_classes; transfer) (fact mult_left_mono) |
908 |
884 |
909 instance star :: (ordered_cancel_comm_semiring) ordered_cancel_comm_semiring .. |
885 instance star :: (ordered_cancel_comm_semiring) ordered_cancel_comm_semiring .. |
910 |
886 |
911 instance star :: (linordered_comm_semiring_strict) linordered_comm_semiring_strict |
887 instance star :: (linordered_comm_semiring_strict) linordered_comm_semiring_strict |
912 by (intro_classes, transfer, rule mult_strict_left_mono) |
888 by (intro_classes; transfer) (fact mult_strict_left_mono) |
913 |
889 |
914 instance star :: (ordered_ring) ordered_ring .. |
890 instance star :: (ordered_ring) ordered_ring .. |
|
891 |
915 instance star :: (ordered_ring_abs) ordered_ring_abs |
892 instance star :: (ordered_ring_abs) ordered_ring_abs |
916 by intro_classes (transfer, rule abs_eq_mult) |
893 by (intro_classes; transfer) (fact abs_eq_mult) |
917 |
894 |
918 instance star :: (abs_if) abs_if |
895 instance star :: (abs_if) abs_if |
919 by (intro_classes, transfer, rule abs_if) |
896 by (intro_classes; transfer) (fact abs_if) |
920 |
897 |
921 instance star :: (sgn_if) sgn_if |
898 instance star :: (sgn_if) sgn_if |
922 by (intro_classes, transfer, rule sgn_if) |
899 by (intro_classes; transfer) (fact sgn_if) |
923 |
900 |
924 instance star :: (linordered_ring_strict) linordered_ring_strict .. |
901 instance star :: (linordered_ring_strict) linordered_ring_strict .. |
925 instance star :: (ordered_comm_ring) ordered_comm_ring .. |
902 instance star :: (ordered_comm_ring) ordered_comm_ring .. |
926 |
903 |
927 instance star :: (linordered_semidom) linordered_semidom |
904 instance star :: (linordered_semidom) linordered_semidom |
928 by (intro_classes, transfer, rule zero_less_one) |
905 by (intro_classes; transfer) (fact zero_less_one) |
929 |
906 |
930 instance star :: (linordered_idom) linordered_idom .. |
907 instance star :: (linordered_idom) linordered_idom .. |
931 instance star :: (linordered_field) linordered_field .. |
908 instance star :: (linordered_field) linordered_field .. |
932 |
909 |
933 subsection {* Power *} |
910 subsection {* Power *} |