src/HOL/NSA/StarDef.thy
changeset 60516 0826b7025d07
parent 60429 d3d1e185cd63
child 60562 24af00b010cf
equal deleted inserted replaced
60515:484559628038 60516:0826b7025d07
   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 *}