:: Category of Rings :: by Micha{\l} Muzalewski :: :: Received December 5, 1991 :: Copyright (c) 1991-2021 Association of Mizar Users :: (Stowarzyszenie Uzytkownikow Mizara, Bialystok, Poland). :: This code can be distributed under the GNU General Public Licence :: version 3.0 or later, or the Creative Commons Attribution-ShareAlike :: License version 3.0 or later, subject to the binding interpretation :: detailed in file COPYING.interpretation. :: See COPYING.GPL and COPYING.CC-BY-SA for the full text of these :: licenses, or see http://www.gnu.org/licenses/gpl.html and :: http://creativecommons.org/licenses/by-sa/3.0/. environ vocabularies XBOOLE_0, CLASSES2, ALGSTR_0, FUNCT_1, FDIFF_1, MSSUBFAM, GROUP_1, RELAT_1, VECTSP_1, ARYTM_3, MOD_2, FUNCSDOM, GRCAT_1, GRAPH_1, STRUCT_0, MIDSP_1, XXREAL_0, CAT_1, SUBSET_1, ENS_1, SUPINF_2, MESFUNC1, TARSKI, PARTFUN1, ZFMISC_1, RINGCAT1, MONOID_0, RELAT_2, BINOP_1; notations TARSKI, XBOOLE_0, ZFMISC_1, XTUPLE_0, SUBSET_1, MCART_1, RELSET_1, PARTFUN1, FUNCT_2, BINOP_1, STRUCT_0, ALGSTR_0, GROUP_1, VECTSP_1, GRCAT_1, GRAPH_1, CAT_1, CLASSES2, MOD_2, GROUP_6; constructors GRCAT_1, GROUP_6, MOD_2, RELSET_1, XTUPLE_0; registrations XBOOLE_0, RELSET_1, FUNCT_2, STRUCT_0, GRCAT_1, MOD_2, VECTSP_1; requirements SUBSET, BOOLE; begin reserve x,y for set; reserve D for non empty set; reserve UN for Universe; :: :: 1a. Maps of the carriers of rings :: definition let G,H be non empty doubleLoopStr; let IT be Function of G,H; attr IT is linear means :: RINGCAT1:def 1 IT is additive multiplicative unity-preserving; end; registration let G,H be non empty doubleLoopStr; cluster linear -> additive multiplicative unity-preserving for Function of G,H; cluster additive multiplicative unity-preserving -> linear for Function of G,H; end; theorem :: RINGCAT1:1 for G1,G2,G3 being non empty doubleLoopStr, f being Function of G1,G2, g being Function of G2,G3 st f is linear & g is linear holds g*f is linear; :: :: 1b. Morphisms of rings :: definition struct RingMorphismStr (# Dom,Cod -> Ring, Fun -> Function of the Dom, the Cod #); end; reserve f for RingMorphismStr; definition let f; func dom(f) -> Ring equals :: RINGCAT1:def 2 the Dom of f; func cod(f) -> Ring equals :: RINGCAT1:def 3 the Cod of f; func fun(f) -> Function of the Dom of f, the Cod of f equals :: RINGCAT1:def 4 the Fun of f; end; reserve G,H,G1,G2,G3,G4 for Ring; registration let G be non empty doubleLoopStr; cluster id G -> linear; end; definition let IT be RingMorphismStr; attr IT is RingMorphism-like means :: RINGCAT1:def 5 fun(IT) is linear; end; registration cluster strict RingMorphism-like for RingMorphismStr; end; definition mode RingMorphism is RingMorphism-like RingMorphismStr; end; definition let G; func ID G -> RingMorphism equals :: RINGCAT1:def 6 RingMorphismStr(# G,G,id G#); end; registration let G; cluster ID G -> strict; end; reserve F for RingMorphism; definition let G,H; pred G <= H means :: RINGCAT1:def 7 ex F being RingMorphism st dom(F) = G & cod(F) = H; reflexivity; end; definition let G,H; assume G <= H; mode Morphism of G,H -> strict RingMorphism means :: RINGCAT1:def 8 dom(it) = G & cod( it) = H; end; registration let G,H; cluster strict for Morphism of G,H; end; definition let G; redefine func ID G -> strict Morphism of G,G; end; theorem :: RINGCAT1:2 for g,f being RingMorphism st dom(g) = cod(f) ex G1,G2,G3 st G1 <= G2 & G2 <= G3 & the RingMorphismStr of g is Morphism of G2,G3 & the RingMorphismStr of f is Morphism of G1,G2; theorem :: RINGCAT1:3 for F being strict RingMorphism holds F is Morphism of dom(F),cod (F) & dom(F) <= cod(F); theorem :: RINGCAT1:4 for F being strict RingMorphism ex G,H st ex f being Function of G,H st F is Morphism of G,H & F = RingMorphismStr(#G,H,f#) & f is linear; definition let G,F be RingMorphism; assume dom(G) = cod(F); func G*F -> strict RingMorphism means :: RINGCAT1:def 9 for G1,G2,G3 for g being Function of G2,G3, f being Function of G1,G2 st the RingMorphismStr of G = RingMorphismStr(#G2,G3,g#) & the RingMorphismStr of F = RingMorphismStr(#G1,G2, f#) holds it = RingMorphismStr(#G1,G3,g*f#); end; theorem :: RINGCAT1:5 G1 <= G2 & G2 <= G3 implies G1 <= G3; theorem :: RINGCAT1:6 for G being Morphism of G2,G3, F being Morphism of G1,G2 st G1 <= G2 & G2 <= G3 holds G*F is Morphism of G1,G3; definition let G1,G2,G3; let G be Morphism of G2,G3, F be Morphism of G1,G2; assume G1 <= G2 & G2 <= G3; func G*'F -> strict Morphism of G1,G3 equals :: RINGCAT1:def 10 G*F; end; theorem :: RINGCAT1:7 for f,g being strict RingMorphism st dom g = cod f holds ex G1, G2,G3 st ex f0 being Function of G1,G2, g0 being Function of G2,G3 st f = RingMorphismStr(#G1,G2,f0#) & g = RingMorphismStr(#G2,G3,g0#) & g*f = RingMorphismStr(#G1,G3,g0*f0#); theorem :: RINGCAT1:8 for f,g being strict RingMorphism st dom g = cod f holds dom(g*f ) = dom f & cod (g*f) = cod g; theorem :: RINGCAT1:9 for f being Morphism of G1,G2, g being Morphism of G2,G3, h being Morphism of G3,G4 st G1 <= G2 & G2 <= G3 & G3 <= G4 holds h*(g*f) = (h*g) *f; theorem :: RINGCAT1:10 for f,g,h being strict RingMorphism st dom h = cod g & dom g = cod f holds h*(g*f) = (h*g)*f; theorem :: RINGCAT1:11 dom ID(G) = G & cod ID(G) = G & (for f being strict RingMorphism st cod f = G holds (ID G)*f = f) & for g being strict RingMorphism st dom g = G holds g*(ID G) = g; :: :: 2. Domains of rings :: definition let IT be set; attr IT is Ring_DOMAIN-like means :: RINGCAT1:def 11 for x being Element of IT holds x is strict Ring; end; registration cluster Ring_DOMAIN-like non empty for set; end; definition mode Ring_DOMAIN is Ring_DOMAIN-like non empty set; end; reserve V for Ring_DOMAIN; definition let V; redefine mode Element of V -> Ring; end; registration let V; cluster strict for Element of V; end; definition let IT be set; attr IT is RingMorphism_DOMAIN-like means :: RINGCAT1:def 12 for x being object st x in IT holds x is strict RingMorphism; end; registration cluster RingMorphism_DOMAIN-like for non empty set; end; definition mode RingMorphism_DOMAIN is RingMorphism_DOMAIN-like non empty set; end; definition let M be RingMorphism_DOMAIN; redefine mode Element of M -> RingMorphism; end; registration let M be RingMorphism_DOMAIN; cluster strict for Element of M; end; theorem :: RINGCAT1:12 for f being strict RingMorphism holds {f} is RingMorphism_DOMAIN; definition let G,H; mode RingMorphism_DOMAIN of G,H -> RingMorphism_DOMAIN means :: RINGCAT1:def 13 for x being Element of it holds x is Morphism of G,H; end; theorem :: RINGCAT1:13 D is RingMorphism_DOMAIN of G,H iff for x being Element of D holds x is Morphism of G,H; theorem :: RINGCAT1:14 for f being Morphism of G,H holds {f} is RingMorphism_DOMAIN of G,H; definition let G,H; assume G <= H; func Morphs(G,H) -> RingMorphism_DOMAIN of G,H means :: RINGCAT1:def 14 for x being object holds x in it iff x is Morphism of G,H; end; definition let G,H; let M be RingMorphism_DOMAIN of G,H; redefine mode Element of M -> Morphism of G,H; end; registration let G,H; let M be RingMorphism_DOMAIN of G,H; cluster strict for Element of M; end; :: :: 4a. Category of rings - objects :: definition let x,y be object; pred GO x,y means :: RINGCAT1:def 15 ex x1,x2,x3,x4,x5,x6 being set st x = [[x1,x2,x3,x4],x5,x6] & ex G being strict Ring st y = G & x1 = the carrier of G & x2 = the addF of G & x3 = comp G & x4 = 0.G & x5 = the multF of G & x6 = 1.G; end; theorem :: RINGCAT1:15 for x,y1,y2 being object st GO x,y1 & GO x,y2 holds y1 = y2; theorem :: RINGCAT1:16 ex x being object st x in UN & GO x,Z_3; definition let UN; func RingObjects(UN) -> set means :: RINGCAT1:def 16 for y being object holds y in it iff ex x st x in UN & GO x,y; end; theorem :: RINGCAT1:17 Z_3 in RingObjects(UN); registration let UN; cluster RingObjects(UN) -> non empty; end; theorem :: RINGCAT1:18 for x being Element of RingObjects(UN) holds x is strict Ring; registration let UN; cluster RingObjects(UN) -> Ring_DOMAIN-like; end; :: :: 4b. Category of rings - morphisms :: definition let V; func Morphs(V) -> RingMorphism_DOMAIN means :: RINGCAT1:def 17 for x being object holds x in it iff ex G,H being Element of V st G <= H & x is Morphism of G,H; end; :: :: 4c. Category of rings - dom,cod,id :: definition let V; let F be Element of Morphs(V); redefine func dom(F) -> Element of V; redefine func cod(F) -> Element of V; end; definition let V; let G be Element of V; func ID(G) -> strict Element of Morphs(V) equals :: RINGCAT1:def 18 ID(G); ::$CD end; definition let V; func dom(V) -> Function of Morphs(V),V means :: RINGCAT1:def 20 for f being Element of Morphs(V) holds it.f = dom(f); func cod(V) -> Function of Morphs(V),V means :: RINGCAT1:def 21 for f being Element of Morphs(V) holds it.f = cod(f); ::$CD end; :: :: 4d. Category of rings - superposition :: theorem :: RINGCAT1:19 for g,f being Element of Morphs(V) st dom(g) = cod(f) ex G1,G2, G3 being Element of V st G1 <= G2 & G2 <= G3 & g is Morphism of G2,G3 & f is Morphism of G1,G2; theorem :: RINGCAT1:20 for g,f being Element of Morphs(V) st dom(g) = cod(f) holds g*f in Morphs(V); definition let V; func comp(V) -> PartFunc of [:Morphs(V),Morphs(V):],Morphs(V) means :: RINGCAT1:def 23 (for g,f being Element of Morphs(V) holds [g,f] in dom it iff dom(g) = cod(f)) & for g,f being Element of Morphs(V) st [g,f] in dom it holds it.(g,f) = g*f; end; :: :: 4e. Definition of Category of rings :: definition let UN; func RingCat(UN) -> CatStr equals :: RINGCAT1:def 24 CatStr(#RingObjects UN,Morphs RingObjects UN, dom RingObjects UN,cod RingObjects UN, comp RingObjects UN#); end; registration let UN; cluster RingCat(UN) -> strict non void non empty; end; theorem :: RINGCAT1:21 for f,g being Morphism of RingCat(UN) holds [g,f] in dom(the Comp of RingCat(UN)) iff dom g = cod f; theorem :: RINGCAT1:22 for f being (Morphism of RingCat(UN)), f9 being Element of Morphs(RingObjects(UN)), b being Object of RingCat(UN), b9 being Element of RingObjects(UN) holds f is strict Element of Morphs(RingObjects(UN)) & f9 is Morphism of RingCat(UN) & b is strict Element of RingObjects(UN) & b9 is Object of RingCat(UN); ::$CT theorem :: RINGCAT1:24 for f,g being (Morphism of RingCat(UN)), f9,g9 being Element of Morphs(RingObjects(UN)) st f = f9 & g = g9 holds (dom g = cod f iff dom g9 = cod f9) & (dom g = cod f iff [g9,f9] in dom comp(RingObjects(UN))) & (dom g = cod f implies g(*)f = g9*f9) & (dom f = dom g iff dom f9 = dom g9) & (cod f = cod g iff cod f9 = cod g9); registration let UN; cluster RingCat(UN) -> Category-like transitive associative reflexive; end; registration let UN; cluster RingCat(UN) -> with_identities; end; theorem :: RINGCAT1:25 for a being Object of RingCat(UN), aa being Element of RingObjects(UN) st a = aa holds id a = ID aa;