:: Concrete Categories :: by Grzegorz Bancerek :: :: Received January 12, 2001 :: Copyright (c) 2001-2019 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, STRUCT_0, RELAT_2, ALTCAT_1, CAT_1, RELAT_1, SUBSET_1, PBOOLE, ZFMISC_1, FUNCT_1, TARSKI, BINOP_1, MCART_1, FUNCOP_1, ALTCAT_2, FUNCTOR0, MSUALG_6, FUNCT_2, MSUALG_3, WELLORD1, REWRITE1, NATTRA_1, MEMBER_1, REALSET1, PZFMISC1, ALTCAT_3, ARYTM_0, CAT_3, NUMBERS, VALUED_1, CARD_3, YELLOW18; notations TARSKI, XBOOLE_0, ZFMISC_1, XTUPLE_0, XFAMILY, SUBSET_1, ORDINAL1, NUMBERS, RELAT_1, RELSET_1, FUNCT_1, PBOOLE, PARTFUN1, FUNCT_2, MCART_1, ZF_FUND1, BINOP_1, MULTOP_1, CARD_3, FUNCT_4, STRUCT_0, FUNCOP_1, MSUALG_3, FUNCT_3, ALTCAT_1, ALTCAT_2, FUNCTOR0, ALTCAT_3, FUNCTOR2, FUNCTOR3; constructors ZF_FUND1, MSUALG_3, ALTCAT_3, FUNCTOR3, CARD_3, RELSET_1, XTUPLE_0, XFAMILY; registrations XBOOLE_0, SUBSET_1, RELAT_1, FUNCT_1, ORDINAL1, FUNCT_2, FUNCOP_1, PBOOLE, STRUCT_0, ALTCAT_1, ALTCAT_2, FUNCTOR0, FUNCTOR2, ALTCAT_4, RELSET_1, XTUPLE_0; requirements SUBSET, BOOLE; definitions TARSKI, FUNCT_1, MSUALG_3, ALTCAT_2, ALTCAT_1, ALTCAT_3, FUNCTOR0, FUNCTOR2, FUNCTOR3, FUNCT_2, XBOOLE_0; equalities TARSKI, ALTCAT_1, FUNCTOR0, BINOP_1; expansions TARSKI, FUNCT_1, ALTCAT_2, ALTCAT_1, ALTCAT_3, FUNCTOR0, FUNCTOR2, FUNCT_2, BINOP_1; theorems ZFMISC_1, RELAT_1, FUNCT_1, PBOOLE, RELSET_1, FUNCT_2, FUNCT_3, MULTOP_1, ALTCAT_1, CARD_3, MCART_1, TARSKI, FUNCTOR0, FUNCT_4, FUNCTOR1, FUNCTOR2, FUNCTOR3, MSUALG_3, ALTCAT_2, ALTCAT_3, PARTFUN1, XTUPLE_0; schemes FUNCT_1, CARD_3, ALTCAT_1, CLASSES1, PBOOLE, MSSUBFAM, XBOOLE_0; begin :: Definability of categories and functors scheme AltCatStrLambda { A() -> non empty set, B(object,object) -> set, C(object,object,object,object,object) -> object }: ex C being strict non empty transitive AltCatStr st the carrier of C = A() & (for a,b being Object of C holds <^a,b^> = B(a,b)) & for a,b,c being Object of C st <^a,b^> <> {} & <^b,c^> <> {} for f being Morphism of a,b, g being Morphism of b,c holds g*f = C(a,b,c,f,g) provided A1: for a,b,c being Element of A(), f,g being set st f in B(a,b) & g in B(b,c) holds C(a,b,c,f,g) in B(a,c) proof consider B being ManySortedSet of [:A(), A():] such that A2: for a,b being Element of A() holds B.(a,b) = B(a,b) from ALTCAT_1:sch 2; defpred P[object,object] means ex a,b,c being Element of A(), F being Function of {|B,B|}.(a,b,c), {|B|}.(a,b,c) st $1 = [a,b,c] & $2 = F & for f,g being object st f in B(a,b) & g in B(b,c) holds F.[g,f] = C(a,b,c,f,g); A3: for i being object st i in [:A(), A(), A():] ex j being object st P[i,j] proof let i be object; assume i in [:A(), A(), A():]; then consider a,b,c being object such that A4: a in A() and A5: b in A() and A6: c in A() and A7: i = [a,b,c] by MCART_1:68; reconsider a,b,c as Element of A() by A4,A5,A6; defpred P[object,object] means ex f,g being object st $1 = [g,f] & $2 = C(a,b,c,f,g); A8: for x being object st x in [:B(b,c), B(a,b):] ex y being object st y in B(a,c) & P[x, y] proof let x be object; assume x in [:B(b,c), B(a,b):]; then consider x1, x2 being object such that A9: x1 in B(b,c) and A10: x2 in B(a,b) and A11: x = [x1,x2] by ZFMISC_1:def 2; take y = C(a,b,c,x2,x1); thus y in B(a,c) by A1,A9,A10; thus thesis by A11; end; consider F being Function such that A12: dom F = [:B(b,c), B(a,b):] & rng F c= B(a,c) and A13: for x being object st x in [:B(b,c), B(a,b):] holds P[x, F.x] from FUNCT_1:sch 6(A8); A14: B.(a,b) = B(a,b) by A2; A15: B.(b,c) = B(b,c) by A2; A16: B.(a,c) = B(a,c) by A2; A17: {|B,B|}.(a,b,c) = [:B(b,c), B(a,b):] by A14,A15,ALTCAT_1:def 4; {|B|}.(a,b,c) = B(a,c) by A16,ALTCAT_1:def 3; then reconsider F as Function of {|B,B|}.(a,b,c), {|B|}.(a,b,c) by A12,A17,FUNCT_2:2; take j = F, a, b, c, F; thus i = [a,b,c] & j = F by A7; let f,g be object; assume that A18: f in B(a,b) and A19: g in B(b,c); [g,f] in [:B(b,c), B(a,b):] by A18,A19,ZFMISC_1:87; then consider f9,g9 being object such that A20: [g,f] = [g9,f9] and A21: F.[g,f] = C(a,b,c,f9,g9) by A13; g = g9 by A20,XTUPLE_0:1; hence thesis by A20,A21,XTUPLE_0:1; end; consider C being Function such that A22: dom C = [:A(), A(), A():] and A23: for i being object st i in [:A(), A(), A():] holds P[i, C.i] from CLASSES1:sch 1(A3); reconsider C as ManySortedSet of [:A(), A(), A():] by A22,PARTFUN1:def 2 ,RELAT_1:def 18; now let i be object; assume i in [:A(), A(), A():]; then consider a,b,c being Element of A(), F being Function of {|B,B|}.(a,b,c), {|B|}.(a,b,c) such that A24: i = [a,b,c] and A25: C.i = F and for f,g being object st f in B(a,b) & g in B(b,c) holds F.[g,f] = C(a,b,c,f,g) by A23; A26: {|B|}.(a,b,c) = {|B|}.i by A24,MULTOP_1:def 1; {|B,B|}.(a,b,c) = {|B,B|}.i by A24,MULTOP_1:def 1; hence C.i is Function of {|B,B|}.i, {|B|}.i by A25,A26; end; then reconsider C as ManySortedFunction of {|B,B|}, {|B|} by PBOOLE:def 15; set alt = AltCatStr (# A(), B, C #); alt is transitive proof let o1,o2,o3 be Object of alt; reconsider a = o1, b = o2, c = o3 as Element of A(); set f = the Element of <^o1,o2^>,g = the Element of <^o2,o3^>; assume that A27: <^o1,o2^> <> {} and A28: <^o2,o3^> <> {}; A29: f in <^o1,o2^> by A27; A30: g in <^o2,o3^> by A28; A31: f in B(a,b) by A2,A29; g in B(b,c) by A2,A30; then C(a,b,c,f,g) in B(a,c) by A1,A31; hence thesis by A2; end; then reconsider alt as strict transitive non empty AltCatStr; take alt; thus the carrier of alt = A(); thus for a,b being Object of alt holds <^a,b^> = B(a,b) by A2; let a,b,c be Object of alt such that A32: <^a,b^> <> {} and A33: <^b,c^> <> {}; [a,b,c] in [:A(), A(), A():] by MCART_1:69; then consider a9,b9,c9 being Element of A(), F being Function of {|B,B|}.(a9,b9,c9), {|B|}.(a9,b9,c9) such that A34: [a,b,c] = [a9,b9,c9] and A35: C.[a,b,c] = F and A36: for f,g being object st f in B(a9,b9) & g in B(b9,c9) holds F.[g,f] = C(a9,b9,c9,f,g) by A23; A37: a = a9 by A34,XTUPLE_0:3; A38: b = b9 by A34,XTUPLE_0:3; A39: c = c9 by A34,XTUPLE_0:3; let f be Morphism of a,b, g be Morphism of b,c; A40: <^a,b^> = B(a,b) by A2; <^b,c^> = B(b,c) by A2; then A41: F.[g,f] = C(a,b,c,f,g) by A32,A33,A36,A37,A38,A39,A40; thus g*f = (the Comp of alt).(a,b,c).(g,f) by A32,A33,ALTCAT_1:def 8 .= C(a,b,c,f,g) by A35,A41,MULTOP_1:def 1; end; scheme CatAssocSch { A() -> non empty transitive AltCatStr, C(object,object,object,object,object) -> object }: A() is associative provided A1: for a,b,c being Object of A() st <^a,b^> <> {} & <^b,c^> <> {} for f being Morphism of a,b, g being Morphism of b,c holds g*f = C(a,b,c,f,g) and A2: for a,b,c,d being Object of A(), f,g,h being set st f in <^a,b^> & g in <^b,c^> & h in <^c,d^> holds C(a,c,d,C(a,b,c,f,g),h) = C(a,b,d,f,C(b,c,d,g,h)) proof let i,j,k,l be Element of A(); set alt = A(), IT = the Comp of alt; set B = the Arrows of alt; reconsider i9 = i, j9 = j, k9 = k, l9 = l as Object of alt; let f,g,h be set such that A3: f in B.(i,j) and A4: g in B.(j,k) and A5: h in B.(k,l); A6: B.(i,j) = <^i9,j9^>; reconsider f9 = f as Morphism of i9, j9 by A3; A7: B.(j,k) = <^j9,k9^>; reconsider g9 = g as Morphism of j9, k9 by A4; A8: B.(k,l) = <^k9,l9^>; reconsider h9 = h as Morphism of k9, l9 by A5; A9: <^i9,k9^> <> {} by A3,A4,A6,A7,ALTCAT_1:def 2; A10: <^j9,l9^> <> {} by A4,A5,A7,A8,ALTCAT_1:def 2; thus IT.(i,k,l).(h,IT.(i,j,k).(g,f)) = IT.(i,k,l).(h,g9*f9) by A3,A4,ALTCAT_1:def 8 .= h9*(g9*f9) by A5,A9,ALTCAT_1:def 8 .= C(i,k,l,g9*f9,h9) by A1,A5,A9 .= C(i,k,l,C(i,j,k,f,g),h) by A1,A3,A4 .= C(i9,j9,l9,f,C(j9,k9,l9,g,h)) by A2,A3,A4,A5,A6,A7,A8 .= C(i9,j9,l9,f,h9*g9) by A1,A4,A5 .= (h9*g9)*f9 by A1,A3,A10 .= IT.(i,j,l).(h9*g9,f) by A3,A10,ALTCAT_1:def 8 .= IT.(i,j,l).(IT.(j,k,l).(h,g),f) by A4,A5,ALTCAT_1:def 8; end; scheme CatUnitsSch { A() -> non empty transitive AltCatStr, C(object,object,object,object,object) -> object }: A() is with_units provided A1: for a,b,c being Object of A() st <^a,b^> <> {} & <^b,c^> <> {} for f being Morphism of a,b, g being Morphism of b,c holds g*f = C(a,b,c,f,g) and A2: for a being Object of A() ex f being set st f in <^a,a^> & for b being Object of A(), g being set st g in <^a,b^> holds C(a,a,b,f,g) = g and A3: for a being Object of A() ex f being set st f in <^a,a^> & for b being Object of A(), g being set st g in <^b,a^> holds C(b,a,a,g,f) = g proof set alt = A(), IT = the Comp of alt, I = the carrier of alt; set G = the Arrows of alt; hereby let j be Element of I; reconsider j9 = j as Object of alt; consider f be set such that A4: f in <^j9,j9^> and A5: for b being Element of A(), g being set st g in <^b,j9^> holds C(b,j9,j9,g,f) = g by A3; take f; thus f in G.(j,j) by A4; let i be Element of I, g be set such that A6: g in G.(i,j); reconsider i9 = i as Object of alt; G.(i,j) = <^i9,j9^>; then A7: C(i,j,j,g,f) = g by A5,A6; reconsider f9 = f as Morphism of j9,j9 by A4; reconsider g9 = g as Morphism of i9,j9 by A6; thus IT.(i,j,j).(f,g) = f9*g9 by A4,A6,ALTCAT_1:def 8 .= g by A1,A4,A6,A7; end; let i be Element of I; reconsider i9 = i as Object of alt; consider e being set such that A8: e in <^i9,i9^> and A9: for b being Element of A(), g being set st g in <^i9,b^> holds C(i,i,b,e,g) = g by A2; take e; thus e in G.(i,i) by A8; reconsider e9 = e as Morphism of i9,i9 by A8; let j be Element of I, f be set such that A10: f in G.(i,j); reconsider j9 = j as Object of alt; G.(i,j) = <^i9,j9^>; then A11: C(i,i,j,e,f) = f by A9,A10; reconsider f9 = f as Morphism of i9, j9 by A10; thus IT.(i,i,j).(f,e) = f9*e9 by A8,A10,ALTCAT_1:def 8 .= f by A1,A8,A10,A11; end; scheme CategoryLambda { A() -> non empty set, B(object,object) -> set, C(object,object,object,object,object) -> object }: ex C being strict category st the carrier of C = A() & (for a,b being Object of C holds <^a,b^> = B(a,b)) & for a,b,c being Object of C st <^a,b^> <> {} & <^b,c^> <> {} for f being Morphism of a,b, g being Morphism of b,c holds g*f = C(a,b,c,f,g) provided A1: for a,b,c being Element of A(), f,g being set st f in B(a,b) & g in B(b,c) holds C(a,b,c,f,g) in B(a,c) and A2: for a,b,c,d being Element of A(), f,g,h being set st f in B(a,b) & g in B(b,c) & h in B(c,d) holds C(a,c,d,C(a,b,c,f,g),h) = C(a,b,d,f,C(b,c,d,g,h)) and A3: for a being Element of A() ex f being set st f in B(a,a) & for b being Element of A(), g being set st g in B(a,b) holds C(a,a,b,f,g) = g and A4: for a being Element of A() ex f being set st f in B(a,a) & for b being Element of A(), g being set st g in B(b,a) holds C(b,a,a,g,f) = g proof A5: for a,b,c being Element of A(), f,g being set st f in B(a,b) & g in B(b,c) holds C(a,b,c,f,g) in B(a,c) by A1; consider C being strict non empty transitive AltCatStr such that A6: the carrier of C = A() and A7: for a,b being Object of C holds <^a,b^> = B(a,b) and A8: for a,b,c being Object of C st <^a,b^> <> {} & <^b,c^> <> {} for f being Morphism of a,b, g being Morphism of b,c holds g*f = C(a,b,c,f,g) from AltCatStrLambda(A5); A9: for a,b,c,d being Object of C, f,g,h being set st f in <^a,b^> & g in <^b,c^> & h in <^c,d^> holds C(a,c,d,C(a,b,c,f,g),h) = C(a,b,d,f,C(b,c,d,g,h)) proof let a,b,c,d be Object of C, f,g,h be set such that A10: f in <^a,b^> and A11: g in <^b,c^> and A12: h in <^c,d^>; A13: <^a,b^> = B(a,b) by A7; A14: <^b,c^> = B(b,c) by A7; <^c,d^> = B(c,d) by A7; hence thesis by A2,A6,A10,A11,A12,A13,A14; end; A15: for a being Object of C ex f being set st f in <^a,a^> & for b being Object of C, g being set st g in <^a,b^> holds C(a,a,b,f,g) = g proof let a be Object of C; consider f being set such that A16: f in B(a,a) and A17: for b being Element of A(), g being set st g in B(a,b) holds C(a,a,b,f,g) = g by A3,A6; take f; thus f in <^a,a^> by A7,A16; let b be Object of C; <^a,b^> = B(a,b) by A7; hence thesis by A6,A17; end; A18: for a being Object of C ex f being set st f in <^a,a^> & for b being Object of C, g being set st g in <^b,a^> holds C(b,a,a,g,f) = g proof let a be Object of C; consider f being set such that A19: f in B(a,a) and A20: for b being Element of A(), g being set st g in B(b,a) holds C(b,a,a,g,f) = g by A4,A6; take f; thus f in <^a,a^> by A7,A19; let b be Object of C; <^b,a^> = B(b,a) by A7; hence thesis by A6,A20; end; A21: C is associative from CatAssocSch(A8,A9); C is with_units from CatUnitsSch(A8,A15,A18); hence thesis by A6,A7,A8,A21; end; scheme CategoryLambdaUniq { A() -> non empty set, B(object,object) -> object, C(object,object,object,object,object) -> object }: for C1,C2 being non empty transitive AltCatStr st the carrier of C1 = A() & (for a,b being Object of C1 holds <^a,b^> = B(a,b)) & (for a,b,c being Object of C1 st <^a,b^> <> {} & <^b,c^> <> {} for f being Morphism of a,b, g being Morphism of b,c holds g*f = C(a,b,c,f,g)) & the carrier of C2 = A() & (for a,b being Object of C2 holds <^a,b^> = B(a,b)) & (for a,b,c being Object of C2 st <^a,b^> <> {} & <^b,c^> <> {} for f being Morphism of a,b, g being Morphism of b,c holds g*f = C(a,b,c,f,g)) holds the AltCatStr of C1 = the AltCatStr of C2 proof let C1,C2 be non empty transitive AltCatStr such that A1: the carrier of C1 = A() and A2: for a,b being Object of C1 holds <^a,b^> = B(a,b) and A3: for a,b,c being Object of C1 st <^a,b^> <> {} & <^b,c^> <> {} for f being Morphism of a,b, g being Morphism of b,c holds g*f = C(a,b,c,f,g) and A4: the carrier of C2 = A() and A5: for a,b being Object of C2 holds <^a,b^> = B(a,b) and A6: for a,b,c being Object of C2 st <^a,b^> <> {} & <^b,c^> <> {} for f being Morphism of a,b, g being Morphism of b,c holds g*f = C(a,b,c,f,g); A7: now let i be object; assume i in [:A(),A():]; then consider a,b being object such that A8: a in A() and A9: b in A() and A10: i = [a,b] by ZFMISC_1:def 2; reconsider a1 = a, b1 = b as Object of C1 by A1,A8,A9; reconsider a2 = a, b2 = b as Object of C2 by A4,A8,A9; thus (the Arrows of C1).i = <^a1,b1^> by A10 .= B(a1,b1) by A2 .= <^a2,b2^>by A5 .= (the Arrows of C2).i by A10; end; then A11: the Arrows of C1 = the Arrows of C2 by A1,A4,PBOOLE:3; now let i be object; assume i in [:A(), A(), A():]; then consider a,b,c being object such that A12: a in A() and A13: b in A() and A14: c in A() and A15: i = [a,b,c] by MCART_1:68; reconsider a1 = a, b1 = b, c1 = c as Object of C1 by A1,A12,A13,A14; reconsider a2 = a, b2 = b, c2 = c as Object of C2 by A4,A12,A13,A14; A16: (the Comp of C1).i = (the Comp of C1).(a1,b1,c1) by A15,MULTOP_1:def 1; A17: (the Comp of C2).i = (the Comp of C2).(a2,b2,c2) by A15,MULTOP_1:def 1; A18: now assume A19: [:<^b1,c1^>, <^a1,b1^>:] <> {}; then A20: <^b1,c1^> <> {} by ZFMISC_1:90; <^a1,b1^> <> {} by A19,ZFMISC_1:90; hence <^a1,c1^> <> {} by A20,ALTCAT_1:def 2; end; then A21: dom ((the Comp of C1).(a1,b1,c1)) = [:<^b1,c1^>, <^a1,b1^>:] by FUNCT_2:def 1; A22: dom ((the Comp of C2).(a2,b2,c2)) = [:<^b1,c1^>, <^a1,b1^>:] by A11,A18, FUNCT_2:def 1; now let j be object; assume j in [:<^b1,c1^>, <^a1,b1^>:]; then consider j1,j2 being object such that A23: j1 in <^b1,c1^> and A24: j2 in <^a1,b1^> and A25: j = [j1,j2] by ZFMISC_1:def 2; reconsider j1 as Morphism of b1,c1 by A23; reconsider j2 as Morphism of a1,b1 by A24; reconsider f1 = j1 as Morphism of b2,c2 by A1,A4,A7,PBOOLE:3; reconsider f2 = j2 as Morphism of a2,b2 by A1,A4,A7,PBOOLE:3; thus (the Comp of C1).(a1,b1,c1).j = (the Comp of C1).(a1,b1,c1).(j1,j2) by A25 .= j1*j2 by A23,A24,ALTCAT_1:def 8 .= C(a1,b1,c1,j2,j1) by A3,A23,A24 .= f1*f2 by A6,A11,A23,A24 .= (the Comp of C2).(a2,b2,c2).(f1,f2) by A11,A23,A24,ALTCAT_1:def 8 .= (the Comp of C2).(a2,b2,c2).j by A25; end; hence (the Comp of C1).i = (the Comp of C2).i by A16,A17,A21,A22; end; hence thesis by A1,A4,A11,PBOOLE:3; end; scheme CategoryQuasiLambda { A() -> non empty set, P[object,object,object], B(object,object) -> set, C(object,object,object,object,object) -> object }: ex C being strict category st the carrier of C = A() & (for a,b being Object of C for f being set holds f in <^a,b^> iff f in B(a,b) & P[a,b,f]) & for a,b,c being Object of C st <^a,b^> <> {} & <^b,c^> <> {} for f being Morphism of a,b, g being Morphism of b,c holds g*f = C(a,b,c,f,g) provided A1: for a,b,c being Element of A(), f,g being set st f in B(a,b) & P[a,b,f] & g in B(b,c) & P[b,c,g] holds C(a,b,c,f,g) in B(a,c) & P[a,c, C(a,b,c,f,g)] and A2: for a,b,c,d being Element of A(), f,g,h being set st f in B(a,b) & P[a,b,f] & g in B(b,c) & P[b,c,g] & h in B(c,d) & P[c,d,h] holds C(a,c,d,C(a,b,c,f,g),h) = C(a,b,d,f,C(b,c,d,g,h)) and A3: for a being Element of A() ex f being set st f in B(a,a) & P[a,a,f] & for b being Element of A(), g being set st g in B(a,b) & P[a,b,g] holds C(a,a,b,f,g) = g and A4: for a being Element of A() ex f being set st f in B(a,a) & P[a,a,f] & for b being Element of A(), g being set st g in B(b,a) & P[b,a,g] holds C(b,a,a,g,f) = g proof deffunc F(object) = B($1`1,$1`2); defpred Q[object,object] means P[$1`1,$1`2,$2]; consider P being Function such that dom P = [:A(),A():] and A5: for i being object st i in [:A(),A():] for x being object holds x in P.i iff x in F(i) & Q[i,x] from CARD_3:sch 2; deffunc b(set,set) = P.($1,$2); A6: now let a,b be Element of A(); let x be set; A7: [a,b]`1 = a; A8: [a,b]`2 = b; [a,b] in [:A(),A() :] by ZFMISC_1:def 2; hence x in P.(a,b) iff x in B(a,b) & P[a,b,x] by A5,A7,A8; end; A9: now let a,b,c be Element of A(), f,g be set; assume that A10: f in b(a,b) and A11: g in b(b,c); A12: f in B(a,b) by A6,A10; A13: P[a,b,f] by A6,A10; A14: g in B(b,c) by A6,A11; A15: P[b,c,g] by A6,A11; then A16: C(a,b,c,f,g) in B(a,c) by A1,A12,A13,A14; P[a,c, C(a,b,c,f,g)] by A1,A12,A13,A14,A15; hence C(a,b,c,f,g) in b(a,c) by A6,A16; end; A17: now let a,b,c,d be Element of A(), f,g,h be set; assume that A18: f in b(a,b) and A19: g in b(b,c) and A20: h in b(c,d); A21: f in B(a,b) by A6,A18; A22: P[a,b,f] by A6,A18; A23: g in B(b,c) by A6,A19; A24: P[b,c,g] by A6,A19; A25: h in B(c,d) by A6,A20; P[c,d,h] by A6,A20; hence C(a,c,d,C(a,b,c,f,g),h) = C(a,b,d,f,C(b,c,d,g,h)) by A2,A21,A22,A23 ,A24,A25; end; A26: now let a be Element of A(); consider f being set such that A27: f in B(a,a) and A28: P[a,a,f] and A29: for b being Element of A(), g being set st g in B(a,b) & P[a,b,g] holds C(a,a,b,f,g) = g by A3; take f; thus f in b(a,a) by A6,A27,A28; let b be Element of A(), g be set; assume A30: g in b(a,b); then A31: g in B(a,b) by A6; P[a,b,g] by A6,A30; hence C(a,a,b,f,g) = g by A29,A31; end; A32: now let a be Element of A(); consider f being set such that A33: f in B(a,a) and A34: P[a,a,f] and A35: for b being Element of A(), g being set st g in B(b,a) & P[b,a,g] holds C(b,a,a,g,f) = g by A4; take f; thus f in b(a,a) by A6,A33,A34; let b be Element of A(), g be set; assume A36: g in b(b,a); then A37: g in B(b,a) by A6; P[b,a,g] by A6,A36; hence C(b,a,a,g,f) = g by A35,A37; end; consider C being strict category such that A38: the carrier of C = A() and A39: for a,b being Object of C holds <^a,b^> = b(a,b) and A40: for a,b,c being Object of C st <^a,b^> <> {} & <^b,c^> <> {} for f being Morphism of a,b, g being Morphism of b,c holds g*f = C(a,b,c,f,g) from CategoryLambda(A9,A17,A26,A32); take C; thus the carrier of C = A() by A38; hereby let a,b be Object of C, f be set; <^a,b^> = P.(a,b) by A39; hence f in <^a,b^> iff f in B(a,b) & P[a,b,f] by A6,A38; end; thus thesis by A40; end; registration let f be Function-yielding Function; let a,b,c be set; cluster f.(a,b,c) -> Relation-like Function-like; coherence proof f.(a,b,c) = f.[a,b,c] by MULTOP_1:def 1; hence thesis; end; end; scheme SubcategoryEx { A() -> category, P[object], Q[object,object,object]}: ex B being strict non empty subcategory of A() st (for a being Object of A() holds a is Object of B iff P[a]) & for a,b being Object of A(), a9,b9 being Object of B st a9 = a & b9 = b & <^a,b^> <> {} for f being Morphism of a,b holds f in <^a9,b9^> iff Q[a,b,f] provided A1: ex a being Object of A() st P[a] and A2: for a,b,c being Object of A() st P[a] & P[b] & P[c] & <^a,b^> <> {} & <^b,c^> <> {} for f being Morphism of a,b, g being Morphism of b,c st Q[a,b,f] & Q[b,c,g] holds Q[a,c,g*f] and A3: for a being Object of A() st P[a] holds Q[a,a, idm a] proof consider X being set such that A4: for x being object holds x in X iff x in the carrier of A() & P[x] from XBOOLE_0:sch 1; reconsider X as non empty set by A1,A4; A5: X c= the carrier of A() by A4; deffunc B(set,set) = (the Arrows of A()).($1,$2); deffunc C(set,set,set,set,set) = (the Comp of A()).($1,$2,$3).($5,$4); A6: now let a,b,c be Element of X, f,g be set such that A7: f in B(a,b) and A8: Q[a,b,f] and A9: g in B(b,c) and A10: Q[b,c,g]; reconsider a9 = a, b9 = b, c9 = c as Object of A() by A4; A11: B(a,b) = <^a9,b9^>; reconsider f9 = f as Morphism of a9, b9 by A7; A12: B(b,c) = <^b9,c9^>; reconsider g9 = g as Morphism of b9, c9 by A9; A13: C(a,b,c,f,g) = g9*f9 by A7,A9,ALTCAT_1:def 8; <^a9,c9^> <> {} by A7,A9,A11,A12,ALTCAT_1:def 2; hence C(a,b,c,f,g) in B(a,c) by A13; A14: P[a9] by A4; A15: P[b9] by A4; P[c9] by A4; hence Q[a,c, C(a,b,c,f,g)] by A2,A7,A8,A9,A10,A13,A14,A15; end; A16: now let a,b,c,d be Element of X, f,g,h being set such that A17: f in B(a,b) and Q[a,b,f] and A18: g in B(b,c) and Q[b,c,g] and A19: h in B(c,d) and Q[c,d,h]; reconsider a9 = a, b9 = b, c9 = c, d9 = d as Object of A() by A4; A20: B(a,b) = <^a9,b9^>; reconsider f9 = f as Morphism of a9, b9 by A17; A21: B(b,c) = <^b9,c9^>; reconsider g9 = g as Morphism of b9, c9 by A18; A22: B(c,d) = <^c9,d9^>; reconsider h9 = h as Morphism of c9, d9 by A19; A23: <^a9,c9^> <> {} by A17,A18,A20,A21,ALTCAT_1:def 2; A24: <^b9,d9^> <> {} by A18,A19,A21,A22,ALTCAT_1:def 2; thus C(a,c,d,C(a,b,c,f,g),h) = C(a9,c9,d9,g9*f9,h) by A17,A18,ALTCAT_1:def 8 .= h9*(g9*f9) by A19,A23,ALTCAT_1:def 8 .= h9*g9*f9 by A17,A18,A19,ALTCAT_1:21 .= C(a,b,d,f,h9*g9) by A17,A24,ALTCAT_1:def 8 .= C(a,b,d,f,C(b,c,d,g,h)) by A18,A19,ALTCAT_1:def 8; end; A25: now let a be Element of X; reconsider b = a as Object of A() by A4; reconsider f = idm b as set; take f; P[b] by A4; hence f in B(a,a) & Q[a,a,f] by A3; let c be Element of X, g be set such that A26: g in B(a,c) and Q[a,c,g]; reconsider d = c as Object of A() by A4; reconsider g9 = g as Morphism of b,d by A26; thus C(a,a,c,f,g) = g9* idm b by A26,ALTCAT_1:def 8 .= g by A26,ALTCAT_1:def 17; end; A27: now let a be Element of X; reconsider b = a as Object of A() by A4; reconsider f = idm b as set; take f; P[b] by A4; hence f in B(a,a) & Q[a,a,f] by A3; let c be Element of X, g be set such that A28: g in B(c,a) and Q[c,a,g]; reconsider d = c as Object of A() by A4; reconsider g9 = g as Morphism of d,b by A28; thus C(c,a,a,g,f) = (idm b)*g9 by A28,ALTCAT_1:def 8 .= g by A28,ALTCAT_1:20; end; consider C being strict category such that A29: the carrier of C = X and A30: for a,b being Object of C for f being set holds f in <^a,b^> iff f in B(a,b) & Q[a,b,f] and A31: for a,b,c being Object of C st <^a,b^> <> {} & <^b,c^> <> {} for f being Morphism of a,b, g being Morphism of b,c holds g*f = C(a,b,c,f,g) from CategoryQuasiLambda(A6,A16,A25,A27); C is SubCatStr of A() proof thus the carrier of C c= the carrier of A() by A5,A29; thus [:the carrier of C, the carrier of C:] c= [:the carrier of A(), the carrier of A():] by A5,A29,ZFMISC_1:96; hereby let i be set; assume i in [:the carrier of C, the carrier of C:]; then consider a,b being object such that A32: a in the carrier of C and A33: b in the carrier of C and A34: [a,b] = i by ZFMISC_1:def 2; reconsider a,b as Object of C by A32,A33; A35: (the Arrows of C).i = <^a,b^> by A34; A36: (the Arrows of A()).i = (the Arrows of A()).(a,b) by A34; thus (the Arrows of C).i c= (the Arrows of A()).i by A30,A35,A36; end; thus [:the carrier of C, the carrier of C, the carrier of C:] c= [:the carrier of A(), the carrier of A(), the carrier of A():] by A5,A29,MCART_1:73; let i be set; assume i in [:the carrier of C, the carrier of C, the carrier of C:]; then consider a,b,c being object such that A37: a in the carrier of C and A38: b in the carrier of C and A39: c in the carrier of C and A40: [a,b,c] = i by MCART_1:68; reconsider a,b,c as Object of C by A37,A38,A39; reconsider a9 = a, b9 = b, c9 = c as Object of A() by A4,A29; let x be object; assume x in (the Comp of C).i; then A41: x in (the Comp of C).(a,b,c) by A40,MULTOP_1:def 1; then consider gf, h being object such that A42: x = [gf,h] and A43: gf in [:(the Arrows of C).(b,c), (the Arrows of C).(a,b):] and A44: h in (the Arrows of C).(a,c) by RELSET_1:2; consider g,f being object such that A45: g in (the Arrows of C).(b,c) and A46: f in (the Arrows of C).(a,b) and A47: [g,f] = gf by A43,ZFMISC_1:def 2; reconsider f as Morphism of a,b by A46; reconsider g as Morphism of b,c by A45; reconsider h as Morphism of a,c by A44; A48: (the Comp of A()).(a9,b9,c9) = (the Comp of A()).i by A40,MULTOP_1:def 1; A49: g in (the Arrows of A()).(b9,c9) by A30,A45; A50: f in (the Arrows of A()).(a9,b9) by A30,A46; A51: h = (the Comp of C).(a,b,c).(g,f) by A41,A42,A47,FUNCT_1:1 .= g*f by A45,A46,ALTCAT_1:def 8 .= (the Comp of A()).(a9,b9,c9).(g,f) by A31,A45,A46; h in (the Arrows of A()).(a9,c9) by A30,A44; then dom ((the Comp of A()).(a9,b9,c9)) = [:(the Arrows of A()).(b9,c9), (the Arrows of A()).(a9,b9):] by FUNCT_2:def 1; then gf in dom ((the Comp of A()).(a9,b9,c9)) by A47,A49,A50,ZFMISC_1:def 2 ; hence thesis by A42,A47,A48,A51,FUNCT_1:def 2; end; then reconsider C as non empty SubCatStr of A(); for o being Object of C, o9 being Object of A() st o = o9 holds idm o9 in <^o,o^> proof let a be Object of C, b be Object of A(); assume A52: a = b; then P[b] by A4,A29; then Q[b,b, idm b] by A3; hence thesis by A30,A52; end; then reconsider C as strict non empty subcategory of A() by ALTCAT_2:def 14; take C; thus for a be Object of A() holds a is Object of C iff P[a] by A4,A29; let a,b be Object of A(), a9,b9 be Object of C such that A53: a9 = a and A54: b9 = b and A55: <^a,b^> <> {}; let f be Morphism of a,b; thus thesis by A30,A53,A54,A55; end; scheme CovariantFunctorLambda { A,B() -> category, O(object) -> object, F(object,object,object) -> object }: ex F being covariant strict Functor of A(),B() st (for a being Object of A() holds F.a = O(a)) & for a,b being Object of A() st <^a,b^> <> {} for f being Morphism of a,b holds F.f = F(a,b,f) provided A1: for a being Object of A() holds O(a) is Object of B() and A2: for a,b being Object of A() st <^a,b^> <> {} for f being Morphism of a,b holds F(a,b,f) in (the Arrows of B()).(O(a), O(b)) and A3: for a,b,c being Object of A() st <^a,b^> <> {} & <^b,c^> <> {} for f being Morphism of a,b, g being Morphism of b,c for a9,b9,c9 being Object of B() st a9 = O(a) & b9 = O(b) & c9 = O(c) for f9 being Morphism of a9,b9, g9 being Morphism of b9,c9 st f9 = F(a,b,f) & g9 = F(b,c,g) holds F(a,c,g*f) = g9*f9 and A4: for a being Object of A(), a9 being Object of B() st a9 = O(a) holds F(a,a,idm a) = idm a9 proof consider O being Function such that A5: dom O = the carrier of A() and A6: for x being object st x in the carrier of A() holds O.x = O(x) from FUNCT_1:sch 3; rng O c= the carrier of B() proof let y be object; assume y in rng O; then consider x being object such that A7: x in dom O and A8: y = O.x by FUNCT_1:def 3; reconsider x as Object of A() by A5,A7; A9: y = O(x) by A6,A8; O(x) is Object of B() by A1; hence thesis by A9; end; then reconsider O as Function of the carrier of A(), the carrier of B() by A5,FUNCT_2:2; reconsider OM = [:O,O:] as bifunction of the carrier of A(), the carrier of B(); defpred P[object,object,object] means $1 = F($3`1,$3`2,$2); A10: for i being object st i in [:the carrier of A(), the carrier of A():] for x being object st x in (the Arrows of A()).i ex y being object st y in ((the Arrows of B())*OM).i & P[y,x,i] proof let i be object; assume A11: i in [:the carrier of A(), the carrier of A():]; then consider a,b being object such that A12: a in the carrier of A() and A13: b in the carrier of A() and A14: [a,b] = i by ZFMISC_1:def 2; reconsider a,b as Object of A() by A12,A13; let x be object; assume A15: x in (the Arrows of A()).i; then reconsider f = x as Morphism of a,b by A14; take y = F(a,b,f); A16: y in (the Arrows of B()).(O(a), O(b)) by A2,A14,A15; A17: O(a) = O.a by A6; i in dom OM by A5,A11,FUNCT_3:def 8; then ((the Arrows of B())*OM).i = (the Arrows of B()).(OM.(a,b)) by A14,FUNCT_1:13 .= (the Arrows of B()).(O.a,O.b) by A5,FUNCT_3:def 8; hence y in ((the Arrows of B())*OM).i by A6,A16,A17; thus thesis by A14; end; consider M being ManySortedFunction of the Arrows of A(), (the Arrows of B())*OM such that A18: for i be object st i in [:the carrier of A(), the carrier of A():] ex f be Function of (the Arrows of A()).i, ((the Arrows of B())*OM).i st f = M.i & for x be object st x in (the Arrows of A()).i holds P[f.x, x, i] from MSSUBFAM:sch 1(A10); reconsider M as MSUnTrans of OM, the Arrows of A(), the Arrows of B() by FUNCTOR0:def 4; FunctorStr(#OM, M#) is Covariant proof take O; thus thesis; end; then reconsider F = FunctorStr(#OM, M#) as Covariant FunctorStr over A(), B(); A19: now let a be Object of A(); thus F.a = ([O.a,O.a])`1 by A5,FUNCT_3:def 8 .= O.a .= O(a) by A6; end; A20: now let o1,o2 be Object of A() such that A21: <^o1,o2^> <> {}; let g be Morphism of o1,o2; [o1,o2] in [:the carrier of A(), the carrier of A():] by ZFMISC_1:def 2; then consider f being Function of (the Arrows of A()).[o1,o2], ((the Arrows of B())*OM).[o1,o2] such that A22: f = M.[o1,o2] and A23: for x be object st x in (the Arrows of A()).[o1,o2] holds P[f.x, x, [o1,o2]] by A18; :: then consider f being Function of (the Arrows of A()).[o1,o2], :: ((the Arrows of B())*OM).[o1,o2] such that :: A22: f = M.[o1,o2] and :: A23: for x being set st x in (the Arrows of A()).[o1,o2] :: holds f.x = F([o1,o2]`1,[o1,o2]`2,x) by A18; f.g = F([o1,o2]`1,[o1,o2]`2,g) by A21,A23 .= F(o1,[o1,o2]`2,g) .= F(o1,o2,g); hence Morph-Map(F,o1,o2).g = F(o1,o2,g) by A22; end; A24: F is feasible proof let o1,o2 be Object of A(); set g = the Morphism of o1,o2; assume A25: <^o1,o2^> <> {}; then Morph-Map(F,o1,o2).g = F(o1,o2,g) by A20; then Morph-Map(F,o1,o2).g in (the Arrows of B()).(O(o1), O(o2)) by A2,A25; then Morph-Map(F,o1,o2).g in (the Arrows of B()).(F.o1, O(o2)) by A19; hence thesis by A19; end; A26: now let o1,o2 be Object of A(); assume A27: <^o1,o2^> <> {}; let g be Morphism of o1,o2; A28: Morph-Map(F,o1,o2).g = F(o1,o2,g) by A20,A27; <^F.o1, F.o2^> <> {} by A24,A27; hence F.g = F(o1,o2,g) by A27,A28,FUNCTOR0:def 15; end; A29: F is comp-preserving proof let o1,o2,o3 be Object of A() such that A30: <^o1,o2^> <> {} and A31: <^o2,o3^> <> {}; let f be Morphism of o1,o2, g be Morphism of o2,o3; set a = O.o1, b = O.o2, c = O.o3; A32: a = O(o1) by A6; A33: b = O(o2) by A6; A34: c = O(o3) by A6; reconsider f9 = F(o1,o2,f) as Morphism of a,b by A2,A30,A32,A33; reconsider g9 = F(o2,o3,g) as Morphism of b,c by A2,A31,A33,A34; A35: a = F.o1 by A19,A32; A36: b = F.o2 by A19,A33; A37: c = F.o3 by A19,A34; reconsider ff = f9 as Morphism of F.o1, F.o2 by A19,A32,A36; reconsider gg = g9 as Morphism of F.o2, F.o3 by A19,A34,A36; take ff, gg; A38: <^o1, o3^> <> {} by A30,A31,ALTCAT_1:def 2; F(o1,o3,g*f) = gg*ff by A3,A30,A31,A32,A33,A34,A35,A36,A37; hence ff = Morph-Map(F,o1,o2).f & gg = Morph-Map(F,o2,o3).g & Morph-Map(F,o1,o3).(g*f) = gg*ff by A20,A30,A31,A38; end; F is Functor of A(), B() proof thus F is feasible by A24; hereby let o be Object of A(); A39: F.o = O(o) by A19; thus Morph-Map(F,o,o).idm o = F(o,o,idm o) by A20 .= idm F.o by A4,A39; end; thus thesis by A29; end; then reconsider F as covariant strict Functor of A(), B() by A29; take F; thus thesis by A19,A26; end; theorem Th1: for A,B being category, F,G being covariant Functor of A,B st (for a being Object of A holds F.a = G.a) & (for a,b being Object of A st <^a,b^> <> {} for f being Morphism of a,b holds F.f = G.f) holds the FunctorStr of F = the FunctorStr of G proof let A,B be category, F,G be covariant Functor of A,B such that A1: for a being Object of A holds F.a = G.a and A2: for a,b being Object of A st <^a,b^> <> {} for f being Morphism of a,b holds F.f = G.f; the ObjectMap of F is Covariant by FUNCTOR0:def 12; then consider ff being Function of the carrier of A, the carrier of B such that A3: the ObjectMap of F = [:ff, ff:]; the ObjectMap of G is Covariant by FUNCTOR0:def 12; then consider gg being Function of the carrier of A, the carrier of B such that A4: the ObjectMap of G = [:gg, gg:]; now let a,b be Element of A; reconsider x = a, y = b as Object of A; A5: dom ff = the carrier of A by FUNCT_2:def 1; A6: dom gg = the carrier of A by FUNCT_2:def 1; A7: (the ObjectMap of F).(x,x) = [ff.x, ff.x] by A3,A5,FUNCT_3:def 8; A8: (the ObjectMap of F).(y,y) = [ff.y, ff.y] by A3,A5,FUNCT_3:def 8; A9: (the ObjectMap of G).(x,x) = [gg.x, gg.x] by A4,A6,FUNCT_3:def 8; A10: (the ObjectMap of G).(y,y) = [gg.y, gg.y] by A4,A6,FUNCT_3:def 8; A11: F.x = ff.x by A7; A12: F.y = ff.y by A8; A13: G.x = gg.x by A9; A14: G.y = gg.y by A10; A15: F.x = G.x by A1; A16: F.y = G.y by A1; thus (the ObjectMap of F).(a,b) = [ff.a,ff.b] by A3,A5,FUNCT_3:def 8 .= (the ObjectMap of G).(a,b) by A4,A6,A11,A12,A13,A14,A15,A16, FUNCT_3:def 8; end; then A17: the ObjectMap of F = the ObjectMap of G; now let i be object; assume i in [:the carrier of A, the carrier of A:]; then consider a,b being object such that A18: a in the carrier of A and A19: b in the carrier of A and A20: i = [a,b] by ZFMISC_1:def 2; reconsider x = a, y = b as Object of A by A18,A19; A21: <^x,y^> <> {} implies <^F.x,F.y^> <> {} by FUNCTOR0:def 18; A22: <^x,y^> <> {} implies <^G.x,G.y^> <> {} by FUNCTOR0:def 18; A23: dom Morph-Map(F,x,y) = <^x,y^> by A21,FUNCT_2:def 1; A24: dom Morph-Map(G,x,y) = <^x,y^> by A22,FUNCT_2:def 1; now let z be object; assume A25: z in <^x,y^>; then reconsider f = z as Morphism of x,y; thus Morph-Map(F,x,y).z = F.f by A21,A25,FUNCTOR0:def 15 .= G.f by A2,A25 .= Morph-Map(G,x,y).z by A22,A25,FUNCTOR0:def 15; end; hence (the MorphMap of F).i = (the MorphMap of G).i by A20,A23,A24; end; hence thesis by A17,PBOOLE:3; end; scheme ContravariantFunctorLambda { A,B() -> category, O(object) -> object, F(object,object,object) -> object }: ex F being contravariant strict Functor of A(),B() st (for a being Object of A() holds F.a = O(a)) & for a,b being Object of A() st <^a,b^> <> {} for f being Morphism of a,b holds F.f = F(a,b,f) provided A1: for a being Object of A() holds O(a) is Object of B() and A2: for a,b being Object of A() st <^a,b^> <> {} for f being Morphism of a,b holds F(a,b,f) in (the Arrows of B()).(O(b), O(a)) and A3: for a,b,c being Object of A() st <^a,b^> <> {} & <^b,c^> <> {} for f being Morphism of a,b, g being Morphism of b,c for a9,b9,c9 being Object of B() st a9 = O(a) & b9 = O(b) & c9 = O(c) for f9 being Morphism of b9,a9, g9 being Morphism of c9,b9 st f9 = F(a,b,f) & g9 = F(b,c,g) holds F(a,c,g*f) = f9*g9 and A4: for a being Object of A(), a9 being Object of B() st a9 = O(a) holds F(a,a,idm a) = idm a9 proof consider O being Function such that A5: dom O = the carrier of A() and A6: for x being object st x in the carrier of A() holds O.x = O(x) from FUNCT_1:sch 3; rng O c= the carrier of B() proof let y be object; assume y in rng O; then consider x being object such that A7: x in dom O and A8: y = O.x by FUNCT_1:def 3; reconsider x as Object of A() by A5,A7; A9: y = O(x) by A6,A8; O(x) is Object of B() by A1; hence thesis by A9; end; then reconsider O as Function of the carrier of A(), the carrier of B() by A5,FUNCT_2:2; reconsider OM = ~[:O,O:] as bifunction of the carrier of A(), the carrier of B(); dom [:O,O:] = [:the carrier of A(), the carrier of A():] by A5,FUNCT_3:def 8; then A10: dom OM = [:the carrier of A(), the carrier of A():] by FUNCT_4:46; defpred P[object,object,object] means $1 = F($3`1,$3`2,$2); A11: for i being object st i in [:the carrier of A(), the carrier of A():] for x being object st x in (the Arrows of A()).i ex y being object st y in ((the Arrows of B())*OM).i & P[y,x,i] proof let i be object; assume A12: i in [:the carrier of A(), the carrier of A():]; then consider a,b being object such that A13: a in the carrier of A() and A14: b in the carrier of A() and A15: [a,b] = i by ZFMISC_1:def 2; reconsider a,b as Object of A() by A13,A14; let x be object; assume A16: x in (the Arrows of A()).i; then reconsider f = x as Morphism of a,b by A15; take y = F(a,b,f); A17: y in (the Arrows of B()).(O(b), O(a)) by A2,A15,A16; A18: O(a) = O.a by A6; ((the Arrows of B())*OM).i = (the Arrows of B()).(OM.(a,b)) by A10,A12,A15,FUNCT_1:13 .= (the Arrows of B()).([:O,O:].(b,a)) by A10,A12,A15,FUNCT_4:43 .= (the Arrows of B()).(O.b,O.a) by A5,FUNCT_3:def 8; hence y in ((the Arrows of B())*OM).i by A6,A17,A18; thus thesis by A15; end; consider M being ManySortedFunction of the Arrows of A(), (the Arrows of B())*OM such that A19: for i be object st i in [:the carrier of A(), the carrier of A():] ex f be Function of (the Arrows of A()).i, ((the Arrows of B())*OM).i st f = M.i & for x be object st x in (the Arrows of A()).i holds P[f.x,x,i] from MSSUBFAM:sch 1(A11); reconsider M as MSUnTrans of OM, the Arrows of A(), the Arrows of B() by FUNCTOR0:def 4; FunctorStr(#OM, M#) is Contravariant proof take O; thus thesis; end; then reconsider F = FunctorStr(#OM, M#) as Contravariant FunctorStr over A(), B(); A20: now let a be Object of A(); [a,a] in dom OM by A10,ZFMISC_1:def 2; hence F.a = ([:O,O:].(a,a))`1 by FUNCT_4:43 .= ([O.a,O.a])`1 by A5,FUNCT_3:def 8 .= O.a .= O(a) by A6; end; A21: now let o1,o2 be Object of A() such that A22: <^o1,o2^> <> {}; let g be Morphism of o1,o2; [o1,o2] in [:the carrier of A(), the carrier of A():] by ZFMISC_1:def 2; then consider f being Function of (the Arrows of A()).[o1,o2], ((the Arrows of B())*OM).[o1,o2] such that A23: f = M.[o1,o2] and A24: for x being object st x in (the Arrows of A()).[o1,o2] holds f.x = F([o1,o2]`1,[o1,o2]`2,x) by A19; f.g = F([o1,o2]`1,[o1,o2]`2,g) by A22,A24 .= F(o1,[o1,o2]`2,g) .= F(o1,o2,g); hence Morph-Map(F,o1,o2).g = F(o1,o2,g) by A23; end; A25: F is feasible proof let o1,o2 be Object of A(); set g = the Morphism of o1,o2; assume A26: <^o1,o2^> <> {}; then Morph-Map(F,o1,o2).g = F(o1,o2,g) by A21; then Morph-Map(F,o1,o2).g in (the Arrows of B()).(O(o2), O(o1)) by A2,A26; then Morph-Map(F,o1,o2).g in (the Arrows of B()).(F.o2, O(o1)) by A20; hence thesis by A20; end; A27: now let o1,o2 be Object of A(); assume A28: <^o1,o2^> <> {}; let g be Morphism of o1,o2; A29: Morph-Map(F,o1,o2).g = F(o1,o2,g) by A21,A28; <^F.o2, F.o1^> <> {} by A25,A28; hence F.g = F(o1,o2,g) by A28,A29,FUNCTOR0:def 16; end; A30: F is comp-reversing proof let o1,o2,o3 be Object of A() such that A31: <^o1,o2^> <> {} and A32: <^o2,o3^> <> {}; let f be Morphism of o1,o2, g be Morphism of o2,o3; set a = O.o1, b = O.o2, c = O.o3; A33: a = O(o1) by A6; A34: b = O(o2) by A6; A35: c = O(o3) by A6; reconsider f9 = F(o1,o2,f) as Morphism of b, a by A2,A31,A33,A34; reconsider g9 = F(o2,o3,g) as Morphism of c, b by A2,A32,A34,A35; A36: a = F.o1 by A20,A33; A37: b = F.o2 by A20,A34; A38: c = F.o3 by A20,A35; reconsider ff = f9 as Morphism of F.o2, F.o1 by A20,A33,A37; reconsider gg = g9 as Morphism of F.o3, F.o2 by A20,A35,A37; take ff, gg; A39: <^o1, o3^> <> {} by A31,A32,ALTCAT_1:def 2; F(o1,o3,g*f) = ff*gg by A3,A31,A32,A33,A34,A35,A36,A37,A38; hence ff = Morph-Map(F,o1,o2).f & gg = Morph-Map(F,o2,o3).g & Morph-Map(F,o1,o3).(g*f) = ff*gg by A21,A31,A32,A39; end; F is Functor of A(), B() proof thus F is feasible by A25; hereby let o be Object of A(); A40: F.o = O(o) by A20; thus Morph-Map(F,o,o).idm o = F(o,o,idm o) by A21 .= idm F.o by A4,A40; end; thus thesis by A30; end; then reconsider F as contravariant strict Functor of A(), B() by A30; take F; thus thesis by A20,A27; end; theorem Th2: for A,B being category, F,G being contravariant Functor of A,B st (for a being Object of A holds F.a = G.a) & (for a,b being Object of A st <^a,b^> <> {} for f being Morphism of a,b holds F.f = G.f) holds the FunctorStr of F = the FunctorStr of G proof let A,B be category, F,G be contravariant Functor of A,B such that A1: for a being Object of A holds F.a = G.a and A2: for a,b being Object of A st <^a,b^> <> {} for f being Morphism of a,b holds F.f = G.f; the ObjectMap of F is Contravariant by FUNCTOR0:def 13; then consider ff being Function of the carrier of A, the carrier of B such that A3: the ObjectMap of F = ~[:ff, ff:]; the ObjectMap of G is Contravariant by FUNCTOR0:def 13; then consider gg being Function of the carrier of A, the carrier of B such that A4: the ObjectMap of G = ~[:gg, gg:]; now let a,b be Element of A; reconsider x = a, y = b as Object of A; A5: dom ff = the carrier of A by FUNCT_2:def 1; A6: dom gg = the carrier of A by FUNCT_2:def 1; A7: dom [:ff,ff:] = [:the carrier of A, the carrier of A:] by FUNCT_2:def 1; then A8: [b,a] in dom [:ff,ff:] by ZFMISC_1:def 2; A9: dom [:gg,gg:] = [:the carrier of A, the carrier of A:] by FUNCT_2:def 1; then A10: [b,a] in dom [:gg,gg:] by ZFMISC_1:def 2; A11: [a,a] in dom [:gg,gg:] by A9,ZFMISC_1:def 2; A12: [b,b] in dom [: gg, gg:] by A9,ZFMISC_1:def 2; A13: (the ObjectMap of F).(x,x) = [:ff,ff:].(x,x) by A3,A7,A11,FUNCT_4:def 2; A14: (the ObjectMap of F).(y,y) = [:ff,ff:].(y,y) by A3,A7,A12,FUNCT_4:def 2; A15: (the ObjectMap of G).(x,x) = [:gg,gg:].(x,x) by A4,A11,FUNCT_4:def 2; A16: (the ObjectMap of G).(y,y) = [:gg,gg:].(y,y) by A4,A12,FUNCT_4:def 2; A17: (the ObjectMap of F).(x,x) = [ff.x, ff.x] by A5,A13,FUNCT_3:def 8; A18: (the ObjectMap of F).(y,y) = [ff.y, ff.y] by A5,A14,FUNCT_3:def 8; A19: (the ObjectMap of G).(x,x) = [gg.x, gg.x] by A6,A15,FUNCT_3:def 8; A20: (the ObjectMap of G).(y,y) = [gg.y, gg.y] by A6,A16,FUNCT_3:def 8; A21: F.x = ff.x by A17; A22: F.y = ff.y by A18; A23: G.x = gg.x by A19; A24: G.y = gg.y by A20; A25: F.x = G.x by A1; A26: F.y = G.y by A1; thus (the ObjectMap of F).(a,b) = [:ff,ff:].(b,a) by A3,A8,FUNCT_4:def 2 .= [ff.b,ff.a] by A5,FUNCT_3:def 8 .= [:gg,gg:].(b,a) by A6,A21,A22,A23,A24,A25,A26,FUNCT_3:def 8 .= (the ObjectMap of G).(a,b) by A4,A10,FUNCT_4:def 2; end; then A27: the ObjectMap of F = the ObjectMap of G; now let i be object; assume i in [:the carrier of A, the carrier of A:]; then consider a,b being object such that A28: a in the carrier of A and A29: b in the carrier of A and A30: i = [a,b] by ZFMISC_1:def 2; reconsider x = a, y = b as Object of A by A28,A29; A31: <^x,y^> <> {} implies <^F.y,F.x^> <> {} by FUNCTOR0:def 19; A32: <^x,y^> <> {} implies <^G.y,G.x^> <> {} by FUNCTOR0:def 19; A33: dom Morph-Map(F,x,y) = <^x,y^> by A31,FUNCT_2:def 1; A34: dom Morph-Map(G,x,y) = <^x,y^> by A32,FUNCT_2:def 1; now let z be object; assume A35: z in <^x,y^>; then reconsider f = z as Morphism of x,y; thus Morph-Map(F,x,y).z = F.f by A31,A35,FUNCTOR0:def 16 .= G.f by A2,A35 .= Morph-Map(G,x,y).z by A32,A35,FUNCTOR0:def 16; end; hence (the MorphMap of F).i = (the MorphMap of G).i by A30,A33,A34; end; hence thesis by A27,PBOOLE:3; end; begin :: Isomorphism and equivalence of categories definition let A,B,C be non empty set; let f be Function of [:A,B:], C; redefine attr f is one-to-one means for a1,a2 being Element of A, b1,b2 being Element of B st f.(a1,b1) = f.(a2,b2) holds a1 = a2 & b1 = b2; compatibility proof A1: dom f = [:A,B:] by FUNCT_2:def 1; thus f is one-to-one implies for a1,a2 being Element of A, b1,b2 being Element of B st f.(a1,b1) = f.(a2,b2) holds a1 = a2 & b1 = b2 proof assume A2: for x,y being object st x in dom f & y in dom f & f.x = f.y holds x = y; let a1,a2 be Element of A, b1,b2 be Element of B; A3: [a1,b1] in [:A,B :] by ZFMISC_1:def 2; [a2,b2] in [:A,B:] by ZFMISC_1:def 2; then f.(a1,b1) = f.(a2,b2) implies [a1,b1] = [a2,b2] by A1,A2,A3; hence thesis by XTUPLE_0:1; end; assume A4: for a1,a2 being Element of A, b1,b2 being Element of B st f.(a1,b1) = f.(a2,b2) holds a1 = a2 & b1 = b2; let x,y be object; assume x in dom f; then consider a1,b1 being object such that A5: a1 in A and A6: b1 in B and A7: x = [a1,b1] by ZFMISC_1:def 2; assume y in dom f; then consider a2,b2 being object such that A8: a2 in A and A9: b2 in B and A10: y = [a2,b2] by ZFMISC_1:def 2; reconsider a1, a2 as Element of A by A5,A8; reconsider b1, b2 as Element of B by A6,A9; assume f.x = f.y; then A11: f.(a1,b1) = f.(a2,b2) by A7,A10; then a1 = a2 by A4; hence thesis by A4,A7,A10,A11; end; end; scheme CoBijectiveSch { A,B() -> category, F() -> covariant Functor of A(), B(), O(object) -> object, F(object,object,object) -> object }: F() is bijective provided A1: for a being Object of A() holds F().a = O(a) and A2: for a,b being Object of A() st <^a,b^> <> {} for f being Morphism of a,b holds F().f = F(a,b,f) and A3: for a,b being Object of A() st O(a) = O(b) holds a = b and A4: for a,b being Object of A() st <^a,b^> <> {} for f,g being Morphism of a,b st F(a,b,f) = F(a,b,g) holds f = g and A5: for a,b being Object of B() st <^a,b^> <> {} for f being Morphism of a,b ex c,d being Object of A(), g being Morphism of c,d st a = O(c) & b = O(d) & <^c,d^> <> {} & f = F(c,d,g) proof set F = F(); thus the ObjectMap of F is one-to-one proof let x1,x2,y1,y2 be Element of A(); reconsider a1 = x1, a2 = x2, b1 = y1, b2 = y2 as Object of A(); assume (the ObjectMap of F).(x1,y1) = (the ObjectMap of F).(x2,y2); then A6: [F.a1,F.b1] = (the ObjectMap of F).(x2,y2) by FUNCTOR0:22 .= [F.a2,F.b2] by FUNCTOR0:22; then A7: F.a1 = F.a2 by XTUPLE_0:1; A8: F.b1 = F.b2 by A6,XTUPLE_0:1; A9: O(a1) = F.a2 by A1,A7; A10: O(b1) = F.b2 by A1,A8; A11: O(a1) = O(a2) by A1,A9; O(b1) = O(b2) by A1,A10; hence thesis by A3,A11; end; now let i be set; assume i in [:the carrier of A(), the carrier of A():]; then consider a,b being object such that A12: a in the carrier of A() and A13: b in the carrier of A() and A14: i = [a,b] by ZFMISC_1:def 2; reconsider a, b as Object of A() by A12,A13; A15: <^a,b^> <> {} implies <^F.a, F.b^> <> {} by FUNCTOR0:def 18; Morph-Map(F,a,b) is one-to-one proof let x,y be object; assume that A16: x in dom Morph-Map(F,a,b) and A17: y in dom Morph-Map(F,a,b); reconsider f = x, g = y as Morphism of a,b by A16,A17; A18: F.f = Morph-Map(F,a,b).x by A15,A16,FUNCTOR0:def 15; A19: F.g = Morph-Map(F,a,b).y by A15,A16,FUNCTOR0:def 15; A20: F(a,b,f) = Morph-Map(F,a,b).x by A2,A16,A18; F(a,b,g) = Morph-Map(F,a,b).y by A2,A16,A19; hence thesis by A4,A16,A20; end; hence (the MorphMap of F).i is one-to-one by A14; end; hence the MorphMap of F is "1-1" by MSUALG_3:1; reconsider G = the MorphMap of F as ManySortedFunction of the Arrows of A(), (the Arrows of B())*the ObjectMap of F by FUNCTOR0:def 4; thus F is full proof take G; thus G = the MorphMap of F; let i be set; assume i in [:the carrier of A(), the carrier of A():]; then reconsider ab = i as Element of [:the carrier of A(), the carrier of A():]; G.ab is Function of (the Arrows of A()).ab, ((the Arrows of B())*the ObjectMap of F).ab; hence rng(G.i) c= ((the Arrows of B())*the ObjectMap of F).i by RELAT_1:def 19; consider a,b being object such that A21: a in the carrier of A() and A22: b in the carrier of A() and A23: ab = [a,b] by ZFMISC_1:def 2; reconsider a, b as Object of A() by A21,A22; A24: (the ObjectMap of F).ab = (the ObjectMap of F).(a,b) by A23 .= [F.a, F.b] by FUNCTOR0:22; then A25: ((the Arrows of B())*the ObjectMap of F).ab = <^F.a, F.b^> by FUNCT_2:15; let x be object; assume A26: x in ((the Arrows of B())*the ObjectMap of F).i; then reconsider f = x as Morphism of F.a, F.b by A24,FUNCT_2:15; consider c,d being Object of A(), g being Morphism of c,d such that A27: F.a = O(c) and A28: F.b = O(d) and A29: <^c,d^> <> {} and A30: f = F(c,d,g) by A5,A25,A26; A31: O(a) = O(c) by A1,A27; A32: O(b) = O(d) by A1,A28; A33: a = c by A3,A31; A34: b = d by A3,A32; A35: f = F.g by A2,A29,A30 .= Morph-Map(F,c,d).g by A25,A26,A29,A33,A34,FUNCTOR0:def 15; dom Morph-Map(F,a,b) = <^a, b^> by A25,A26,FUNCT_2:def 1; hence thesis by A23,A29,A33,A34,A35,FUNCT_1:def 3; end; thus rng the ObjectMap of F c= [:the carrier of B(), the carrier of B():]; let x be object; assume x in [:the carrier of B(), the carrier of B():]; then consider a, b being object such that A36: a in the carrier of B() and A37: b in the carrier of B() and A38: x = [a,b] by ZFMISC_1:def 2; reconsider a, b as Object of B() by A36,A37; consider c,c9 being Object of A(), g being Morphism of c,c9 such that A39: a = O(c) and a = O(c9) and <^c,c9^> <> {} and idm a = F(c,c9,g) by A5; consider d,d9 being Object of A(), h being Morphism of d,d9 such that A40: b = O(d) and b = O(d9) and <^d,d9^> <> {} and idm b = F(d,d9,h) by A5; [c,d] in [:the carrier of A(), the carrier of A():] by ZFMISC_1:def 2; then A41: [c,d] in dom the ObjectMap of F by FUNCT_2:def 1; (the ObjectMap of F).[c,d] = (the ObjectMap of F).(c,d) .= [F.c, F.d] by FUNCTOR0:22 .= [a, F.d] by A1,A39 .= x by A1,A38,A40; hence thesis by A41,FUNCT_1:def 3; end; scheme CatIsomorphism { A,B() -> category, O(object) -> object, F(object,object,object) -> object }: A(), B() are_isomorphic provided A1: ex F being covariant Functor of A(),B() st (for a being Object of A() holds F.a = O(a)) & for a,b being Object of A() st <^a,b^> <> {} for f being Morphism of a,b holds F.f = F(a,b,f) and A2: for a,b being Object of A() st O(a) = O(b) holds a = b and A3: for a,b being Object of A() st <^a,b^> <> {} for f,g being Morphism of a,b st F(a,b,f) = F(a,b,g) holds f = g and A4: for a,b being Object of B() st <^a,b^> <> {} for f being Morphism of a,b ex c,d being Object of A(), g being Morphism of c,d st a = O(c) & b = O(d) & <^c,d^> <> {} & f = F(c,d,g) proof A5: for a,b being Object of A() st O(a) = O(b) holds a = b by A2; A6: for a,b being Object of A() st <^a,b^> <> {} for f,g being Morphism of a,b st F(a,b,f) = F(a,b,g) holds f = g by A3; A7: for a,b being Object of B() st <^a,b^> <> {} for f being Morphism of a,b ex c,d being Object of A(), g being Morphism of c,d st a = O(c) & b = O(d) & <^c,d^> <> {} & f = F(c,d,g) by A4; consider F being covariant Functor of A(),B() such that A8: for a being Object of A() holds F.a = O(a) and A9: for a,b being Object of A() st <^a,b^> <> {} for f being Morphism of a,b holds F.f = F(a,b,f) by A1; take F; thus F is bijective from CoBijectiveSch(A8,A9,A5,A6, A7); thus thesis; end; scheme ContraBijectiveSch { A,B() -> category, F() -> contravariant Functor of A(), B(), O(object) -> object, F(object,object,object) -> object }: F() is bijective provided A1: for a being Object of A() holds F().a = O(a) and A2: for a,b being Object of A() st <^a,b^> <> {} for f being Morphism of a,b holds F().f = F(a,b,f) and A3: for a,b being Object of A() st O(a) = O(b) holds a = b and A4: for a,b being Object of A() st <^a,b^> <> {} for f,g being Morphism of a,b st F(a,b,f) = F(a,b,g) holds f = g and A5: for a,b being Object of B() st <^a,b^> <> {} for f being Morphism of a,b ex c,d being Object of A(), g being Morphism of c,d st b = O(c) & a = O(d) & <^c,d^> <> {} & f = F(c,d,g) proof set F = F(); thus the ObjectMap of F is one-to-one proof let x1,x2,y1,y2 be Element of A(); reconsider a1 = x1, a2 = x2, b1 = y1, b2 = y2 as Object of A(); assume (the ObjectMap of F).(x1,y1) = (the ObjectMap of F).(x2,y2); then A6: [F.b1,F.a1] = (the ObjectMap of F).(x2,y2) by FUNCTOR0:23 .= [F.b2,F.a2] by FUNCTOR0:23; then A7: F.a1 = F.a2 by XTUPLE_0:1; A8: F.b1 = F.b2 by A6,XTUPLE_0:1; A9: O(a1) = F.a2 by A1,A7; A10: O(b1) = F.b2 by A1,A8; A11: O(a1) = O(a2) by A1,A9; O(b1) = O(b2) by A1,A10; hence thesis by A3,A11; end; now let i be set; assume i in [:the carrier of A(), the carrier of A():]; then consider a,b being object such that A12: a in the carrier of A() and A13: b in the carrier of A() and A14: i = [a,b] by ZFMISC_1:def 2; reconsider a, b as Object of A() by A12,A13; A15: <^a,b^> <> {} implies <^F.b, F.a^> <> {} by FUNCTOR0:def 19; Morph-Map(F,a,b) is one-to-one proof let x,y be object; assume that A16: x in dom Morph-Map(F,a,b) and A17: y in dom Morph-Map(F,a,b); reconsider f = x, g = y as Morphism of a,b by A16,A17; A18: F.f = Morph-Map(F,a,b).x by A15,A16,FUNCTOR0:def 16; A19: F.g = Morph-Map(F,a,b).y by A15,A16,FUNCTOR0:def 16; A20: F(a,b,f) = Morph-Map(F,a,b).x by A2,A16,A18; F(a,b,g) = Morph-Map(F,a,b).y by A2,A16,A19; hence thesis by A4,A16,A20; end; hence (the MorphMap of F).i is one-to-one by A14; end; hence the MorphMap of F is "1-1" by MSUALG_3:1; reconsider G = the MorphMap of F as ManySortedFunction of the Arrows of A(), (the Arrows of B())*the ObjectMap of F by FUNCTOR0:def 4; thus F is full proof take G; thus G = the MorphMap of F; let i be set; assume i in [:the carrier of A(), the carrier of A():]; then reconsider ab = i as Element of [:the carrier of A(), the carrier of A():]; G.ab is Function of (the Arrows of A()).ab, ((the Arrows of B())*the ObjectMap of F).ab; hence rng(G.i) c= ((the Arrows of B())*the ObjectMap of F).i by RELAT_1:def 19; consider a,b being object such that A21: a in the carrier of A() and A22: b in the carrier of A() and A23: ab = [a,b] by ZFMISC_1:def 2; reconsider a, b as Object of A() by A21,A22; A24: (the ObjectMap of F).ab = (the ObjectMap of F).(a,b) by A23 .= [F.b, F.a] by FUNCTOR0:23; then A25: ((the Arrows of B())*the ObjectMap of F).ab = <^F.b, F.a^> by FUNCT_2:15; let x be object; assume A26: x in ((the Arrows of B())*the ObjectMap of F).i; then reconsider f = x as Morphism of F.b, F.a by A24,FUNCT_2:15; consider c,d being Object of A(), g being Morphism of c,d such that A27: F.a = O(c) and A28: F.b = O(d) and A29: <^c,d^> <> {} and A30: f = F(c,d,g) by A5,A25,A26; A31: O(a) = O(c) by A1,A27; A32: O(b) = O(d) by A1,A28; A33: a = c by A3,A31; A34: b = d by A3,A32; A35: f = F.g by A2,A29,A30 .= Morph-Map(F,c,d).g by A25,A26,A29,A33,A34,FUNCTOR0:def 16; dom Morph-Map(F,a,b) = <^a, b^> by A25,A26,FUNCT_2:def 1; hence thesis by A23,A29,A33,A34,A35,FUNCT_1:def 3; end; thus rng the ObjectMap of F c= [:the carrier of B(), the carrier of B():]; let x be object; assume x in [:the carrier of B(), the carrier of B():]; then consider a, b being object such that A36: a in the carrier of B() and A37: b in the carrier of B() and A38: x = [a,b] by ZFMISC_1:def 2; reconsider a, b as Object of B() by A36,A37; consider c,c9 being Object of A(), g being Morphism of c,c9 such that A39: a = O(c) and a = O(c9) and <^c,c9^> <> {} and idm a = F(c,c9,g) by A5; consider d,d9 being Object of A(), h being Morphism of d,d9 such that A40: b = O(d) and b = O(d9) and <^d,d9^> <> {} and idm b = F(d,d9,h) by A5; [d,c] in [:the carrier of A(), the carrier of A():] by ZFMISC_1:def 2; then A41: [d,c] in dom the ObjectMap of F by FUNCT_2:def 1; (the ObjectMap of F).[d,c] = (the ObjectMap of F).(d,c) .= [F.c, F.d] by FUNCTOR0:23 .= [a, F.d] by A1,A39 .= x by A1,A38,A40; hence thesis by A41,FUNCT_1:def 3; end; scheme CatAntiIsomorphism { A,B() -> category, O(object) -> object, F(object,object,object) -> object }: A(), B() are_anti-isomorphic provided A1: ex F being contravariant Functor of A(),B() st (for a being Object of A() holds F.a = O(a)) & for a,b being Object of A() st <^a,b^> <> {} for f being Morphism of a,b holds F.f = F(a,b,f) and A2: for a,b being Object of A() st O(a) = O(b) holds a = b and A3: for a,b being Object of A() st <^a,b^> <> {} for f,g being Morphism of a,b st F(a,b,f) = F(a,b,g) holds f = g and A4: for a,b being Object of B() st <^a,b^> <> {} for f being Morphism of a,b ex c,d being Object of A(), g being Morphism of c,d st b = O(c) & a = O(d) & <^c,d^> <> {} & f = F(c,d,g) proof consider F being contravariant Functor of A(),B() such that A5: for a being Object of A() holds F.a = O(a) and A6: for a,b being Object of A() st <^a,b^> <> {} for f being Morphism of a,b holds F.f = F(a,b,f) by A1; A7: for a,b being Object of A() st O(a) = O(b) holds a = b by A2; A8: for a,b being Object of A() st <^a,b^> <> {} for f,g being Morphism of a,b st F(a,b,f) = F(a,b,g) holds f = g by A3; A9: for a,b being Object of B() st <^a,b^> <> {} for f being Morphism of a,b ex c,d being Object of A(), g being Morphism of c,d st b = O(c) & a = O(d) & <^c,d^> <> {} & f = F(c,d,g) by A4; take F; thus F is bijective from ContraBijectiveSch(A5,A6,A7,A8 ,A9); thus thesis; end; definition let A,B be category; pred A,B are_equivalent means ex F being covariant Functor of A,B, G being covariant Functor of B,A st G*F, id A are_naturally_equivalent & F*G, id B are_naturally_equivalent; reflexivity proof let A be category; take id A, id A; thus thesis by FUNCTOR3:4; end; symmetry; end; theorem Th3: for A,B,C being non empty reflexive AltGraph for F1,F2 being feasible FunctorStr over A,B for G1,G2 being FunctorStr over B,C st the FunctorStr of F1 = the FunctorStr of F2 & the FunctorStr of G1 = the FunctorStr of G2 holds G1*F1 = G2*F2 proof let A,B,C be non empty reflexive AltGraph; let F1,F2 be feasible FunctorStr over A,B; let G1,G2 be FunctorStr over B,C such that A1: the FunctorStr of F1 = the FunctorStr of F2 and A2: the FunctorStr of G1 = the FunctorStr of G2; A3: the ObjectMap of (G1*F1) = (the ObjectMap of G1)*the ObjectMap of F1 by FUNCTOR0:def 36; the MorphMap of (G1*F1) = ((the MorphMap of G1)*the ObjectMap of F1)** the MorphMap of F1 by FUNCTOR0:def 36; hence thesis by A1,A2,A3,FUNCTOR0:def 36; end; theorem Th4: for A,B,C being category st A,B are_equivalent & B,C are_equivalent holds A,C are_equivalent proof let A,B,C be category; given F1 being covariant Functor of A,B, G1 being covariant Functor of B,A such that A1: G1*F1, id A are_naturally_equivalent and A2: F1*G1, id B are_naturally_equivalent; given F2 being covariant Functor of B,C, G2 being covariant Functor of C,B such that A3: G2*F2, id B are_naturally_equivalent and A4: F2*G2, id C are_naturally_equivalent; take F = F2*F1, G = G1*G2; the FunctorStr of F1 = the FunctorStr of F1; then A5: (the FunctorStr of G1)*F1 = G1*F1 by Th3; the FunctorStr of G2 = the FunctorStr of G2; then A6: (the FunctorStr of F2)*G2 = F2*G2 by Th3; A7: G1* id B = the FunctorStr of G1 by FUNCTOR3:5; A8: F2* id B = the FunctorStr of F2 by FUNCTOR3:5; A9: G*F2 = G1*(G2*F2) by FUNCTOR0:32; A10: F*G1 = F2*(F1*G1) by FUNCTOR0:32; A11: G*F2*F1 = G*F by FUNCTOR0:32; A12: F*G1*G2 = F*G by FUNCTOR0:32; A13: G*F2, G1* id B are_naturally_equivalent by A3,A9,FUNCTOR3:35; A14: F*G1, F2* id B are_naturally_equivalent by A2,A10,FUNCTOR3:35; A15: G*F, G1*F1 are_naturally_equivalent by A5,A7,A11,A13,FUNCTOR3:36; F*G, F2*G2 are_naturally_equivalent by A6,A8,A12,A14,FUNCTOR3:36; hence thesis by A1,A4,A15,FUNCTOR3:33; end; theorem Th5: for A,B being category st A,B are_isomorphic holds A,B are_equivalent proof let A,B be category; assume A,B are_isomorphic; then consider F being Functor of A,B such that A1: F is bijective covariant; reconsider F as covariant Functor of A,B by A1; consider G being Functor of B,A such that A2: G = F" and A3: G is bijective covariant by A1,FUNCTOR0:48; reconsider G as covariant Functor of B,A by A3; take F, G; thus thesis by A1,A2,FUNCTOR1:18,19; end; scheme NatTransLambda { A, B() -> category, F, G() -> covariant Functor of A(), B(), T(object) -> object }: ex t being natural_transformation of F(), G() st F() is_naturally_transformable_to G() & for a being Object of A() holds t!a = T(a) provided A1: for a being Object of A() holds T(a) in <^F().a, G().a^> and A2: for a,b being Object of A() st <^a,b^> <> {} for f being Morphism of a,b for g1 being Morphism of F().a, G().a st g1 = T(a) for g2 being Morphism of F().b, G().b st g2 = T(b) holds g2*F().f = G().f*g1 proof consider t being ManySortedSet of the carrier of A() such that A3: for a being Element of A() holds t.a = T(a) from PBOOLE:sch 5; A4: F() is_transformable_to G() by A1; now let a be Object of A(); t.a = T(a) by A3; hence t.a is Morphism of F().a, G().a by A1; end; then reconsider t as transformation of F(), G() by A4,FUNCTOR2:def 2; A5: now let a be Object of A(); t.a = T(a) by A3; hence t!a = T(a) by A4,FUNCTOR2:def 4; end; A6: F() is_naturally_transformable_to G() proof thus F() is_transformable_to G() by A4; take t; let a,b be Object of A(); A7: t!a = T(a) by A5; t!b = T(b) by A5; hence thesis by A2,A7; end; now let a,b be Object of A(); A8: t!a = T(a) by A5; t!b = T(b) by A5; hence <^a,b^> <> {} implies for f being Morphism of a,b holds t!b*F().f = G().f*(t!a) by A2,A8; end; then t is natural_transformation of F(), G() by A6,FUNCTOR2:def 7; hence thesis by A5,A6; end; scheme NatEquivalenceLambda { A, B() -> category, F, G() -> covariant Functor of A(), B(), T(object) -> object }: ex t being natural_equivalence of F(), G() st F(), G() are_naturally_equivalent & for a being Object of A() holds t!a = T(a) provided A1: for a being Object of A() holds T(a) in <^F().a, G().a^> & <^G().a, F().a^> <> {} & for f being Morphism of F().a, G().a st f = T(a) holds f is iso and A2: for a,b being Object of A() st <^a,b^> <> {} for f being Morphism of a,b for g1 being Morphism of F().a, G().a st g1 = T(a) for g2 being Morphism of F().b, G().b st g2 = T(b) holds g2*F().f = G().f*g1 proof A3: for a,b being Object of A() st <^a,b^> <> {} for f being Morphism of a,b for g1 being Morphism of F().a, G().a st g1 = T(a) for g2 being Morphism of F().b, G().b st g2 = T(b) holds g2*F().f = G().f*g1 by A2; A4: for a being Object of A() holds T(a) in <^F().a, G().a^> by A1; consider t being natural_transformation of F(), G() such that A5: F() is_naturally_transformable_to G() and A6: for a being Object of A() holds t!a = T(a) from NatTransLambda(A4,A3 ); A7: G() is_transformable_to F() by A1; A8: F(), G() are_naturally_equivalent proof thus F() is_naturally_transformable_to G() by A5; thus G() is_transformable_to F() by A7; take t; let a be Object of A(); t!a = T(a) by A6; hence thesis by A1; end; now let a be Object of A(); t!a = T(a) by A6; hence t!a is iso by A1; end; then t is natural_equivalence of F(), G() by A8,FUNCTOR3:def 5; hence thesis by A6,A8; end; begin :: Dual categories definition let C1,C2 be non empty AltCatStr; pred C1, C2 are_opposite means the carrier of C2 = the carrier of C1 & the Arrows of C2 = ~the Arrows of C1 & for a,b,c being Object of C1 for a9,b9,c9 being Object of C2 st a9 = a & b9 = b & c9 = c holds (the Comp of C2).(a9,b9,c9) = ~((the Comp of C1).(c,b,a)); symmetry proof let C1,C2 be non empty AltCatStr; assume that A1: the carrier of C2 = the carrier of C1 and A2: the Arrows of C2 = ~the Arrows of C1 and A3: for a,b,c being Object of C1 for a9,b9,c9 being Object of C2 st a9 = a & b9 = b & c9 = c holds (the Comp of C2).(a9,b9,c9) = ~((the Comp of C1).(c,b,a)); thus the carrier of C1 = the carrier of C2 by A1; dom the Arrows of C1 = [:the carrier of C1, the carrier of C1:] by PARTFUN1:def 2; hence the Arrows of C1 = ~the Arrows of C2 by A2,FUNCT_4:52; let a,b,c be Object of C2; let a9,b9,c9 be Object of C1; assume that A4: a9 = a and A5: b9 = b and A6: c9 = c; A7: (the Comp of C2).(c,b,a) = ~((the Comp of C1).(a9,b9,c9)) by A3,A4,A5,A6; dom ((the Comp of C1).(a9,b9,c9)) c= [:(the Arrows of C1).(b9,c9), (the Arrows of C1).(a9,b9):]; hence thesis by A7,FUNCT_4:52; end; end; theorem for A,B being non empty AltCatStr st A, B are_opposite for a being Object of A holds a is Object of B; theorem Th7: for A,B being non empty AltCatStr st A, B are_opposite for a,b being Object of A, a9,b9 being Object of B st a9 = a & b9 = b holds <^a,b^> = <^b9,a9^> by ALTCAT_2:6; theorem for A,B being non empty AltCatStr st A, B are_opposite for a,b being Object of A, a9,b9 being Object of B st a9 = a & b9 = b for f being Morphism of a,b holds f is Morphism of b9, a9 by Th7; theorem Th9: for C1,C2 being non empty transitive AltCatStr holds C1, C2 are_opposite iff the carrier of C2 = the carrier of C1 & for a,b,c being Object of C1 for a9,b9,c9 being Object of C2 st a9 = a & b9 = b & c9 = c holds <^a,b^> = <^b9,a9^> & (<^a,b^> <> {} & <^b,c^> <> {} implies for f being Morphism of a,b, g being Morphism of b,c for f9 being Morphism of b9,a9, g9 being Morphism of c9,b9 st f9 = f & g9 = g holds f9*g9 = g*f) proof let C1,C2 be non empty transitive AltCatStr; A1: dom the Arrows of C1 = [:the carrier of C1, the carrier of C1:] by PARTFUN1:def 2; A2: dom the Arrows of C2 = [:the carrier of C2, the carrier of C2:] by PARTFUN1:def 2; hereby assume A3: C1, C2 are_opposite; hence the carrier of C2 = the carrier of C1; let a,b,c be Object of C1; let a9,b9,c9 be Object of C2 such that A4: a9 = a and A5: b9 = b and A6: c9 = c; A7: [a,b] in dom the Arrows of C1 by A1,ZFMISC_1:def 2; A8: [b,c] in dom the Arrows of C1 by A1,ZFMISC_1:def 2; thus A9: <^a,b^> = (~the Arrows of C1).(b,a) by A7,FUNCT_4:def 2 .= <^b9,a9^> by A3,A4,A5; A10: <^b,c^> = (~the Arrows of C1).(c,b) by A8,FUNCT_4:def 2 .= <^c9,b9^> by A3,A5,A6; A11: (the Comp of C2).(c9,b9,a9) = ~((the Comp of C1).(a,b,c)) by A3,A4,A5,A6; assume that A12: <^a,b^> <> {} and A13: <^b,c^> <> {}; let f be Morphism of a,b, g be Morphism of b,c; <^a,c^> <> {} by A12,A13,ALTCAT_1:def 2; then dom ((the Comp of C1).(a,b,c)) = [:(the Arrows of C1).(b,c), (the Arrows of C1).(a,b):] by FUNCT_2:def 1; then A14: [g,f] in dom ((the Comp of C1).(a,b,c)) by A12,A13,ZFMISC_1:def 2; let f9 be Morphism of b9,a9, g9 be Morphism of c9,b9; assume that A15: f9 = f and A16: g9 = g; thus f9*g9 = (~((the Comp of C1).(a,b,c))).(f,g) by A9,A10,A11,A12,A13,A15,A16, ALTCAT_1:def 8 .= ((the Comp of C1).(a,b,c)).(g,f) by A14,FUNCT_4:def 2 .= g*f by A12,A13,ALTCAT_1:def 8; end; assume that A17: the carrier of C2 = the carrier of C1 and A18: for a,b,c being Object of C1 for a9,b9,c9 being Object of C2 st a9 = a & b9 = b & c9 = c holds <^a,b^> = <^b9,a9^> & (<^a,b^> <> {} & <^b,c^> <> {} implies for f being Morphism of a,b, g being Morphism of b,c for f9 being Morphism of b9,a9, g9 being Morphism of c9,b9 st f9 = f & g9 = g holds f9*g9 = g*f); thus the carrier of C2 = the carrier of C1 by A17; A19: now let x be object; hereby assume x in dom the Arrows of C2; then consider y,z being object such that A20: y in the carrier of C1 and A21: z in the carrier of C1 and A22: [y,z] = x by A17,ZFMISC_1:def 2; take z,y; thus x = [y,z] & [z,y] in dom the Arrows of C1 by A1,A20,A21,A22, ZFMISC_1:def 2; end; given z,y being object such that A23: x = [y,z] and A24: [z,y] in dom the Arrows of C1; A25: z in the carrier of C1 by A24,ZFMISC_1:87; y in the carrier of C1 by A24,ZFMISC_1:87; hence x in dom the Arrows of C2 by A2,A17,A23,A25,ZFMISC_1:def 2; end; now let y,z be object; assume [y,z] in dom the Arrows of C1; then reconsider a = y, b = z as Object of C1 by ZFMISC_1:87; reconsider a9 = a, b9 = b as Object of C2 by A17; thus (the Arrows of C2).(z,y) = <^b9,a9^> .= <^a,b^> by A18 .= (the Arrows of C1).(y,z); end; hence the Arrows of C2 = ~the Arrows of C1 by A19,FUNCT_4:def 2; let a,b,c be Object of C1, a9,b9,c9 be Object of C2 such that A26: a9 = a and A27: b9 = b and A28: c9 = c; A29: <^a9,b9^> = <^b,a^> by A18,A26,A27; A30: <^b9,c9^> = <^c,b^> by A18,A27,A28; A31: <^a9,c9^> = <^c,a^> by A18,A26,A28; [:<^b,a^>,<^c,b^>:] <> {} implies <^b,a^> <> {} & <^c,b^> <> {} by ZFMISC_1:90; then [:<^b,a^>,<^c,b^>:] <> {} implies <^c,a^> <> {} by ALTCAT_1:def 2; then A32: dom ((the Comp of C1).(c,b,a)) = [:(the Arrows of C1).(b,a), (the Arrows of C1).(c,b):] by FUNCT_2:def 1; [:<^c,b^>,<^b,a^>:] <> {} implies <^b,a^> <> {} & <^c,b^> <> {} by ZFMISC_1:90; then [:<^c,b^>,<^b,a^>:] <> {} implies <^c,a^> <> {} by ALTCAT_1:def 2; then A33: dom ((the Comp of C2).(a9,b9,c9)) = [:(the Arrows of C2).(b9,c9), (the Arrows of C2).(a9,b9):] by A29,A30,A31,FUNCT_2:def 1; A34: now let x be object; hereby assume x in dom ((the Comp of C2).(a9,b9,c9)); then consider y,z being object such that A35: y in <^b9,c9^> and A36: z in <^a9,b9^> and A37: [y,z] = x by ZFMISC_1:def 2; take z,y; thus x = [y,z] & [z,y] in dom ((the Comp of C1).(c,b,a)) by A29,A30,A32,A35,A36,A37,ZFMISC_1:def 2; end; given z,y being object such that A38: x = [y,z] and A39: [z,y] in dom ((the Comp of C1).(c,b,a)); A40: z in <^b,a^> by A39,ZFMISC_1:87; y in <^c,b^> by A39,ZFMISC_1:87; hence x in dom ((the Comp of C2).(a9,b9,c9)) by A29,A30,A33,A38,A40, ZFMISC_1:def 2; end; now let y,z be object; assume A41: [y,z] in dom ((the Comp of C1).(c,b,a ) ); then A42: y in <^b,a^> by ZFMISC_1:87; A43: z in <^c,b^> by A41,ZFMISC_1:87; reconsider f = y as Morphism of b,a by A41,ZFMISC_1:87; reconsider g = z as Morphism of c,b by A41,ZFMISC_1:87; reconsider f9 = y as Morphism of a9,b9 by A18,A26,A27,A42; reconsider g9 = z as Morphism of b9,c9 by A18,A27,A28,A43; thus ((the Comp of C2).(a9,b9,c9)).(z,y) = g9*f9 by A29,A30,A42,A43,ALTCAT_1:def 8 .= f*g by A18,A26,A27,A28,A42,A43 .= ((the Comp of C1).(c,b,a)).(y,z) by A42,A43,ALTCAT_1:def 8; end; hence thesis by A34,FUNCT_4:def 2; end; theorem Th10: for A,B being category st A, B are_opposite for a being Object of A, b being Object of B st a = b holds idm a = idm b proof let A,B be category such that A1: A, B are_opposite; let a be Object of A, b be Object of B such that A2: a = b; reconsider i = idm b as Morphism of a,a by A1,A2,Th9; now let c be Object of A; assume A3: <^a,c^> <> {}; let f be Morphism of a,c; reconsider d = c as Object of B by A1; A4: <^a,c^> = <^d,b^> by A1,A2,Th9; reconsider g = f as Morphism of d,b by A1,A2,Th9; thus f*i = (idm b)*g by A1,A2,A3,Th9 .= f by A3,A4,ALTCAT_1:20; end; hence thesis by ALTCAT_1:def 17; end; theorem Th11: for A,B being transitive non empty AltCatStr st A,B are_opposite holds A is associative implies B is associative proof let A,B be transitive non empty AltCatStr such that A1: A,B are_opposite and A2: A is associative; deffunc C(set,set,set,set,set) = ((the Comp of A).($3,$2,$1)).($4,$5); A3: now let a,b,c be Object of B such that A4: <^a,b^> <> {} and A5: <^b,c^> <> {}; let f be Morphism of a,b, g be Morphism of b,c; reconsider a9 = a, b9 = b, c9 = c as Object of A by A1; A6: <^a,b^> = <^b9,a9^> by A1,Th7; A7: <^b,c^> = <^c9,b9^> by A1,Th7; reconsider f9 = f as Morphism of b9, a9 by A1,Th7; reconsider g9 = g as Morphism of c9, b9 by A1,Th7; thus g*f = f9*g9 by A1,A4,A5,Th9 .= C(a,b,c,f,g) by A4,A5,A6,A7,ALTCAT_1:def 8; end; A8: now let a,b,c,d be Object of B, f,g,h be set; reconsider a9 = a, b9 = b, c9 = c, d9 = d as Object of A by A1; assume A9: f in <^a,b^>; then A10: f in <^b9,a9^> by A1,Th9; reconsider f9 = f as Morphism of b9,a9 by A1,A9,Th9; assume A11: g in <^b,c^>; then A12: g in <^c9,b9^> by A1,Th9; reconsider g9 = g as Morphism of c9,b9 by A1,A11,Th9; assume A13: h in <^c,d^>; then A14: h in <^d9,c9^> by A1,Th9; reconsider h9 = h as Morphism of d9,c9 by A1,A13,Th9; A15: <^c9,a9^> <> {} by A10,A12,ALTCAT_1:def 2; A16: <^d9,b9^> <> {} by A12,A14,ALTCAT_1:def 2; thus C(a,c,d,C(a,b,c,f,g),h) = C(a,c,d,f9*g9,h) by A10,A12,ALTCAT_1:def 8 .= (f9*g9)*h9 by A14,A15,ALTCAT_1:def 8 .= f9*(g9*h9) by A2,A10,A12,A14 .= C(a,b,d,f,g9*h9) by A10,A16,ALTCAT_1:def 8 .= C(a,b,d,f,C(b,c,d,g,h)) by A12,A14,ALTCAT_1:def 8; end; thus thesis from CatAssocSch(A3,A8); end; theorem Th12: for A,B being transitive non empty AltCatStr st A,B are_opposite holds A is with_units implies B is with_units proof let A,B be transitive non empty AltCatStr such that A1: A,B are_opposite; assume A is with_units; then reconsider A as with_units transitive non empty AltCatStr; deffunc C(set,set,set,set,set) = ((the Comp of A).($3,$2,$1)).($4,$5); A2: now let a,b,c be Object of B such that A3: <^a,b^> <> {} and A4: <^b,c^> <> {}; let f be Morphism of a,b, g be Morphism of b,c; reconsider a9 = a, b9 = b, c9 = c as Object of A by A1; A5: <^a,b^> = <^b9,a9^> by A1,Th7; A6: <^b,c^> = <^c9,b9^> by A1,Th7; reconsider f9 = f as Morphism of b9, a9 by A1,Th7; reconsider g9 = g as Morphism of c9, b9 by A1,Th7; thus g*f = f9*g9 by A1,A3,A4,Th9 .= C(a,b,c,f,g) by A3,A4,A5,A6,ALTCAT_1:def 8; end; A7: now let a be Object of B; reconsider a9 = a as Object of A by A1; reconsider f = idm a9 as set; take f; idm a9 in <^a9,a9^>; hence f in <^a,a^> by A1,Th7; let b be Object of B, g be set; reconsider b9 = b as Object of A by A1; assume A8: g in <^a,b^>; then A9: g in <^b9,a9^> by A1,Th7; reconsider g9 = g as Morphism of b9,a9 by A1,A8,Th7; thus C(a,a,b,f,g) = (idm a9)*g9 by A9,ALTCAT_1:def 8 .= g by A9,ALTCAT_1:20; end; A10: now let a be Object of B; reconsider a9 = a as Object of A by A1; reconsider f = idm a9 as set; take f; idm a9 in <^a9,a9^>; hence f in <^a,a^> by A1,Th7; let b be Object of B, g be set; reconsider b9 = b as Object of A by A1; assume A11: g in <^b,a^>; then A12: g in <^a9,b9^> by A1,Th7; reconsider g9 = g as Morphism of a9,b9 by A1,A11,Th7; thus C(b,a,a,g,f) = g9*(idm a9) by A12,ALTCAT_1:def 8 .= g by A12,ALTCAT_1:def 17; end; thus thesis from CatUnitsSch(A2,A7,A10); end; theorem Th13: for C,C1,C2 being non empty AltCatStr st C, C1 are_opposite holds C, C2 are_opposite iff the AltCatStr of C1 = the AltCatStr of C2 proof let C, C1, C2 be non empty AltCatStr such that A1: the carrier of C1 = the carrier of C and A2: the Arrows of C1 = ~the Arrows of C and A3: for a,b,c being Object of C for a9,b9,c9 being Object of C1 st a9 = a & b9 = b & c9 = c holds (the Comp of C1).(a9,b9,c9) = ~((the Comp of C).(c,b,a)); thus C, C2 are_opposite implies the AltCatStr of C1 = the AltCatStr of C2 proof assume that A4: the carrier of C2 = the carrier of C and A5: the Arrows of C2 = ~the Arrows of C and A6: for a,b,c being Object of C for a9,b9,c9 being Object of C2 st a9 = a & b9 = b & c9 = c holds (the Comp of C2).(a9,b9,c9) = ~((the Comp of C).(c,b,a)); A7: dom the Comp of C1 = [:the carrier of C1, the carrier of C1, the carrier of C1:] by PARTFUN1:def 2; A8: dom the Comp of C2 = [:the carrier of C2, the carrier of C2, the carrier of C2:] by PARTFUN1:def 2; now let x be object; assume x in [:the carrier of C, the carrier of C, the carrier of C:]; then consider a,b,c being object such that A9: a in the carrier of C and A10: b in the carrier of C and A11: c in the carrier of C and A12: x = [a,b,c] by MCART_1:68; reconsider a, b, c as Object of C by A9,A10,A11; reconsider a1 = a, b1 = b, c1 = c as Object of C1 by A1; reconsider a2 = a, b2 = b, c2 = c as Object of C2 by A4; A13: (the Comp of C1).(a1,b1,c1) = ~((the Comp of C).(c,b,a)) by A3; (the Comp of C2).(a2,b2,c2) = ~((the Comp of C).(c,b,a)) by A6; hence (the Comp of C1).x = (the Comp of C2).(a2,b2,c2) by A12,A13,MULTOP_1:def 1 .= (the Comp of C2).x by A12,MULTOP_1:def 1; end; hence thesis by A1,A2,A4,A5,A7,A8,FUNCT_1:2; end; assume A14: the AltCatStr of C1 = the AltCatStr of C2; hence the carrier of C2 = the carrier of C & the Arrows of C2 = ~the Arrows of C by A1,A2; let a,b,c be Object of C, a9,b9,c9 be Object of C2; thus thesis by A3,A14; end; definition let C be transitive non empty AltCatStr; func C opp -> strict transitive non empty AltCatStr means : Def4: C, it are_opposite; uniqueness by Th13; existence proof deffunc B(set,set) = (the Arrows of C).($2,$1); deffunc C(set,set,set,set,set) = ((the Comp of C).($3,$2,$1)).($4,$5); A1: now let a,b,c be Element of C, f,g be set; reconsider a9 = a, b9 = b, c9 = c as Object of C; assume A2: f in B(a,b); then A3: f in <^b9,a9^>; reconsider f9 = f as Morphism of b9,a9 by A2; assume A4: g in B(b,c); then A5: g in <^c9,b9^>; reconsider g9 = g as Morphism of c9,b9 by A4; A6: <^c9,a9^> <> {} by A3,A5,ALTCAT_1:def 2; C(a,b,c,f,g) = f9*g9 by A2,A4,ALTCAT_1:def 8; hence C(a,b,c,f,g) in B(a,c) by A6; end; ex C1 being strict non empty transitive AltCatStr st the carrier of C1 = the carrier of C & (for a,b being Object of C1 holds <^a,b^> = B(a,b)) & for a,b,c being Object of C1 st <^a,b^> <> {} & <^b,c^> <> {} for f being Morphism of a,b, g being Morphism of b,c holds g*f = C(a,b,c,f,g) from AltCatStrLambda(A1); then consider C1 being strict transitive non empty AltCatStr such that A7: the carrier of C1 = the carrier of C and A8: for a,b being Object of C1 holds <^a,b^> = (the Arrows of C).(b,a) and A9: for a,b,c being Object of C1 st <^a,b^> <> {} & <^b,c^> <> {} for f being Morphism of a,b, g being Morphism of b,c holds g*f = ((the Comp of C).(c,b,a)).(f,g); take C1; now let a,b,c be Object of C; let a9,b9,c9 be Object of C1; assume that A10: a9 = a and A11: b9 = b and A12: c9 = c; thus A13: <^a,b^> = <^b9,a9^> by A8,A10,A11; A14: <^b,c^> = <^c9,b9^> by A8,A11,A12; assume that A15: <^a,b^> <> {} and A16: <^b,c^> <> {}; let f be Morphism of a,b, g be Morphism of b,c; let f9 be Morphism of b9,a9, g9 be Morphism of c9,b9; assume that A17: f9 = f and A18: g9 = g; thus f9*g9 = ((the Comp of C).(a,b,c)).(g,f) by A9,A10,A11,A12,A13,A14,A15 ,A16,A17,A18 .= g*f by A15,A16,ALTCAT_1:def 8; end; hence thesis by A7,Th9; end; end; registration let C be associative transitive non empty AltCatStr; cluster C opp -> associative; coherence by Def4,Th11; end; registration let C be with_units transitive non empty AltCatStr; cluster C opp -> with_units; coherence by Def4,Th12; end; definition let A,B be category such that A1: A, B are_opposite; deffunc O(set) = $1; deffunc F(set,set,set) = $3; A2: for a being Object of A holds O(a) is Object of B by A1; A3: now let a,b be Object of A such that A4: <^a,b^> <> {}; let f be Morphism of a,b; reconsider a9 = a, b9 = b as Object of B by A2; <^a,b^> = <^b9,a9^> by A1,Th9 .= (the Arrows of B).(b, a); hence F(a,b,f) in (the Arrows of B).(O(b), O(a)) by A4; end; A5: for a,b,c being Object of A st <^a,b^> <> {} & <^b,c^> <> {} for f being Morphism of a,b, g being Morphism of b,c for a9,b9,c9 being Object of B st a9 = O(a) & b9 = O(b) & c9 = O(c) for f9 being Morphism of b9,a9, g9 being Morphism of c9,b9 st f9 = F(a,b,f) & g9 = F(b,c,g) holds F(a,c,g*f) = f9*g9 by A1,Th9; A6: for a being Object of A, a9 being Object of B st a9 = O(a) holds F(a,a,idm a) = idm a9 by A1,Th10; func dualizing-func(A,B) -> contravariant strict Functor of A,B means : Def5: (for a being Object of A holds it.a = a) & for a,b being Object of A st <^a,b^> <> {} for f being Morphism of a,b holds it.f = f; existence proof thus ex F being contravariant strict Functor of A,B st (for a being Object of A holds F.a = O(a)) & for a,b being Object of A st <^a,b^> <> {} for f being Morphism of a,b holds F.f = F(a,b,f) from ContravariantFunctorLambda(A2,A3,A5,A6); end; uniqueness proof let F,G be contravariant strict Functor of A,B such that A7: for a being Object of A holds F.a = a and A8: for a,b being Object of A st <^a,b^> <> {} for f being Morphism of a,b holds F.f = f and A9: for a being Object of A holds G.a = a and A10: for a,b being Object of A st <^a,b^> <> {} for f being Morphism of a,b holds G.f = f; A11: now let a be Object of A; thus F.a = a by A7 .= G.a by A9; end; now let a,b be Object of A such that A12: <^a,b^> <> {}; let f be Morphism of a,b; thus F.f = f by A8,A12 .= G.f by A10,A12; end; hence thesis by A11,Th2; end; end; theorem Th14: for A,B being category st A,B are_opposite holds dualizing-func(A,B)*dualizing-func(B,A) = id B proof let A,B be category such that A1: A, B are_opposite; A2: now let a be Object of B; thus (dualizing-func(A,B)*dualizing-func(B,A)).a = dualizing-func(A,B).(dualizing-func(B,A).a) by FUNCTOR0:33 .= dualizing-func(B,A).a by A1,Def5 .= a by A1,Def5 .= (id B).a by FUNCTOR0:29; end; now let a,b be Object of B; assume A3: <^a,b^> <> {}; then A4: <^dualizing-func(B,A).b,dualizing-func(B,A).a^> <> {} by FUNCTOR0:def 19; let f be Morphism of a,b; thus (dualizing-func(A,B)*dualizing-func(B,A)).f = dualizing-func(A,B).(dualizing-func(B,A).f) by A3,FUNCTOR3:7 .= dualizing-func(B,A).f by A1,A4,Def5 .= f by A1,A3,Def5 .= (id B).f by A3,FUNCTOR0:31; end; hence thesis by A2,Th1; end; theorem Th15: for A, B being category st A, B are_opposite holds dualizing-func(A,B) is bijective proof let A, B be category such that A1: A, B are_opposite; set F = dualizing-func(A,B); deffunc O(set) = $1; deffunc F(set,set,set) = $3; A2: for a being Object of A holds F.a = O(a) by A1,Def5; A3: for a,b being Object of A st <^a,b^> <> {} for f being Morphism of a,b holds F.f = F(a,b,f) by A1,Def5; A4: for a,b being Object of A st O(a) = O(b) holds a = b; A5: for a,b being Object of A st <^a,b^> <> {} for f,g being Morphism of a,b st F(a,b,f) = F(a,b,g) holds f = g; A6: now let a,b be Object of B; reconsider a9 = a, b9 = b as Object of A by A1; A7: <^a,b^> = <^b9,a9^> by A1,Th9; assume A8: <^a,b^> <> {}; let f be Morphism of a,b; thus ex c,d being Object of A, g being Morphism of c,d st b = O(c) & a = O(d) & <^c,d^> <> {} & f = F(c,d,g) by A7,A8; end; F is bijective from ContraBijectiveSch(A2,A3,A4,A5,A6); hence thesis; end; registration let A be category; cluster dualizing-func(A, A opp) -> bijective; coherence by Def4,Th15; cluster dualizing-func(A opp, A) -> bijective; coherence proof A, A opp are_opposite by Def4; hence thesis by Th15; end; end; theorem for A, B being category st A, B are_opposite holds A, B are_anti-isomorphic proof let A, B be category; assume A, B are_opposite; then dualizing-func(A,B) is bijective by Th15; hence thesis; end; theorem Th17: for A, B, C being category st A, B are_opposite holds A, C are_isomorphic iff B, C are_anti-isomorphic proof let A,B,C be category; assume A, B are_opposite; then A1: dualizing-func(A,B) is bijective by Th15; hereby assume A, C are_isomorphic; then consider F being Functor of C,A such that A2: F is bijective covariant by FUNCTOR0:def 39; reconsider F as covariant Functor of C,A by A2; dualizing-func(A,B)*F is bijective contravariant by A1,A2,FUNCTOR1:12; hence B, C are_anti-isomorphic by FUNCTOR0:def 40; end; assume B, C are_anti-isomorphic; then consider F being Functor of B,C such that A3: F is bijective contravariant; reconsider F as contravariant Functor of B,C by A3; F*dualizing-func(A,B) is bijective covariant by A1,A3,FUNCTOR1:12; hence thesis; end; theorem for A, B, C, D being category st A, B are_opposite & C, D are_opposite holds A, C are_isomorphic implies B, D are_isomorphic proof let A, B, C, D be category; assume that A1: A, B are_opposite and A2: C, D are_opposite; A, C are_isomorphic implies B, C are_anti-isomorphic by A1,Th17; hence thesis by A2,Th17; end; theorem for A, B, C, D being category st A, B are_opposite & C, D are_opposite holds A, C are_anti-isomorphic implies B, D are_anti-isomorphic proof let A, B, C, D be category; assume that A1: A, B are_opposite and A2: C, D are_opposite; A, C are_anti-isomorphic implies B, C are_isomorphic by A1,Th17; hence thesis by A2,Th17; end; Lm1: now let A, B be category such that A1: A, B are_opposite; let a, b be Object of A such that A2: <^a,b^> <> {} and A3: <^b,a^> <> {}; let a9, b9 be Object of B such that A4: a9 = a and A5: b9 = b; let f be Morphism of a,b, f9 be Morphism of b9,a9 such that A6: f9 = f; thus f is retraction implies f9 is coretraction proof given g being Morphism of b,a such that A7: g is_right_inverse_of f; reconsider g9 = g as Morphism of a9, b9 by A1,A4,A5,Th7; take g9; f*g = idm b by A7 .= idm b9 by A1,A5,Th10; hence g9*f9 = idm b9 by A1,A2,A3,A4,A5,A6,Th9; end; thus f is coretraction implies f9 is retraction proof given g being Morphism of b,a such that A8: g is_left_inverse_of f; reconsider g9 = g as Morphism of a9, b9 by A1,A4,A5,Th7; take g9; g*f = idm a by A8 .= idm a9 by A1,A4,Th10; hence f9*g9 = idm a9 by A1,A2,A3,A4,A5,A6,Th9; end; end; theorem for A, B being category st A, B are_opposite for a, b being Object of A st <^a,b^> <> {} & <^b,a^> <> {} for a9, b9 being Object of B st a9 = a & b9 = b for f being Morphism of a,b, f9 being Morphism of b9,a9 st f9 = f holds f is retraction iff f9 is coretraction proof let A, B be category such that A1: A, B are_opposite; let a, b be Object of A such that A2: <^a,b^> <> {} and A3: <^b,a^> <> {}; let a9, b9 be Object of B such that A4: a9 = a and A5: b9 = b; A6: <^b9,a9^> = <^a,b^> by A1,A4,A5,Th9; <^a9,b9^> = <^b,a^> by A1,A4,A5,Th9; hence thesis by A1,A2,A3,A4,A5,A6,Lm1; end; theorem for A, B being category st A, B are_opposite for a, b being Object of A st <^a,b^> <> {} & <^b,a^> <> {} for a9, b9 being Object of B st a9 = a & b9 = b for f being Morphism of a,b, f9 being Morphism of b9,a9 st f9 = f holds f is coretraction iff f9 is retraction proof let A, B be category such that A1: A, B are_opposite; let a, b be Object of A such that A2: <^a,b^> <> {} and A3: <^b,a^> <> {}; let a9, b9 be Object of B such that A4: a9 = a and A5: b9 = b; A6: <^b9,a9^> = <^a,b^> by A1,A4,A5,Th9; <^a9,b9^> = <^b,a^> by A1,A4,A5,Th9; hence thesis by A1,A2,A3,A4,A5,A6,Lm1; end; theorem Th22: for A, B being category st A, B are_opposite for a, b being Object of A st <^a,b^> <> {} & <^b,a^> <> {} for a9, b9 being Object of B st a9 = a & b9 = b for f being Morphism of a,b, f9 being Morphism of b9,a9 st f9 = f & f is retraction coretraction holds f9" = f" proof let A, B be category such that A1: A, B are_opposite; let a, b be Object of A such that A2: <^a,b^> <> {} and A3: <^b,a^> <> {}; let a9, b9 be Object of B such that A4: a9 = a and A5: b9 = b; A6: <^b9,a9^> = <^a,b^> by A1,A4,A5,Th9; A7: <^a9,b9^> = <^b,a^> by A1,A4,A5,Th9; let f be Morphism of a,b, f9 be Morphism of b9,a9 such that A8: f9 = f and A9: f is retraction coretraction; reconsider g = f" as Morphism of a9, b9 by A1,A4,A5,Th7; A10: f"*f = idm a by A2,A3,A9,ALTCAT_3:2; A11: f*f" = idm b by A2,A3,A9,ALTCAT_3:2; A12: f9*g = idm a by A1,A2,A3,A4,A5,A8,A10,Th9; A13: g*f9 = idm b by A1,A2,A3,A4,A5,A8,A11,Th9; A14: f9*g = idm a9 by A1,A4,A12,Th10; A15: g*f9 = idm b9 by A1,A5,A13,Th10; A16: f9 is retraction coretraction by A1,A2,A3,A4,A5,A8,A9,Lm1; A17: g is_left_inverse_of f9 by A15; g is_right_inverse_of f9 by A14; hence thesis by A2,A3,A6,A7,A16,A17,ALTCAT_3:def 4; end; theorem Th23: for A, B being category st A, B are_opposite for a, b being Object of A st <^a,b^> <> {} & <^b,a^> <> {} for a9, b9 being Object of B st a9 = a & b9 = b for f being Morphism of a,b, f9 being Morphism of b9,a9 st f9 = f holds f is iso iff f9 is iso proof let A, B be category such that A1: A, B are_opposite; let a, b be Object of A such that A2: <^a,b^> <> {} and A3: <^b,a^> <> {}; let a9, b9 be Object of B such that A4: a9 = a and A5: b9 = b; A6: <^b9,a9^> = <^a,b^> by A1,A4,A5,Th9; A7: <^a9,b9^> = <^b,a^> by A1,A4,A5,Th9; now let A, B be category such that A8: A, B are_opposite; let a, b be Object of A such that A9: <^a,b^> <> {} and A10: <^b,a^> <> {}; let a9, b9 be Object of B such that A11: a9 = a and A12: b9 = b; let f be Morphism of a,b, f9 be Morphism of b9,a9 such that A13: f9 = f; assume A14: f is iso; then A15: f*f" = idm b; A16: f"*f = idm a by A14; f is retraction coretraction by A14,ALTCAT_3:5; then A17: f9" = f" by A8,A9,A10,A11,A12,A13,Th22; A18: idm a = idm a9 by A8,A11,Th10; A19: idm b = idm b9 by A8,A12,Th10; A20: f9*f9" = idm a9 by A8,A9,A10,A11,A12,A13,A16,A17,A18,Th9; f9"*f9 = idm b9 by A8,A9,A10,A11,A12,A13,A15,A17,A19,Th9; hence f9 is iso by A20; end; hence thesis by A1,A2,A3,A4,A5,A6,A7; end; theorem Th24: for A, B, C, D being category st A, B are_opposite & C, D are_opposite for F, G being covariant Functor of B, C st F, G are_naturally_equivalent holds dualizing-func(C,D)*G*dualizing-func(A,B), dualizing-func(C,D)*F*dualizing-func(A,B) are_naturally_equivalent proof let A, B, C, D be category such that A1: A, B are_opposite and A2: C, D are_opposite; let F, G be covariant Functor of B, C such that A3: F is_naturally_transformable_to G and A4: G is_transformable_to F; given t being natural_transformation of F, G such that A5: for a being Object of B holds t!a is iso; set dAB = dualizing-func(A,B), dCD = dualizing-func(C,D), dF = dCD*F*dAB, dG = dCD*G*dAB; A6: F is_transformable_to G by A3; A7: now let a be Object of A; A8: dG.a = (dCD*G).(dAB.a) by FUNCTOR0:33; dF.a = (dCD*F).(dAB.a) by FUNCTOR0:33; hence dG.a = dCD.(G.(dAB.a)) & dF.a = dCD.(F.(dAB.a)) by A8,FUNCTOR0:33; hence dG.a = G.(dAB.a) & dF.a = F.(dAB.a) by A2,Def5; hence <^dG.a, dF.a^> = <^F.(dAB.a), G.(dAB.a)^> by A2,Th9; end; A9: dG is_transformable_to dF proof let a be Object of A; <^dG.a, dF.a^> = <^F.(dAB.a), G.(dAB.a)^> by A7; hence thesis by A6; end; dom t = the carrier of B by PARTFUN1:def 2 .= the carrier of A by A1; then reconsider dt = t as ManySortedSet of the carrier of A by PARTFUN1:def 2,RELAT_1:def 18; dt is transformation of dG, dF proof thus dG is_transformable_to dF by A9; let a be Object of A; set b = dAB.a; A10: b = a by A1,Def5; t.b = t!b by A6,FUNCTOR2:def 4; hence thesis by A7,A10; end; then reconsider dt as transformation of dG, dF; A11: now let a,b be Object of A such that A12: <^a,b^> <> {}; let f be Morphism of a,b; set b9 = dAB.b, a9 = dAB.a, f9 = dAB.f; A13: a9 = a by A1,Def5; A14: b9 = b by A1,Def5; then A15: <^b9, a9^> = <^a,b^> by A1,A13,Th9; A16: t!a9 = t.a by A6,A13,FUNCTOR2:def 4; A17: t!b9 = t.b by A6,A14,FUNCTOR2:def 4; A18: dt!a = t.a by A9,FUNCTOR2:def 4; A19: dt!b = t.b by A9,FUNCTOR2:def 4; A20: <^F.b9, F.a9^> <> {} by A12,A15,FUNCTOR0:def 18; A21: <^G.b9, G.a9^> <> {} by A12,A15,FUNCTOR0:def 18; A22: dF.f = (dCD*F).f9 by A12,FUNCTOR3:7; A23: dG.f = (dCD*G).f9 by A12,FUNCTOR3:7; A24: dF.f = dCD.(F.f9) by A12,A15,A22,FUNCTOR3:8; A25: dG.f = dCD.(G.f9) by A12,A15,A23,FUNCTOR3:8; A26: dF.f = F.f9 by A2,A20,A24,Def5; A27: dG.f = G.f9 by A2,A21,A25,Def5; A28: <^F.b9, G.b9^> <> {} by A6; A29: <^F.a9, G.a9^> <> {} by A6; A30: dG.a = G.a9 by A7; A31: dF.a = F.a9 by A7; A32: dG.b = G.b9 by A7; A33: dF.b = F.b9 by A7; hence dt!b*dG.f = G.f9*(t!b9) by A2,A17,A19,A21,A27,A28,A30,A32,Th9 .= t!a9*F.f9 by A3,A12,A15,FUNCTOR2:def 7 .= dF.f*(dt!a) by A2,A16,A18,A20,A26,A29,A30,A31,A33,Th9; end; thus dG is_naturally_transformable_to dF by A9,A11; then reconsider dt as natural_transformation of dG, dF by A11,FUNCTOR2:def 7; thus dF is_transformable_to dG proof let a be Object of A; A34: dF.a = F.(dAB.a) by A7; dG.a = G.(dAB.a) by A7; then <^dF.a, dG.a^> = <^G.(dAB.a), F.(dAB.a)^> by A2,A34,Th9; hence thesis by A4; end; take dt; let a be Object of A; A35: dG.a = G.(dAB.a) by A7; A36: dF.a = F.(dAB.a) by A7; A37: dAB.a = a by A1,Def5; A38: dt!a = t.a by A9,FUNCTOR2:def 4; A39: t!(dAB.a) = t.a by A6,A37,FUNCTOR2:def 4; A40: t!(dAB.a) is iso by A5; A41: <^F.(dAB.a), G.(dAB.a)^> <> {} by A6; <^G.(dAB.a), F.(dAB.a)^> <> {} by A4; hence thesis by A2,A35,A36,A38,A39,A40,A41,Th23; end; theorem Th25: for A, B, C, D being category st A, B are_opposite & C, D are_opposite holds A, C are_equivalent implies B, D are_equivalent proof let A, B, C, D be category; assume that A1: A, B are_opposite and A2: C, D are_opposite; given F being covariant Functor of A,C, G being covariant Functor of C,A such that A3: G*F, id A are_naturally_equivalent and A4: F*G, id C are_naturally_equivalent; take dF = dualizing-func(C,D)*F*dualizing-func(B,A), dG = dualizing-func(A,B)*G*dualizing-func(D,C); A5: G* id C = the FunctorStr of G by FUNCTOR3:5; A6: dualizing-func(A,B)*(id A) = dualizing-func(A,B) by FUNCTOR3:5; A7: id C = dualizing-func(D,C)*dualizing-func(C,D) by A2,Th14; A8: dualizing-func(A,B)*(G*F)*dualizing-func(B,A) = dualizing-func(A,B)*G*F*dualizing-func(B,A) by FUNCTOR0:32 .= dualizing-func(A,B)*G*(F*dualizing-func(B,A)) by FUNCTOR0:32 .= dualizing-func(A,B)*(G*(id C))*(F*dualizing-func(B,A)) by A5,Th3 .= dualizing-func(A,B)*G*(id C)*(F*dualizing-func(B,A)) by FUNCTOR0:32 .= dG*dualizing-func(C,D)*(F*dualizing-func(B,A)) by A7,FUNCTOR0:32 .= dG*(dualizing-func(C,D)*(F*dualizing-func(B,A))) by FUNCTOR0:32 .= dG*dF by FUNCTOR0:32; dualizing-func(A,B)*(id A)*dualizing-func(B,A) = id B by A1,A6,Th14; hence dG*dF, id B are_naturally_equivalent by A1,A3,A8,Th24; A9: F* id A = the FunctorStr of F by FUNCTOR3:5; A10: dualizing-func(C,D)*(id C) = dualizing-func(C,D) by FUNCTOR3:5; A11: id A = dualizing-func(B,A)*dualizing-func(A,B) by A1,Th14; A12: dualizing-func(C,D)*(F*G)*dualizing-func(D,C) = dualizing-func(C,D)*F*G*dualizing-func(D,C) by FUNCTOR0:32 .= dualizing-func(C,D)*F*(G*dualizing-func(D,C)) by FUNCTOR0:32 .= dualizing-func(C,D)*(F*(id A))*(G*dualizing-func(D,C)) by A9,Th3 .= dualizing-func(C,D)*F*(id A)*(G*dualizing-func(D,C)) by FUNCTOR0:32 .= dF*dualizing-func(A,B)*(G*dualizing-func(D,C)) by A11,FUNCTOR0:32 .= dF*(dualizing-func(A,B)*(G*dualizing-func(D,C))) by FUNCTOR0:32 .= dF*dG by FUNCTOR0:32; dualizing-func(C,D)*(id C)*dualizing-func(D,C) = id D by A2,A10,Th14; hence thesis by A2,A4,A12,Th24; end; definition let A,B be category; pred A,B are_dual means : Def6: A, B opp are_equivalent; symmetry proof let A,B be category; A1: A, A opp are_opposite by Def4; B, B opp are_opposite by Def4; hence thesis by A1,Th25; end; end; theorem for A, B being category st A, B are_anti-isomorphic holds A, B are_dual proof let A, B be category; A1: B, B opp are_opposite by Def4; assume A, B are_anti-isomorphic; then A, B opp are_isomorphic by A1,Th17; hence A, B opp are_equivalent by Th5; end; theorem for A, B, C being category st A, B are_opposite holds A, C are_equivalent iff B, C are_dual proof let A, B, C be category such that A1: A, B are_opposite; C, C opp are_opposite by Def4; hence thesis by A1,Th25; end; theorem for A, B, C being category st A, B are_dual & B, C are_equivalent holds A, C are_dual proof let A, B, C be category such that A1: A, B opp are_equivalent and A2: B, C are_equivalent; A3: B, B opp are_opposite by Def4; C, C opp are_opposite by Def4; then B opp, C opp are_equivalent by A2,A3,Th25; hence A, C opp are_equivalent by A1,Th4; end; theorem for A, B, C being category st A, B are_dual & B, C are_dual holds A, C are_equivalent proof let A, B, C be category such that A1: A, B opp are_equivalent and A2: B, C are_dual; C, B opp are_equivalent by A2,Def6; hence thesis by A1,Th4; end; begin :: Concrete categories theorem Th30: for X,Y,x being set holds x in Funcs(X,Y) iff x is Function & proj1 x = X & proj2 x c= Y proof let X,Y,x be set; hereby assume x in Funcs(X,Y); then ex f being Function st x = f & dom f = X & rng f c= Y by FUNCT_2:def 2 ; hence x is Function & proj1 x = X & proj2 x c= Y; end; assume x is Function; then reconsider x as Function; dom x = proj1 x; hence thesis by FUNCT_2:def 2; end; definition let C be category; attr C is para-functional means ex F being ManySortedSet of C st for a1,a2 being Object of C holds <^a1,a2^> c= Funcs(F.a1,F.a2); end; registration cluster quasi-functional -> para-functional for category; coherence proof let C be category such that A1: for a1,a2 being Object of C holds <^a1,a2^> c= Funcs(a1,a2); reconsider F = id the carrier of C as ManySortedSet of C; take F; let a1,a2 be Object of C; thus thesis by A1; end; end; definition let C be category; let a be set; func C-carrier_of a -> set means : Def8: ex b being Object of C st b = a & it = proj1 idm b if a is Object of C otherwise it = {}; consistency; existence proof hereby assume a is Object of C; then reconsider b = a as Object of C; take x = proj1 idm b, b; thus b = a & x = proj1 idm b; end; thus thesis; end; uniqueness; end; notation let C be category; let a be Object of C; synonym the_carrier_of a for C-carrier_of a; end; definition let C be category; let a be Object of C; redefine func the_carrier_of a equals proj1 idm a; compatibility by Def8; end; theorem Th31: for A being non empty set, a being Object of EnsCat A holds idm a = id a proof let A be non empty set, a be Object of EnsCat A; <^a,a^> = Funcs(a, a) by ALTCAT_1:def 14; then reconsider e = id a as Morphism of a,a by FUNCT_2:126; now let b being Object of EnsCat A such that A1: <^a,b^> <> {}; let f be Morphism of a,b; A2: <^a,b^> = Funcs(a, b) by ALTCAT_1:def 14; then reconsider g = f as Function; A3: dom g = a by A1,A2,Th30; thus f*e = g* id a by A1,ALTCAT_1:def 12 .= f by A3,RELAT_1:52; end; hence thesis by ALTCAT_1:def 17; end; theorem Th32: for A being non empty set for a being Object of EnsCat A holds the_carrier_of a = a proof let A be non empty set; let a be Object of EnsCat A; thus the_carrier_of a = proj1 id a by Th31 .= a; end; definition let C be category; attr C is set-id-inheriting means : Def10: for a being Object of C holds idm a = id the_carrier_of a; end; registration let A be non empty set; cluster EnsCat A -> set-id-inheriting; coherence proof let a be Object of EnsCat A; thus idm a = id a by Th31 .= id the_carrier_of a by Th32; end; end; definition let C be category; attr C is concrete means C is para-functional semi-functional set-id-inheriting; end; registration cluster concrete -> para-functional semi-functional set-id-inheriting for category; coherence; cluster para-functional semi-functional set-id-inheriting -> concrete for category; coherence; end; registration cluster concrete quasi-functional strict for category; existence proof take EnsCat NAT; thus thesis; end; end; theorem Th33: for C being category holds C is para-functional iff for a1,a2 being Object of C holds <^a1,a2^> c= Funcs(the_carrier_of a1, the_carrier_of a2) proof let C be category; thus C is para-functional implies for a1,a2 being Object of C holds <^a1,a2^> c= Funcs(the_carrier_of a1, the_carrier_of a2) proof given F being ManySortedSet of C such that A1: for a1,a2 being Object of C holds <^a1,a2^> c= Funcs(F.a1,F.a2); let a1,a2 be Object of C; A2: idm a1 in <^a1,a1^>; A3: <^a1,a1^> c= Funcs(F.a1, F.a1) by A1; A4: <^a2,a2^> c= Funcs(F.a2, F.a2) by A1; A5: idm a2 in <^a2,a2^>; A6: ex f1 being Function st ( idm a1 = f1)&( dom f1 = F.a1)&( rng f1 c= F.a1) by A2,A3,FUNCT_2:def 2; ex f2 being Function st ( idm a2 = f2)&( dom f2 = F.a2)&( rng f2 c= F.a2) by A4,A5,FUNCT_2:def 2; hence thesis by A1,A6; end; assume A7: for a1,a2 being Object of C holds <^a1,a2^> c= Funcs(the_carrier_of a1, the_carrier_of a2); deffunc O(set) = C-carrier_of $1; consider F being ManySortedSet of the carrier of C such that A8: for a being Element of C holds F.a = O(a) from PBOOLE:sch 5; take F; let a, b be Object of C; A9: F.a = the_carrier_of a by A8; F.b = the_carrier_of b by A8; hence thesis by A7,A9; end; theorem Th34: for C being para-functional category for a,b being Object of C st <^a,b^> <> {} for f being Morphism of a,b holds f is Function of the_carrier_of a, the_carrier_of b proof let C be para-functional category; let a,b be Object of C such that A1: <^a,b^> <> {}; let f be Morphism of a,b; A2: <^a,b^> c= Funcs(the_carrier_of a, the_carrier_of b) by Th33; f in <^a,b^> by A1; hence thesis by A2,FUNCT_2:66; end; registration let A be para-functional category; let a,b be Object of A; cluster -> Function-like Relation-like for Morphism of a,b; coherence proof let f be Morphism of a,b; per cases; suppose <^a,b^> <> {}; hence thesis by Th34; end; suppose <^a,b^> = {}; hence thesis; end; end; end; theorem Th35: for C being para-functional category for a,b being Object of C st <^a,b^> <> {} for f being Morphism of a,b holds dom f = the_carrier_of a & rng f c= the_carrier_of b proof let C be para-functional category; let a,b be Object of C such that A1: <^a,b^> <> {}; let f be Morphism of a,b; A2: <^a,b^> c= Funcs(the_carrier_of a, the_carrier_of b) by Th33; f in <^a,b^> by A1; hence thesis by A2,FUNCT_2:92; end; theorem Th36: for C being para-functional semi-functional category for a,b,c being Object of C st <^a,b^> <> {} & <^b,c^> <> {} for f being Morphism of a,b, g being Morphism of b,c holds g*f = (g qua Function)*(f qua Function) proof let C be para-functional semi-functional category; let a,b,c be Object of C such that A1: <^a,b^> <> {} and A2: <^b,c^> <> {}; let f be Morphism of a,b, g be Morphism of b,c; <^a,c^> <> {} by A1,A2,ALTCAT_1:def 2; hence thesis by A1,A2,ALTCAT_1:def 12; end; theorem Th37: for C being para-functional semi-functional category for a being Object of C st id the_carrier_of a in <^a,a^> holds idm a = id the_carrier_of a proof let C be para-functional semi-functional category; let a be Object of C; assume id the_carrier_of a in <^a,a^>; then reconsider f = id the_carrier_of a as Morphism of a,a; now let b be Object of C such that A1: <^a,b^> <> {}; let g being Morphism of a,b; A2: dom g = the_carrier_of a by A1,Th35; thus g*f = g* id the_carrier_of a by A1,Th36 .= g by A2,RELAT_1:52; end; hence thesis by ALTCAT_1:def 17; end; scheme ConcreteCategoryLambda { A() -> non empty set, B(object,object) -> set, D(object) -> set }: ex C being concrete strict category st the carrier of C = A() & (for a being Object of C holds the_carrier_of a = D(a)) & for a,b being Object of C holds <^a,b^> = B(a,b) provided A1: for a,b,c being Element of A(), f,g being Function st f in B(a,b) & g in B(b,c) holds g*f in B(a,c) and A2: for a,b being Element of A() holds B(a,b) c= Funcs(D(a), D(b)) and A3: for a being Element of A() holds id D(a) in B(a,a) proof deffunc C(set,set,set,set,set) = $4(#)$5; A4: now let a,b be Element of A(), f be set such that A5: f in B(a,b); B(a,b) c= Funcs(D(a), D(b)) by A2; hence f is Function by A5; end; A6: for a,b,c being Element of A(), f,g being set st f in B(a,b) & g in B(b,c) holds C(a,b,c,f,g) in B(a,c) proof let a,b,c be Element of A(), f,g be set; assume that A7: f in B(a,b) and A8: g in B(b,c); reconsider f, g as Function by A4,A7,A8; g*f = f(#)g; hence thesis by A1,A7,A8; end; A9: for a,b,c,d being Element of A(), f,g,h being set st f in B(a,b) & g in B(b,c) & h in B(c,d) holds C(a,c,d,C(a,b,c,f,g),h) = C(a,b,d,f,C(b,c,d,g,h)) proof let a,b,c,d be Element of A(); let f,g,h be set; assume that A10: f in B(a,b) and A11: g in B(b,c) and A12: h in B(c,d); reconsider f, g, h as Function by A4,A10,A11,A12; (f(#)g)(#)h = f(#)(h*g) by RELAT_1:36; hence thesis; end; A13: for a being Element of A() ex f being set st f in B(a,a) & for b being Element of A(), g being set st g in B(a,b) holds C(a,a,b,f,g) = g proof let a be Element of A(); take f = id D(a); thus f in B(a,a) by A3; let b be Element of A(), g be set such that A14: g in B(a,b); B(a,b) c= Funcs(D(a), D(b)) by A2; then consider h being Function such that A15: g = h and A16: dom h = D(a) and rng h c= D(b) by A14,FUNCT_2:def 2; thus f(#)g = g by A15,A16,RELAT_1:52; end; A17: for a being Element of A() ex f being set st f in B(a,a) & for b being Element of A(), g being set st g in B(b,a) holds C(b,a,a,g,f) = g proof let a be Element of A(); take f = id D(a); thus f in B(a,a) by A3; let b be Element of A(), g be set such that A18: g in B(b,a); B(b,a) c= Funcs(D(b), D(a)) by A2; then consider h being Function such that A19: g = h and dom h = D(b) and A20: rng h c= D(a) by A18,FUNCT_2:def 2; thus g(#)f = g by A19,A20,RELAT_1:53; end; consider C being strict category such that A21: the carrier of C = A() and A22: for a,b being Object of C holds <^a,b^> = B(a,b) and A23: for a,b,c being Object of C st <^a,b^> <> {} & <^b,c^> <> {} for f being Morphism of a,b, g being Morphism of b,c holds g*f = C(a,b,c,f,g) from CategoryLambda(A6,A9,A13,A17); consider D being ManySortedSet of C such that A24: for x being Element of C holds D.x = D(x) from PBOOLE:sch 5; A25: C is para-functional proof take D; let a1,a2 be Object of C; A26: <^a1,a2^> = B(a1,a2) by A22; A27: D(a1) = D.a1 by A24; D(a2) = D.a2 by A24; hence thesis by A2,A21,A26,A27; end; A28: C is semi-functional by A23; A29: now let a be Object of C; id D(a) in B(a,a) by A3,A21; then reconsider e = id D(a) as Morphism of a,a by A22; now let b be Object of C such that A30: <^a,b^> <> {}; let f be Morphism of a,b; A31: <^a,b^> = B(a,b) by A22; A32: B(a,b) c= Funcs(D(a), D(b)) by A2,A21; f in <^a,b^> by A30; then consider h being Function such that A33: f = h and A34: dom h = D(a) and rng h c= D(b) by A31,A32,FUNCT_2:def 2; thus f*e = h* id D(a) by A28,A30,A33 .= f by A33,A34,RELAT_1:52; end; hence idm a = id D(a) by ALTCAT_1:def 17; end; A35: now let i be set; assume i in the carrier of C; then reconsider a = i as Object of C; thus C-carrier_of i = proj1 idm a by Def8 .= proj1 id D(a) by A29 .= D(a) .= D.i by A24; end; C is set-id-inheriting proof let a be Object of C; thus idm a = id D(a) by A29 .= id (D.a) by A24 .= id (the_carrier_of a) by A35; end; then reconsider C as para-functional semi-functional set-id-inheriting strict category by A25,A28; take C; thus the carrier of C = A() by A21; hereby let a be Object of C; thus the_carrier_of a = D.a by A35 .= D(a) by A24; end; thus thesis by A22; end; scheme ConcreteCategoryQuasiLambda { A() -> non empty set, P[object,object,object], D(object) -> set }: ex C being concrete strict category st the carrier of C = A() & (for a being Object of C holds the_carrier_of a = D(a)) & for a,b being Element of A(), f being Function holds f in (the Arrows of C).(a,b) iff f in Funcs(D(a), D(b)) & P[a,b,f] provided A1: for a,b,c being Element of A(), f,g being Function st P[a,b,f] & P[b,c,g] holds P[a,c,g*f] and A2: for a being Element of A() holds P[a,a,id D(a)] proof set A = A(); defpred P[object,object] means ex a,b being object, c being set st $1 = [a,b] & c = $2 & for f being object holds f in c iff f in Funcs(D(a), D(b)) & P[a,b,f]; A3: now let x be object; assume x in [:A,A:]; then consider a,b being object such that a in A and b in A and A4: x = [a,b] by ZFMISC_1:def 2; defpred Q[object] means P[a,b,$1]; consider y being set such that A5: for f being object holds f in y iff f in Funcs(D(a), D(b)) & Q[f] from XBOOLE_0:sch 1; reconsider y as object; take y; thus P[x,y] by A4,A5; end; consider F being Function such that dom F = [:A,A:] and A6: for x being object st x in [:A,A:] holds P[x, F.x] from CLASSES1:sch 1( A3); A7: now let a,b be set; assume that A8: a in A and A9: b in A; [a,b] in [:A,A:] by A8,A9,ZFMISC_1:87; then P[[a,b], F.[a,b]] by A6; then consider a9,b9,c being object such that A10: [a,b] = [a9,b9] & c = Funcs(D(a9), D(b9)) and A11: for f being object holds f in F.[a,b] iff f in Funcs(D(a9), D(b9)) & P[a9,b9,f]; A12: a = a9 by A10,XTUPLE_0:1; A13: b = b9 by A10,XTUPLE_0:1; let f be set; thus f in F.[a,b] iff P[a,b,f] & f in Funcs(D(a), D(b)) by A11,A12,A13; end; deffunc B(set,set) = F.[$1,$2]; A14: now let a,b,c be Element of A, f,g be Function; assume that A15: f in B(a,b) and A16: g in B(b,c); A17: P[a,b,f] by A7,A15; A18: f in Funcs(D(a), D(b)) by A7,A15; A19: P[b,c,g] by A7,A16; A20: g in Funcs(D(b), D (c )) by A7,A16; A21: dom f = D(a) by A18,Th30; A22: rng f c= D(b) by A18,Th30; A23: dom g = D(b) by A20,Th30; A24: rng g c= D(c) by A20,Th30; A25: rng (g*f) c= rng g by RELAT_1:26; A26: dom (g*f) = D(a) by A21,A22,A23,RELAT_1:27; rng (g*f) c= D(c) by A24,A25; then A27: g*f in Funcs(D(a), D(c)) by A26,FUNCT_2:def 2; P[a,c,g*f] by A1,A17,A19; hence g*f in B(a,c) by A7,A27; end; A28: for a,b be Element of A holds B(a,b) c= Funcs(D(a), D(b)) by A7; A29: for a being Element of A() holds id D(a) in B(a,a) proof let a be Element of A(); A30: dom id D(a) = D(a); A31: rng id D(a) = D(a); A32: P[a,a, id D(a)] by A2; id D(a) in Funcs(D(a), D(a)) by A30,A31,FUNCT_2:def 2; hence thesis by A7,A32; end; consider C being para-functional semi-functional set-id-inheriting strict category such that A33: the carrier of C = A() and A34: for a being Object of C holds the_carrier_of a = D(a) and A35: for a,b being Object of C holds <^a,b^> = B(a,b) from ConcreteCategoryLambda(A14,A28,A29); take C; thus the carrier of C = A() by A33; thus for a being Object of C holds the_carrier_of a = D(a) by A34; let a,b be Element of A(), f being Function; reconsider a,b as Object of C by A33; (the Arrows of C).(a,b) = <^a,b^> .= F.[a,b] by A35; hence thesis by A7; end; scheme ConcreteCategoryEx { A() -> non empty set, B(object) -> set, D[object, object], P[object,object,object] }: ex C being concrete strict category st the carrier of C = A() & (for a being Object of C for x being set holds x in the_carrier_of a iff x in B(a) & D[a,x]) & for a,b being Element of A(), f being Function holds f in (the Arrows of C).(a,b) iff f in Funcs(C-carrier_of a, C-carrier_of b) & P[a,b,f] provided A1: for a,b,c being Element of A(), f,g being Function st P[a,b,f] & P[b,c,g] holds P[a,c,g*f] and A2: for a being Element of A(), X being set st for x being set holds x in X iff x in B(a) & D[a,x] holds P[a,a,id X] proof A3: for a,b,c being Element of A(), f,g being Function st P[a,b,f] & P[b,c,g] holds P[a,c,g*f] by A1; consider D being Function such that dom D = A() and A4: for a being object st a in A() for y being object holds y in D.a iff y in B(a) & D[a,y] from CARD_3:sch 2; deffunc D(set) = D.$1; A5: now let a be Element of A(); for y being set holds y in D.a iff y in B(a) & D[a,y] by A4; hence P[a,a,id D(a)] by A2; end; consider C being para-functional semi-functional set-id-inheriting strict category such that A6: the carrier of C = A() and A7: for a being Object of C holds the_carrier_of a = D(a) and A8: for a,b being Element of A(), f being Function holds f in (the Arrows of C).(a,b) iff f in Funcs(D(a), D(b)) & P[a,b,f] from ConcreteCategoryQuasiLambda(A3, A5); take C; thus the carrier of C = A() by A6; hereby let a be Object of C; the_carrier_of a = D.a by A7; hence for x being set holds x in the_carrier_of a iff x in B(a) & D[a,x] by A4,A6; end; let a,b be Element of A(); A9: D.a = C-carrier_of a by A6,A7; D.b = C-carrier_of b by A6,A7; hence thesis by A8,A9; end; scheme ConcreteCategoryUniq1 { A() -> non empty set, B(object,object) -> object }: for C1, C2 being para-functional semi-functional category st the carrier of C1 = A() & (for a,b being Object of C1 holds <^a,b^> = B(a,b)) & the carrier of C2 = A() & (for a,b being Object of C2 holds <^a,b^> = B(a,b)) holds the AltCatStr of C1 = the AltCatStr of C2 proof deffunc C(set,set,set,set,set) = $4(#)$5; A1: for C1,C2 being non empty transitive AltCatStr st the carrier of C1 = A() & (for a,b being Object of C1 holds <^a,b^> = B(a,b)) & (for a,b,c being Object of C1 st <^a,b^> <> {} & <^b,c^> <> {} for f being Morphism of a,b, g being Morphism of b,c holds g*f = C(a,b,c,f,g)) & the carrier of C2 = A() & (for a,b being Object of C2 holds <^a,b^> = B(a,b)) & (for a,b,c being Object of C2 st <^a,b^> <> {} & <^b,c^> <> {} for f being Morphism of a,b, g being Morphism of b,c holds g*f = C(a,b,c,f,g)) holds the AltCatStr of C1 = the AltCatStr of C2 from CategoryLambdaUniq; let C1,C2 be para-functional semi-functional category; A2: for C1 be para-functional semi-functional category, a,b,c be Object of C1 st <^a,b^> <> {} & <^b,c^> <> {} for f be Morphism of a,b, g be Morphism of b,c holds g*f = f(#)g by Th36; then A3: for a,b,c being Object of C1 st <^a,b^> <> {} & <^b,c^> <> {} for f being Morphism of a,b, g being Morphism of b,c holds g*f = f(#)g; for a,b,c being Object of C2 st <^a,b^> <> {} & <^b,c^> <> {} for f being Morphism of a,b, g being Morphism of b,c holds g*f = f(#)g by A2; hence thesis by A1,A3; end; scheme ConcreteCategoryUniq2 { A() -> non empty set, P[object,object,object], D(object) -> set }: for C1,C2 being para-functional semi-functional category st the carrier of C1 = A() & (for a,b being Element of A(), f being Function holds f in (the Arrows of C1).(a,b) iff f in Funcs(D(a), D(b)) & P[a,b,f]) & the carrier of C2 = A() & (for a,b being Element of A(), f being Function holds f in (the Arrows of C2).(a,b) iff f in Funcs(D(a), D(b)) & P[a,b,f]) holds the AltCatStr of C1 = the AltCatStr of C2 proof let C1,C2 be para-functional semi-functional category such that A1: the carrier of C1 = A() and A2: for a,b being Element of A(), f being Function holds f in (the Arrows of C1).(a,b) iff f in Funcs(D(a), D(b)) & P[a,b,f] and A3: the carrier of C2 = A() and A4: for a,b being Element of A(), f being Function holds f in (the Arrows of C2).(a,b) iff f in Funcs(D(a), D(b)) & P[a,b,f]; deffunc B(set,set) = (the Arrows of C1).($1,$2); A5: for C1, C2 being para-functional semi-functional category st the carrier of C1 = A() & (for a,b being Object of C1 holds <^a,b^> = B(a,b)) & the carrier of C2 = A() & (for a,b being Object of C2 holds <^a,b^> = B(a,b)) holds the AltCatStr of C1 = the AltCatStr of C2 from ConcreteCategoryUniq1; A6: for a,b being Object of C1 holds <^a,b^> = B(a,b); now let a,b be Object of C2; reconsider x = a, y = b as Element of A() by A3; reconsider a9 = x, b9 = y as Object of C1 by A1; thus <^a,b^> = B(a,b) proof hereby let z be object; assume A7: z in <^a,b^>; then A8: z in Funcs(D(x), D(y)) by A4; P[x,y,z] by A4,A7; hence z in B(a,b) by A2,A8; end; let z be object; assume A9: z in B(a,b); then A10: z is Morphism of a9,b9; then A11: z in Funcs(D(x), D(y)) by A2,A9; P[x,y,z] by A2,A9,A10; hence thesis by A4,A11; end; end; hence thesis by A1,A3,A5,A6; end; scheme ConcreteCategoryUniq3 { A() -> non empty set, B(object) -> set, D[object,object], P[object,object,object] }: for C1,C2 being para-functional semi-functional category st the carrier of C1 = A() & (for a being Object of C1 for x being set holds x in the_carrier_of a iff x in B(a) & D[a,x]) & (for a,b being Element of A(), f being Function holds f in (the Arrows of C1).(a,b) iff f in Funcs(C1-carrier_of a, C1-carrier_of b) & P[a,b,f]) & the carrier of C2 = A() & (for a being Object of C2 for x being set holds x in the_carrier_of a iff x in B(a) & D[a,x]) & (for a,b being Element of A(), f being Function holds f in (the Arrows of C2).(a,b) iff f in Funcs(C2-carrier_of a, C2-carrier_of b) & P[a,b,f]) holds the AltCatStr of C1 = the AltCatStr of C2 proof let C1,C2 be para-functional semi-functional category such that A1: the carrier of C1 = A() and A2: for a being Object of C1 for x being set holds x in the_carrier_of a iff x in B(a) & D[a,x] and A3: for a,b being Element of A(), f being Function holds f in (the Arrows of C1).(a,b) iff f in Funcs(C1-carrier_of a, C1-carrier_of b) & P[a,b,f] and A4: the carrier of C2 = A() and A5: for a being Object of C2 for x being set holds x in the_carrier_of a iff x in B(a) & D[a,x] and A6: for a,b being Element of A(), f being Function holds f in (the Arrows of C2).(a,b) iff f in Funcs(C2-carrier_of a, C2-carrier_of b) & P[a,b,f]; deffunc D(set) = C1-carrier_of $1; A7: for C1,C2 being para-functional semi-functional category st the carrier of C1 = A() & (for a,b being Element of A(), f being Function holds f in (the Arrows of C1).(a,b) iff f in Funcs(D(a), D(b)) & P[a,b,f]) & the carrier of C2 = A() & (for a,b being Element of A(), f being Function holds f in (the Arrows of C2).(a,b) iff f in Funcs(D(a), D(b)) & P[a,b,f]) holds the AltCatStr of C1 = the AltCatStr of C2 from ConcreteCategoryUniq2; A8: now let a be Element of A(); reconsider a1 = a as Object of C1 by A1; reconsider a2 = a as Object of C2 by A4; now let x be object; x in the_carrier_of a1 iff x in B(a) & D[a,x] by A2; hence x in the_carrier_of a1 iff x in the_carrier_of a2 by A5; end; hence C1-carrier_of a = C2-carrier_of a by TARSKI:2; end; now let a,b be Element of A(), f be Function; A9: D(a) = C2-carrier_of a by A8; D(b) = C2-carrier_of b by A8; hence f in (the Arrows of C2).(a,b) iff f in Funcs(D(a), D(b)) & P[a,b,f ] by A6,A9; end; hence thesis by A1,A3,A4,A7; end; begin :: Equivalence between concrete categories theorem Th38: for C being concrete category for a,b being Object of C st <^a,b^> <> {} & <^b,a^> <> {} for f being Morphism of a,b st f is retraction holds rng f = the_carrier_of b proof let C be concrete category; let a,b be Object of C; assume that A1: <^a,b^> <> {} and A2: <^b,a^> <> {}; let f be Morphism of a,b; given g being Morphism of b,a such that A3: g is_right_inverse_of f; A4: f*g = idm b by A3; A5: f qua Function*g = f*g by A1,A2,Th36; A6: f is Function of the_carrier_of a, the_carrier_of b by A1,Th34; A7: g is Function of the_carrier_of b, the_carrier_of a by A2,Th34; idm b = id the_carrier_of b by Def10; hence thesis by A4,A5,A6,A7,FUNCT_2:18; end; theorem Th39: for C being concrete category for a,b being Object of C st <^a,b^> <> {} & <^b,a^> <> {} for f being Morphism of a,b st f is coretraction holds f is one-to-one proof let C be concrete category; let a,b be Object of C; assume that A1: <^a,b^> <> {} and A2: <^b,a^> <> {}; let f be Morphism of a,b; given g being Morphism of b,a such that A3: g is_left_inverse_of f; A4: g*f = idm a by A3; A5: g qua Function*f = g*f by A1,A2,Th36; A6: dom f = the_carrier_of a by A1,Th35; idm a = id the_carrier_of a by Def10; hence thesis by A4,A5,A6,FUNCT_1:31; end; theorem Th40: for C being concrete category for a,b being Object of C st <^a,b^> <> {} & <^b,a^> <> {} for f being Morphism of a,b st f is iso holds f is one-to-one & rng f = the_carrier_of b by ALTCAT_3:5,Th38,Th39; theorem Th41: for C being para-functional semi-functional category for a,b being Object of C st <^a,b^> <> {} for f being Morphism of a,b st f is one-to-one & (f qua Function)" in <^b,a^> holds f is iso proof let C be para-functional semi-functional category; let a,b be Object of C such that A1: <^a,b^> <> {}; let f be Morphism of a,b; assume A2: f is one-to-one; assume A3: f qua Function" in <^b,a^>; then reconsider g = f qua Function" as Morphism of b,a; dom g = the_carrier_of b by A3,Th35; then A4: rng f = the_carrier_of b by A2,FUNCT_1:33; A5: f qua Function"*f = id dom f by A2,FUNCT_1:39; A6: f*(f qua Function") = id rng f by A2,FUNCT_1:39; A7: dom f = the_carrier_of a by A1,Th35; A8: f*g = id the_carrier_of b by A1,A3,A4,A6,Th36; A9: g*f = id the_carrier_of a by A1,A3,A5,A7,Th36; A10: idm b = f*g by A8,Th37; idm a = g*f by A9,Th37; then A11: g is_left_inverse_of f; A12: g is_right_inverse_of f by A10; then f is retraction coretraction by A11; hence f*f" = idm b & f"*f = idm a by A1,A3,A11,A12,ALTCAT_3:def 4; end; theorem for C being concrete category for a,b being Object of C st <^a,b^> <> {} & <^b,a^> <> {} for f being Morphism of a,b st f is iso holds f" = (f qua Function)" proof let C be concrete category; let a,b be Object of C; assume that A1: <^a,b^> <> {} and A2: <^b,a^> <> {}; let f be Morphism of a,b; assume A3: f is iso; then A4: f"*f = idm a; A5: f"*(f qua Function) = f"*f by A1,A2,Th36; A6: dom (f") = the_carrier_of b by A2,Th35; A7: dom f = the_carrier_of a by A1,Th35; A8: f is one-to-one by A1,A2,A3,Th40; A9: rng f = the_carrier_of b by A1,A2,A3,Th40; idm a = id the_carrier_of a by Def10; hence thesis by A4,A5,A6,A7,A8,A9,FUNCT_1:41; end; scheme ConcreteCatEquivalence { A,B() -> para-functional semi-functional category, O1, O2(object) -> object, F1, F2(object,object,object) -> Function, A, B(object) -> Function }: A(), B() are_equivalent provided A1: ex F being covariant Functor of A(),B() st (for a being Object of A() holds F.a = O1(a)) & for a,b being Object of A() st <^a,b^> <> {} for f being Morphism of a,b holds F.f = F1(a,b,f) and A2: ex G being covariant Functor of B(),A() st (for a being Object of B() holds G.a = O2(a)) & for a,b being Object of B() st <^a,b^> <> {} for f being Morphism of a,b holds G.f = F2(a,b,f) and A3: for a, b being Object of A() st a = O2(O1(b)) holds A(b) in <^a, b^> & A(b)" in <^b,a^> & A(b) is one-to-one and A4: for a, b being Object of B() st b = O1(O2(a)) holds B(a) in <^a, b^> & B(a)" in <^b,a^> & B(a) is one-to-one and A5: for a,b being Object of A() st <^a,b^> <> {} for f being Morphism of a,b holds A(b)*F2(O1(a),O1(b),F1(a,b,f)) = f*A(a) and A6: for a,b being Object of B() st <^a,b^> <> {} for f being Morphism of a,b holds F1(O2(a),O2(b),F2(a,b,f))*B(a) = B(b)*f proof consider F being covariant Functor of A(), B() such that A7: for a being Object of A() holds F.a = O1(a) and A8: for a,b being Object of A() st <^a,b^> <> {} for f being Morphism of a,b holds F.f = F1(a,b,f) by A1; consider G being covariant Functor of B(),A() such that A9: for a being Object of B() holds G.a = O2(a) and A10: for a,b being Object of B() st <^a,b^> <> {} for f being Morphism of a,b holds G.f = F2(a,b,f) by A2; take F, G; set GF = G*F, I = id A(); A11: for a being Object of A() holds A(a) in <^GF.a, I.a^> & <^I.a, GF.a^> <> {} & for f being Morphism of GF.a, I.a st f = A(a) holds f is iso proof let a be Object of A(); A12: GF.a = G.(F.a) by FUNCTOR0:33 .= O2(F.a) by A9 .= O2(O1(a)) by A7; A13: I.a = a by FUNCTOR0:29; then A14: A(a) in <^GF.a, I.a^> by A3,A12; A15: A(a)" in <^I.a, GF.a^> by A3,A12,A13; A(a) is one-to-one by A3,A12; hence thesis by A14,A15,Th41; end; A16: for a,b being Object of A() st <^a,b^> <> {} for f being Morphism of a,b for g1 being Morphism of GF.a, I.a st g1 = A(a) for g2 being Morphism of GF.b, I.b st g2 = A(b) holds g2*GF.f = I.f*g1 proof let a,b be Object of A() such that A17: <^a,b^> <> {}; A18: A(a) in <^GF.a, I.a^> by A11; A19: A(b) in <^GF.b, I.b^> by A11; reconsider g2 = A(b) as Morphism of GF.b, I.b by A11; A20: <^GF.a, GF.b^> <> {} by A17,FUNCTOR0:def 18; A21: <^I.a, I.b^> <> {} by A17,FUNCTOR0:def 18; let f be Morphism of a,b; A22: GF.f = G.(F.f) by A17,FUNCTOR3:6; A23: O1(a) = F.a by A7; A24: O1(b) = F.b by A7; A25: F1(a,b,f) = F.f by A8,A17; <^F.a, F.b^> <> {} by A17,FUNCTOR0:def 18; then F2(O1(a),O1(b),F1(a,b,f)) = GF.f by A10,A22,A23,A24,A25; then g2*GF.f = A(b)*F2(O1(a),O1(b),F1(a,b,f)) by A19,A20,Th36 .= f*A(a) by A5,A17 .= I.f*A(a) by A17,FUNCTOR0:31; hence thesis by A18,A21,Th36; end; ex t being natural_equivalence of G*F, id A() st G*F, id A() are_naturally_equivalent & for a being Object of A() holds t!a = A(a) from NatEquivalenceLambda(A11,A16); hence G*F, id A() are_naturally_equivalent; set I = id B(), FG = F*G; A26: for a being Object of B() holds B(a) in <^I.a, FG.a^> & <^FG.a, I.a^> <> {} & for f being Morphism of I.a, FG.a st f = B(a) holds f is iso proof let a be Object of B(); A27: FG.a = F.(G.a) by FUNCTOR0:33 .= O1(G.a) by A7 .= O1(O2(a)) by A9; A28: I.a = a by FUNCTOR0:29; then A29: B(a) in <^I.a, FG.a^> by A4,A27; A30: B(a)" in <^FG.a, I.a^> by A4,A27,A28; B(a) is one-to-one by A4,A27; hence thesis by A29,A30,Th41; end; A31: for a,b being Object of B() st <^a,b^> <> {} for f being Morphism of a,b for g1 being Morphism of I.a, FG.a st g1 = B(a) for g2 being Morphism of I.b, FG.b st g2 = B(b) holds g2*I.f = FG.f*g1 proof let a,b be Object of B() such that A32: <^a,b^> <> {}; A33: B(a) in <^I.a, FG.a^> by A26; reconsider g1 = B(a) as Morphism of I.a, FG.a by A26; A34: B(b) in <^I.b, FG.b^> by A26; A35: <^FG.a, FG.b^> <> {} by A32,FUNCTOR0:def 18; A36: <^I.a, I.b^> <> {} by A32,FUNCTOR0:def 18; let f be Morphism of a,b; A37: FG.f = F.(G.f) by A32,FUNCTOR3:6; A38: O2(a) = G.a by A9; A39: O2(b) = G.b by A9; A40: F2(a,b,f) = G.f by A10,A32; <^G.a, G.b^> <> {} by A32,FUNCTOR0:def 18; then F1(O2(a),O2(b),F2(a,b,f)) = FG.f by A8,A37,A38,A39,A40; then FG.f*g1 = F1(O2(a),O2(b),F2(a,b,f))*B(a) by A33,A35,Th36 .= B(b)*f by A6,A32 .= B(b)*I.f by A32,FUNCTOR0:31; hence thesis by A34,A36,Th36; end; ex t being natural_equivalence of I, FG st I, FG are_naturally_equivalent & for a being Object of B() holds t!a = B(a) from NatEquivalenceLambda(A26,A31); hence thesis; end; begin :: Concretization of categories definition let C be category; defpred D[set, set] means $1 = $2`22; defpred P[set, set, Function] means ex fa,fb being Object of C, g being Morphism of fa, fb st fa = $1 & fb = $2 & <^fa, fb^> <> {} & for o being Object of C st <^o, fa^> <> {} for h being Morphism of o,fa holds $3.[h,[o,fa]] = [g*h,[o,fb]]; deffunc B(set) = Union disjoin the Arrows of C; A1: for a,b,c being Element of C, f,g being Function st P[a,b,f] & P[b,c,g] holds P[a,c,g*f] proof let a,b,c be Element of C, f,g be Function; given fa,fb being Object of C, ff being Morphism of fa, fb such that A2: fa = a and A3: fb = b and A4: <^fa, fb^> <> {} and A5: for o being Object of C st <^o, fa^> <> {} for h being Morphism of o,fa holds f.[h,[o,fa]] = [ff*h,[o,fb]]; given ga,gb being Object of C, gf being Morphism of ga, gb such that A6: ga = b and A7: gb = c and A8: <^ga, gb^> <> {} and A9: for o being Object of C st <^o, ga^> <> {} for h being Morphism of o,ga holds g.[h,[o,ga]] = [gf*h,[o,gb]]; reconsider gf as Morphism of fb,gb by A3,A6; take fa, gb, k = gf*ff; thus fa = a & gb = c & <^fa, gb^> <> {} by A2,A3,A4,A6,A7,A8,ALTCAT_1:def 2 ; let o be Object of C such that A10: <^o, fa^> <> {}; A11: <^o, fb^> <> {} by A4,A10,ALTCAT_1:def 2; let h be Morphism of o,fa; A12: f.[h,[o,fa]] = [ff*h,[o,fb]] by A5,A10; then [h,[o,fa]] in dom f by FUNCT_1:def 2; hence (g*f).[h,[o,fa]] = g.[ff*h,[o,fb]] by A12,FUNCT_1:13 .= [gf*(ff*h),[o,gb]] by A3,A6,A9,A11 .= [k*h, [o,gb]] by A3,A4,A6,A8,A10,ALTCAT_1:21; end; A13: for a being Element of C, X being set st for x being set holds x in X iff x in B(a) & D[a,x] holds P[a,a,id X] proof let a be Element of C, X being set such that A14: for x being set holds x in X iff x in Union disjoin the Arrows of C & D[a,x]; reconsider fa = a as Object of C; take fa, fa, g = idm fa; thus fa = a & fa = a & <^fa, fa^> <> {}; let o be Object of C such that A15: <^o, fa^> <> {}; let h be Morphism of o,fa; A16: [h,[o,fa]]`1 = h; A17: [h,[o,fa]]`2 = [o,fa]; A18: [h,[o,fa]]`22 = fa by MCART_1:85; dom the Arrows of C = [:the carrier of C, the carrier of C:] by PARTFUN1:def 2; then [o,fa] in dom the Arrows of C by ZFMISC_1:def 2; then [h,[o,fa]] in Union disjoin the Arrows of C by A15,A16,A17,CARD_3:22; then [h,[o,fa]] in X by A14,A18; hence (id X).[h,[o,fa]] = [h,[o,fa]] by FUNCT_1:18 .= [g*h,[o,fa]] by A15,ALTCAT_1:20; end; func Concretized C -> concrete strict category means : Def12: the carrier of it = the carrier of C & (for a being Object of it for x being set holds x in the_carrier_of a iff x in Union disjoin the Arrows of C & a = x`22) & for a,b being Element of C, f being Function holds f in (the Arrows of it).(a,b) iff f in Funcs(it-carrier_of a, it-carrier_of b) & ex fa,fb being Object of C, g being Morphism of fa, fb st fa = a & fb = b & <^fa, fb^> <> {} & for o being Object of C st <^o, fa^> <> {} for h being Morphism of o,fa holds f.[h,[o,fa]] = [g*h,[o,fb]]; uniqueness proof for C1,C2 being para-functional semi-functional category st the carrier of C1 = the carrier of C & (for a being Object of C1 for x being set holds x in the_carrier_of a iff x in B(a) & D[a,x]) & (for a,b being Element of C, f being Function holds f in (the Arrows of C1).(a,b) iff f in Funcs(C1-carrier_of a, C1-carrier_of b) & P[a,b,f]) & the carrier of C2 = the carrier of C & (for a being Object of C2 for x being set holds x in the_carrier_of a iff x in B(a) & D[a,x]) & (for a,b being Element of C, f being Function holds f in (the Arrows of C2).(a,b) iff f in Funcs(C2-carrier_of a, C2-carrier_of b) & P[a,b,f]) holds the AltCatStr of C1 = the AltCatStr of C2 from ConcreteCategoryUniq3; hence thesis; end; existence proof thus ex C9 being concrete strict category st the carrier of C9 = the carrier of C & (for a being Object of C9 for x being set holds x in the_carrier_of a iff x in B(a) & D[a,x]) & for a,b being Element of C, f being Function holds f in (the Arrows of C9).(a,b) iff f in Funcs(C9-carrier_of a, C9-carrier_of b) & P[a,b,f] from ConcreteCategoryEx(A1,A13); end; end; theorem Th43: for A being category, a being Object of A, x being set holds x in (Concretized A)-carrier_of a iff ex b being Object of A, f being Morphism of b,a st <^b,a^> <> {} & x = [f,[b,a]] proof let A be category, a be Object of A, x be set; set B = Concretized A; reconsider ac = a as Object of B by Def12; A1: x in the_carrier_of ac iff x in Union disjoin the Arrows of A & ac = x`22 by Def12; A2: dom the Arrows of A = [:the carrier of A, the carrier of A:] by PARTFUN1:def 2; hereby assume A3: x in B-carrier_of a; then A4: x`2 in dom the Arrows of A by A1,CARD_3:22; A5: x`1 in (the Arrows of A).(x`2) by A1,A3,CARD_3:22; A6: x = [x`1,x`2] by A1,A3,CARD_3:22; consider b,c being object such that A7: b in the carrier of A and c in the carrier of A and A8: x`2 = [b,c] by A4,ZFMISC_1:def 2; reconsider b as Object of A by A7; take b; reconsider f = x`1 as Morphism of b,a by A1,A3,A5,A6,A8,MCART_1:85; take f; thus <^b,a^> <> {} & x = [f,[b,a]] by A1,A3,A5,A6,A8,MCART_1:85; end; given b being Object of A, f being Morphism of b,a such that A9: <^b,a^> <> {} and A10: x = [f,[b,a]]; A11: x`1 = f by A10; A12: x`2 = [b,a] by A10; [b,a] in dom the Arrows of A by A2,ZFMISC_1:def 2; hence thesis by A1,A9,A10,A11,A12,CARD_3:22,MCART_1:85; end; registration let A be category; let a be Object of A; cluster (Concretized A)-carrier_of a -> non empty; coherence proof [idm a, [a,a]] in (Concretized A)-carrier_of a by Th43; hence thesis; end; end; theorem Th44: for A being category, a, b being Object of A st <^a,b^> <> {} for f being Morphism of a,b ex F being Function of (Concretized A)-carrier_of a, (Concretized A)-carrier_of b st F in (the Arrows of Concretized A).(a,b) & for c being Object of A, g being Morphism of c,a st <^c,a^> <> {} holds F.[g, [c,a]] = [f*g, [c,b]] proof let A be category, a, b be Object of A such that A1: <^a,b^> <> {}; set B = Concretized A; let f be Morphism of a,b; defpred P[object,object] means ex o being Object of A, g being Morphism of o, a st <^o,a^> <> {} & $1 = [g,[o,a]] & $2 = [f*g, [o,b]]; A2: for x being object st x in B-carrier_of a ex y being object st y in B-carrier_of b & P[x, y] proof let x be object; assume x in B-carrier_of a; then consider o being Object of A, g being Morphism of o,a such that A3: <^o,a^> <> {} and A4: x = [g,[o,a]] by Th43; take [f*g, [o,b]]; <^o,b^> <> {} by A1,A3,ALTCAT_1:def 2; hence thesis by A3,A4,Th43; end; consider F being Function such that A5: dom F = B-carrier_of a & rng F c= B-carrier_of b and A6: for x being object st x in B-carrier_of a holds P[x, F.x] from FUNCT_1:sch 6(A2); A7: F in Funcs(B-carrier_of a, B-carrier_of b) by A5,FUNCT_2:def 2; then reconsider F as Function of B-carrier_of a, B-carrier_of b by FUNCT_2:66 ; take F; ex fa,fb being Object of A, g being Morphism of fa, fb st fa = a & fb = b & <^fa, fb^> <> {} & for o being Object of A st <^o, fa^> <> {} for h being Morphism of o,fa holds F.[h,[o,fa]] = [g*h,[o,fb]] proof take fa = a, fb = b; reconsider g = f as Morphism of fa,fb; take g; thus fa = a & fb = b & <^fa, fb^> <> {} by A1; let o be Object of A such that A8: <^o, fa^> <> {}; let h be Morphism of o,fa; [h,[o,fa]] in B-carrier_of fa by A8,Th43; then consider c being Object of A, k being Morphism of c, fa such that <^c,fa^> <> {} and A9: [h,[o,fa]] = [k,[c,fa]] and A10: F.[h,[o,fa]] = [g*k, [c,fb]] by A6; [o,fa] = [c,fa] by A9,XTUPLE_0:1; then o = c by XTUPLE_0:1; hence thesis by A9,A10,XTUPLE_0:1; end; hence F in (the Arrows of B).(a,b) by A7,Def12; let c be Object of A, g be Morphism of c,a; assume <^c,a^> <> {}; then [g, [c,a]] in B-carrier_of a by Th43; then consider o being Object of A, h being Morphism of o, a such that <^o,a^> <> {} and A11: [g,[c,a]] = [h,[o,a]] and A12: F.[g,[c,a]] = [f*h, [o,b]] by A6; [c,a] = [o,a] by A11,XTUPLE_0:1; then c = o by XTUPLE_0:1; hence thesis by A11,A12,XTUPLE_0:1; end; theorem Th45: for A being category, a, b being Object of A for F1,F2 being Function st F1 in (the Arrows of Concretized A).(a,b) & F2 in (the Arrows of Concretized A).(a,b) & F1.[idm a, [a,a]] = F2.[idm a, [a,a]] holds F1 = F2 proof let A be category, a, b be Object of A; set B = Concretized A; let F1,F2 be Function such that A1: F1 in (the Arrows of Concretized A).(a,b) and A2: F2 in (the Arrows of Concretized A).(a,b) and A3: F1.[idm a, [a,a]] = F2.[idm a, [a,a]]; A4: F1 in Funcs(B-carrier_of a, B-carrier_of b) by A1,Def12; A5: F2 in Funcs(B-carrier_of a, B-carrier_of b) by A2,Def12; A6: dom F1 = B-carrier_of a by A4,FUNCT_2:92; A7: dom F2 = B-carrier_of a by A5,FUNCT_2:92; consider fa,fb being Object of A, f being Morphism of fa, fb such that A8: fa = a and A9: fb = b and A10: <^fa, fb^> <> {} and A11: for o being Object of A st <^o, fa^> <> {} for h being Morphism of o,fa holds F1.[h,[o,fa]] = [f*h,[o,fb]] by A1,Def12; consider ga,gb being Object of A, g being Morphism of ga, gb such that A12: ga = a and A13: gb = b and <^ga, gb^> <> {} and A14: for o being Object of A st <^o, ga^> <> {} for h being Morphism of o,ga holds F2.[h,[o,ga]] = [g*h,[o,gb]] by A2,Def12; reconsider f, g as Morphism of a, b by A8,A9,A12,A13; A15: F1.[idm a, [a,a]] = [f* idm a, [a,b]] by A8,A9,A11; A16: f* idm a = f by A8,A9,A10,ALTCAT_1:def 17; A17: g* idm a = g by A8,A9,A10,ALTCAT_1:def 17; F2.[idm a, [a,a]] = [g* idm a, [a,b]] by A12,A13,A14; then A18: f = g by A3,A15,A16,A17,XTUPLE_0:1; now let x be object; assume x in B-carrier_of a; then consider bb being Object of A, ff being Morphism of bb,a such that A19: <^bb,a^> <> {} and A20: x = [ff,[bb,a]] by Th43; thus F1.x = [f*ff, [bb,b]] by A8,A9,A11,A19,A20 .= F2.x by A12,A13,A14,A18,A19,A20; end; hence thesis by A6,A7; end; scheme NonUniqMSFunctionEx {I() -> set, A, B() -> ManySortedSet of I(), P[object,object,object]}: ex F being ManySortedFunction of A(), B() st for i,x being object st i in I() & x in A().i holds F.i.x in B().i & P[i,x,F.i.x] provided A1: for i,x being object st i in I() & x in A().i ex y being object st y in B().i & P[i,x,y]; defpred P[object,object] means ex f being Function of A().$1, B().$1 st $2 = f & for x being set st x in A().$1 holds f.x in B().$1 & P[$1,x,f.x]; A2: for i being object st i in I() ex y being object st P[i,y] proof let i be object such that A3: i in I(); defpred Q[object,object] means $2 in B().i & P[i,$1,$2]; A4: now let x be object; assume x in A().i; then ex y being object st y in B().i & P[i,x,y] by A1,A3; hence ex y being object st y in B().i & Q[x,y]; end; consider f being Function such that A5: dom f = A().i & rng f c= B().i and A6: for x being object st x in A().i holds Q[x, f.x] from FUNCT_1:sch 6(A4); reconsider f as Function of A().i, B().i by A5,FUNCT_2:2; take f, f; thus thesis by A6; end; consider F being Function such that A7: dom F = I() and A8: for i being object st i in I() holds P[i, F.i] from CLASSES1:sch 1(A2); reconsider F as ManySortedSet of I() by A7,PARTFUN1:def 2,RELAT_1:def 18; now let i be object; assume i in I(); then ex f being Function of A().i, B().i st F.i = f & for x being set st x in A().i holds f.x in B().i & P[i,x,f.x] by A8; hence F.i is Function of A().i, B().i; end; then reconsider F as ManySortedFunction of A(), B() by PBOOLE:def 15; take F; let i,x be object; assume i in I(); then ex f being Function of A().i, B().i st F.i = f & for x being set st x in A().i holds f.x in B().i & P[i,x,f.x] by A8; hence thesis; end; definition let A be category; set B = Concretized A; func Concretization A -> covariant strict Functor of A, Concretized A means : Def13: (for a being Object of A holds it.a = a) & for a, b being Object of A st <^a,b^> <> {} for f being Morphism of a,b holds it.f.[idm a, [a,a]] = [f, [a,b]]; uniqueness proof let F,G be covariant strict Functor of A,B such that A1: for a being Object of A holds F.a = a and A2: for a, b being Object of A st <^a,b^> <> {} for f being Morphism of a,b holds F.f.[idm a, [a,a]] = [f, [a,b]] and A3: for a being Object of A holds G.a = a and A4: for a, b being Object of A st <^a,b^> <> {} for f being Morphism of a,b holds G.f.[idm a, [a,a]] = [f, [a,b]]; A5: now let a be Object of A; thus F.a = a by A1 .= G.a by A3; end; now let a,b be Object of A; assume A6: <^a,b^> <> {}; let f be Morphism of a,b; A7: F.f.[idm a, [a,a]] = [f, [a,b]] by A2,A6; A8: G.f.[idm a, [a,a]] = [f, [a,b]] by A4,A6; A9: <^F.a, F.b^> <> {} by A6,FUNCTOR0:def 18; A10: F.a = a by A1; A11: F.b = b by A1; A12: G.a = a by A3; G.b = b by A3; hence F.f = G.f by A7,A8,A9,A10,A11,A12,Th45; end; hence thesis by A5,Th1; end; existence proof deffunc O(set) = $1; A13: the carrier of B = the carrier of A by Def12; A14: for a being Object of A holds O(a) is Object of B by Def12; reconsider AA = the Arrows of B as ManySortedSet of [:the carrier of A, the carrier of A:] by A13; defpred P[object,object,object] means ex a, b being Object of A, f being Morphism of a,b, G being Function of B-carrier_of a, B-carrier_of b st $1 = [a,b] & $2 = f & $3 = G & for c being Object of A, g being Morphism of c,a st <^c,a^> <> {} holds G.[g, [c,a]] = [f*g, [c,b]]; A15: for i,x being object st i in [:the carrier of A, the carrier of A:] & x in (the Arrows of A).i ex y being object st y in AA.i & P[i,x,y] proof let i,x be object; assume i in [:the carrier of A, the carrier of A:]; then consider a,b being object such that A16: a in the carrier of A and A17: b in the carrier of A and A18: i = [a,b] by ZFMISC_1:def 2; reconsider a, b as Object of A by A16,A17; assume A19: x in (the Arrows of A).i; then reconsider f = x as Morphism of a,b by A18; consider G being Function of B-carrier_of a, B-carrier_of b such that A20: G in AA.(a,b) and A21: for c being Object of A, g being Morphism of c,a st <^c,a^> <> {} holds G.[g, [c,a]] = [f*g, [c,b]] by A18,A19,Th44; take G; thus thesis by A18,A20,A21; end; consider F being ManySortedFunction of the Arrows of A, AA such that A22: for i,x being object st i in [:the carrier of A, the carrier of A:] & x in (the Arrows of A).i holds F.i.x in AA.i & P[i,x,F.i.x] from NonUniqMSFunctionEx(A15); deffunc F(set,set,set) = F.[$1,$2].$3; A23: for a,b being Object of A st <^a,b^> <> {} for f being Morphism of a,b holds F(a,b,f) in (the Arrows of B).(O(a), O(b)) proof let a,b be Object of A such that A24: <^a,b^> <> {}; let f be Morphism of a,b; [a,b] in [:the carrier of A, the carrier of A:] by ZFMISC_1:def 2; hence thesis by A22,A24; end; A25: for a,b,c being Object of A st <^a,b^> <> {} & <^b,c^> <> {} for f being Morphism of a,b, g being Morphism of b,c for a9,b9,c9 being Object of B st a9 = O(a) & b9 = O(b) & c9 = O(c) for f9 being Morphism of a9,b9, g9 being Morphism of b9,c9 st f9 = F(a,b,f) & g9 = F(b,c,g) holds F(a,c,g*f) = g9*f9 proof let a,b,c be Object of A such that A26: <^a,b^> <> {} and A27: <^b,c^> <> {}; let f be Morphism of a,b, g be Morphism of b,c; let a9,b9,c9 be Object of B such that A28: a9 = a and A29: b9 = b and A30: c9 = c; let f9 be Morphism of a9,b9, g9 be Morphism of b9,c9 such that A31: f9 = F.[a,b].f and A32: g9 = F.[b,c].g; A33: [a,b] in [:the carrier of A, the carrier of A:] by ZFMISC_1:def 2; then consider a1, b1 being Object of A, f1 being Morphism of a1,b1, G1 being Function of B-carrier_of a1, B-carrier_of b1 such that A34: [a,b] = [a1,b1] and A35: f = f1 and A36: F.[a,b].f = G1 and A37: for c being Object of A, g being Morphism of c,a1 st <^c,a1^> <> {} holds G1.[g, [c,a1]] = [f1*g, [c,b1]] by A22,A26; A38: [b,c] in [:the carrier of A, the carrier of A:] by ZFMISC_1:def 2; then consider b2, c2 being Object of A, g2 being Morphism of b2,c2, G2 being Function of B-carrier_of b2, B-carrier_of c2 such that A39: [b,c] = [b2,c2] and A40: g = g2 and A41: F.[b,c].g = G2 and A42: for c being Object of A, g being Morphism of c,b2 st <^c,b2^> <> {} holds G2.[g, [c,b2]] = [g2*g, [c,c2]] by A22,A27; A43: <^a,c^> <> {} by A26,A27,ALTCAT_1:def 2; [a,c] in [:the carrier of A, the carrier of A:] by ZFMISC_1:def 2; then consider a3, c3 being Object of A, h3 being Morphism of a3,c3, G3 being Function of B-carrier_of a3, B-carrier_of c3 such that A44: [a,c] = [a3,c3] and A45: g*f = h3 and A46: F.[a,c].(g*f) = G3 and A47: for c being Object of A, g being Morphism of c,a3 st <^c,a3^> <> {} holds G3.[g, [c,a3]] = [h3*g, [c,c3]] by A22,A43; A48: F.[a,b].f in <^a9,b9^> by A22,A26,A28,A29,A33; A49: F.[b,c].g in <^b9,c9^> by A22,A27,A29,A30,A38; A50: a = a1 by A34,XTUPLE_0:1; A51: b = b1 by A34,XTUPLE_0:1; A52: b = b2 by A39,XTUPLE_0:1; A53: c = c2 by A39,XTUPLE_0:1; A54: a = a3 by A44,XTUPLE_0:1; A55: c = c3 by A44,XTUPLE_0:1; reconsider G1 as Function of B-carrier_of a, B-carrier_of b by A34,A50, XTUPLE_0:1; reconsider G2 as Function of B-carrier_of b, B-carrier_of c by A39,A52, XTUPLE_0:1; reconsider G3 as Function of B-carrier_of a, B-carrier_of c by A44,A54, XTUPLE_0:1; now let x be Element of B-carrier_of a; consider bb being Object of A, ff being Morphism of bb,a such that A56: <^bb,a^> <> {} and A57: x = [ff,[bb,a]] by Th43; A58: <^bb,b^> <> {} by A26,A56,ALTCAT_1:def 2; thus G3.x = [g*f*ff, [bb,c]] by A45,A47,A54,A55,A56,A57 .= [g*(f*ff), [bb,c]] by A26,A27,A56,ALTCAT_1:21 .= G2.[f*ff, [bb,b]] by A40,A42,A52,A53,A58 .= G2.(G1.x) by A35,A37,A50,A51,A56,A57 .= (G2*G1).x by FUNCT_2:15; end; then G3 = G2*G1; hence thesis by A31,A32,A36,A41,A46,A48,A49,Th36; end; A59: for a being Object of A, a9 being Object of B st a9 = O(a) holds F(a,a,idm a) = idm a9 proof let a be Object of A, a9 be Object of B such that A60: a9 = a; [a,a] in [:the carrier of A, the carrier of A:] by ZFMISC_1:def 2; then consider c, b being Object of A, f being Morphism of c,b, G being Function of B-carrier_of c, B-carrier_of b such that A61: [a,a] = [c,b] and A62: idm a = f and A63: F.[a,a].idm a = G and A64: for d being Object of A, g being Morphism of d,c st <^d,c^> <> {} holds G.[g, [d,c]] = [f*g, [d,b]] by A22; A65: idm a9 = id the_carrier_of a9 by Def10; A66: a = c by A61,XTUPLE_0:1; A67: a = b by A61,XTUPLE_0:1; now let x be Element of the_carrier_of a9; consider bb being Object of A, ff being Morphism of bb,a such that A68: <^bb,a^> <> {} and A69: x = [ff,[bb,a]] by A60,Th43; thus G.x = [(idm a)*ff, [bb,a]] by A62,A64,A66,A67,A68,A69 .= x by A68,A69,ALTCAT_1:20 .= (id the_carrier_of a9).x; end; hence thesis by A60,A63,A65,A66,A67,FUNCT_2:63; end; consider FF being covariant strict Functor of A,B such that A70: for a being Object of A holds FF.a = O(a) and A71: for a,b being Object of A st <^a,b^> <> {} for f being Morphism of a,b holds FF.f = F(a,b,f) from CovariantFunctorLambda(A14,A23,A25,A59); take FF; thus for a being Object of A holds FF.a = a by A70; let a, b be Object of A such that A72: <^a,b^> <> {}; let f be Morphism of a,b; [a,b] in [:the carrier of A, the carrier of A:] by ZFMISC_1:def 2; then consider a9, b9 being Object of A, f9 being Morphism of a9,b9, G being Function of B-carrier_of a9, B-carrier_of b9 such that A73: [a,b] = [a9,b9] and A74: f = f9 and A75: F.[a,b].f = G and A76: for c being Object of A, g being Morphism of c,a9 st <^c,a9^> <> {} holds G.[g, [c,a9]] = [f9*g, [c,b9]] by A22,A72; A77: G = FF.f by A71,A72,A75; A78: a = a9 by A73,XTUPLE_0:1; b = b9 by A73,XTUPLE_0:1; hence FF.f.[idm a, [a,a]] = [f* idm a, [a,b]] by A74,A76,A77,A78 .= [f, [a,b]] by A72,ALTCAT_1:def 17; end; end; registration let A be category; cluster Concretization A -> bijective; coherence proof set B = Concretized A; set FF = Concretization A; deffunc O(set) = $1; A1: for a being Object of A holds FF.a = O(a) by Def13; deffunc F(Object of A, Object of A, Morphism of $1,$2) = FF.$3; A2: for a,b being Object of A st <^a,b^> <> {} for f being Morphism of a,b holds FF.f = F(a,b,f); A3: for a,b being Object of A st O(a) = O(b) holds a = b; A4: for a,b being Object of A st <^a,b^> <> {} for f,g being Morphism of a,b st F(a,b,f) = F(a,b,g) holds f = g proof let a,b be Object of A such that A5: <^a,b^> <> {}; let f,g be Morphism of a,b; A6: FF.f.[idm a, [a,a]] = [f, [a,b]] by A5,Def13; FF.g.[idm a, [a,a]] = [g, [a,b]] by A5,Def13; hence thesis by A6,XTUPLE_0:1; end; A7: for a,b being Object of B st <^a,b^> <> {} for f being Morphism of a,b ex c,d being Object of A, g being Morphism of c,d st a = O(c) & b = O(d) & <^c,d^> <> {} & f = F(c,d,g) proof let a,b be Object of B such that A8: <^a,b^> <> {}; reconsider c = a, d = b as Object of A by Def12; let f be Morphism of a,b; take c,d; consider fa,fb being Object of A, g being Morphism of fa, fb such that A9: fa = c and A10: fb = d and A11: <^fa, fb^> <> {} and A12: for o being Object of A st <^o, fa^> <> {} for h being Morphism of o,fa holds f.[h,[o,fa]] = [g*h,[o,fb]] by A8,Def12; reconsider g as Morphism of c,d by A9,A10; take g; A13: FF.g.[idm c, [c,c]] = [g, [c,d]] by A9,A10,A11,Def13; g* idm c = g by A9,A10,A11,ALTCAT_1:def 17; then A14: FF.g.[idm c, [c,c]] = f.[idm c, [c,c]] by A9,A10,A12,A13; A15: FF.c = a by Def13; FF.d = b by Def13; hence thesis by A8,A9,A10,A11,A14,A15,Th45; end; thus thesis from CoBijectiveSch(A1,A2,A3,A4,A7); end; end; ::$N Representation theorem for categories as concrete categories theorem for A being category holds A, Concretized A are_isomorphic proof let A be category; take Concretization A; thus thesis; end;