reconsider O = commaObjs (F,G), M = commaMorphs (F,G) as non empty set ;
defpred S1[ Element of commaObjs (F,G), set ] means $2 = [[$1,$1],[(id ($1 `11)),(id ($1 `12))]];
deffunc H3( Element of commaMorphs (F,G)) -> Element of commaObjs (F,G) = $1 `12 ;
deffunc H4( Element of commaMorphs (F,G)) -> Element of commaObjs (F,G) = $1 `11 ;
consider D9 being Function of (commaMorphs (F,G)),(commaObjs (F,G)) such that
A2: for k being Element of commaMorphs (F,G) holds D9 . k = H4(k) from FUNCT_2:sch 4();
A3: commaMorphs (F,G) = { [[o1,o2],[g,h]] where g is Morphism of C, h is Morphism of D, o1, o2 is Element of commaObjs (F,G) : ( dom g = o1 `11 & cod g = o2 `11 & dom h = o1 `12 & cod h = o2 `12 & (o2 `2) * (F . g) = (G . h) * (o1 `2) ) } by A1, Def6;
A4: for o being Element of commaObjs (F,G) ex k being Element of commaMorphs (F,G) st S1[o,k]
proof
let o be Element of commaObjs (F,G); :: thesis: ex k being Element of commaMorphs (F,G) st S1[o,k]
A5: ( dom (id (o `12)) = o `12 & cod (id (o `12)) = o `12 ) by CAT_1:44;
( dom (o `2) = F . (o `11) & F . (id (o `11)) = id (F . (o `11)) ) by A1, Th2, CAT_1:108;
then A6: (o `2) * (F . (id (o `11))) = o `2 by CAT_1:47;
( cod (o `2) = G . (o `12) & G . (id (o `12)) = id (G . (o `12)) ) by A1, Th2, CAT_1:108;
then A7: (G . (id (o `12))) * (o `2) = o `2 by CAT_1:46;
( dom (id (o `11)) = o `11 & cod (id (o `11)) = o `11 ) by CAT_1:44;
then [[o,o],[(id (o `11)),(id (o `12))]] in commaMorphs (F,G) by A3, A5, A6, A7;
hence ex k being Element of commaMorphs (F,G) st S1[o,k] ; :: thesis: verum
end;
consider I being Function of (commaObjs (F,G)),(commaMorphs (F,G)) such that
A8: for o being Element of commaObjs (F,G) holds S1[o,I . o] from FUNCT_2:sch 3(A4);
reconsider I = I as Function of O,M ;
reconsider a9 = commaComp (F,G) as PartFunc of [:M,M:],M ;
consider C9 being Function of (commaMorphs (F,G)),(commaObjs (F,G)) such that
A9: for k being Element of commaMorphs (F,G) holds C9 . k = H3(k) from FUNCT_2:sch 4();
reconsider D9 = D9, C9 = C9 as Function of M,O ;
set FG = CatStr(# O,M,D9,C9,a9,I #);
A10: dom the Comp of CatStr(# O,M,D9,C9,a9,I #) = { [k1,k2] where k1, k2 is Element of commaMorphs (F,G) : k1 `11 = k2 `12 } by Def8;
A11: for f, g being Morphism of CatStr(# O,M,D9,C9,a9,I #)
for k1, k2 being Element of commaMorphs (F,G) st f = k1 & g = k2 & dom g = cod f holds
g * f = [[(k1 `11),(k2 `12)],[((k2 `21) * (k1 `21)),((k2 `22) * (k1 `22))]]
proof
let f, g be Morphism of CatStr(# O,M,D9,C9,a9,I #); :: thesis: for k1, k2 being Element of commaMorphs (F,G) st f = k1 & g = k2 & dom g = cod f holds
g * f = [[(k1 `11),(k2 `12)],[((k2 `21) * (k1 `21)),((k2 `22) * (k1 `22))]]

let k1, k2 be Element of commaMorphs (F,G); :: thesis: ( f = k1 & g = k2 & dom g = cod f implies g * f = [[(k1 `11),(k2 `12)],[((k2 `21) * (k1 `21)),((k2 `22) * (k1 `22))]] )
assume that
A12: ( f = k1 & g = k2 ) and
A13: dom g = cod f ; :: thesis: g * f = [[(k1 `11),(k2 `12)],[((k2 `21) * (k1 `21)),((k2 `22) * (k1 `22))]]
A14: ( dom g = k2 `11 & cod f = k1 `12 ) by A2, A9, A12;
then A15: [k2,k1] in dom a9 by A10, A13;
then A16: a9 . (k2,k1) = k2 * k1 by Def8;
g * f = a9 . (g,f) by A12, A15, CAT_1:def 4;
hence g * f = [[(k1 `11),(k2 `12)],[((k2 `21) * (k1 `21)),((k2 `22) * (k1 `22))]] by A1, A12, A13, A14, A16, Def7; :: thesis: verum
end;
A17: for b being Object of CatStr(# O,M,D9,C9,a9,I #) holds
( dom (id b) = b & cod (id b) = b & ( for f being Morphism of CatStr(# O,M,D9,C9,a9,I #) st cod f = b holds
(id b) * f = f ) & ( for g being Morphism of CatStr(# O,M,D9,C9,a9,I #) st dom g = b holds
g * (id b) = g ) )
proof
let b be Object of CatStr(# O,M,D9,C9,a9,I #); :: thesis: ( dom (id b) = b & cod (id b) = b & ( for f being Morphism of CatStr(# O,M,D9,C9,a9,I #) st cod f = b holds
(id b) * f = f ) & ( for g being Morphism of CatStr(# O,M,D9,C9,a9,I #) st dom g = b holds
g * (id b) = g ) )

reconsider b9 = b as Element of commaObjs (F,G) ;
reconsider i = id b as Element of commaMorphs (F,G) ;
A18: I . b9 = [[b9,b9],[(id (b9 `11)),(id (b9 `12))]] by A8;
then A19: (I . b9) `11 = b9 by MCART_1:89;
A20: (I . b9) `12 = b9 by A18, MCART_1:89;
hence ( dom (id b) = b & cod (id b) = b ) by A2, A9, A19; :: thesis: ( ( for f being Morphism of CatStr(# O,M,D9,C9,a9,I #) st cod f = b holds
(id b) * f = f ) & ( for g being Morphism of CatStr(# O,M,D9,C9,a9,I #) st dom g = b holds
g * (id b) = g ) )

A21: ( (I . b9) `21 = id (b9 `11) & (I . b9) `22 = id (b9 `12) ) by A18, MCART_1:89;
thus for f being Morphism of CatStr(# O,M,D9,C9,a9,I #) st cod f = b holds
(id b) * f = f :: thesis: for g being Morphism of CatStr(# O,M,D9,C9,a9,I #) st dom g = b holds
g * (id b) = g
proof
let f be Morphism of CatStr(# O,M,D9,C9,a9,I #); :: thesis: ( cod f = b implies (id b) * f = f )
reconsider f9 = f as Element of commaMorphs (F,G) ;
assume A22: cod f = b ; :: thesis: (id b) * f = f
then A23: b = f `12 by A9;
cod (f9 `22) = (f9 `12) `12 by A1, Th3;
then A24: (id (b9 `12)) * (f9 `22) = f9 `22 by A23, CAT_1:46;
cod (f9 `21) = (f9 `12) `11 by A1, Th3;
then A25: (id (b9 `11)) * (f9 `21) = f9 `21 by A23, CAT_1:46;
cod f = dom (id b) by A2, A19, A22;
hence (id b) * f = [[(f9 `11),(i `12)],[((i `21) * (f9 `21)),((i `22) * (f9 `22))]] by A11
.= f by A1, A20, A21, A23, A25, A24, Th3 ;
:: thesis: verum
end;
let g be Morphism of CatStr(# O,M,D9,C9,a9,I #); :: thesis: ( dom g = b implies g * (id b) = g )
reconsider g9 = g as Element of commaMorphs (F,G) ;
assume A26: dom g = b ; :: thesis: g * (id b) = g
then A27: b = g `11 by A2;
dom (g9 `22) = (g9 `11) `12 by A1, Th3;
then A28: (g9 `22) * (id (b9 `12)) = g9 `22 by A27, CAT_1:47;
dom (g9 `21) = (g9 `11) `11 by A1, Th3;
then A29: (g9 `21) * (id (b9 `11)) = g9 `21 by A27, CAT_1:47;
dom g = cod (id b) by A9, A20, A26;
hence g * (id b) = [[(i `11),(g9 `12)],[((g9 `21) * (i `21)),((g9 `22) * (i `22))]] by A11
.= g by A1, A19, A21, A27, A29, A28, Th3 ;
:: thesis: verum
end;
A30: for f, g being Morphism of CatStr(# O,M,D9,C9,a9,I #) st dom g = cod f holds
( dom (g * f) = dom f & cod (g * f) = cod g )
proof
let f, g be Morphism of CatStr(# O,M,D9,C9,a9,I #); :: thesis: ( dom g = cod f implies ( dom (g * f) = dom f & cod (g * f) = cod g ) )
assume A31: dom g = cod f ; :: thesis: ( dom (g * f) = dom f & cod (g * f) = cod g )
reconsider f1 = f, g1 = g as Element of commaMorphs (F,G) ;
A32: ( dom g = g1 `11 & cod f = f1 `12 ) by A2, A9;
then [g1,f1] in dom a9 by A10, A31;
then A33: ( g * f = a9 . (g,f) & a9 . (g1,f1) = g1 * f1 ) by Def8, CAT_1:def 4;
A34: ( dom f = f `11 & cod g = g `12 ) by A2, A9;
A35: ( dom (g * f) = (g * f) `11 & cod (g * f) = (g * f) `12 ) by A2, A9;
g1 * f1 = [[(f1 `11),(g1 `12)],[((g1 `21) * (f1 `21)),((g1 `22) * (f1 `22))]] by A1, A31, A32, Def7;
hence ( dom (g * f) = dom f & cod (g * f) = cod g ) by A35, A34, A33, MCART_1:89; :: thesis: verum
end;
A36: for f, g, h being Morphism of CatStr(# O,M,D9,C9,a9,I #) st dom h = cod g & dom g = cod f holds
h * (g * f) = (h * g) * f
proof
let f, g, h be Morphism of CatStr(# O,M,D9,C9,a9,I #); :: thesis: ( dom h = cod g & dom g = cod f implies h * (g * f) = (h * g) * f )
reconsider f1 = f, g1 = g, h1 = h, gf = g * f, hg = h * g as Element of commaMorphs (F,G) ;
assume that
A37: dom h = cod g and
A38: dom g = cod f ; :: thesis: h * (g * f) = (h * g) * f
A39: ( dom g = g `11 & cod g = g `12 ) by A2, A9;
dom (h * g) = dom g by A30, A37;
then A40: (h * g) * f = [[(f `11),(hg `12)],[((hg `21) * (f1 `21)),((hg `22) * (f1 `22))]] by A11, A38;
A41: ( dom h = h `11 & cod f = f `12 ) by A2, A9;
cod (g * f) = cod g by A30, A38;
then A42: h * (g * f) = [[(gf `11),(h `12)],[((h1 `21) * (gf `21)),((h1 `22) * (gf `22))]] by A11, A37;
A43: ( dom (h1 `21) = (h1 `11) `11 & cod (f1 `21) = (f1 `12) `11 ) by A1, Th3;
A44: ( dom (h1 `22) = (h1 `11) `12 & cod (f1 `22) = (f1 `12) `12 ) by A1, Th3;
A45: ( dom (g1 `22) = (g1 `11) `12 & cod (g1 `22) = (g1 `12) `12 ) by A1, Th3;
A46: h * g = [[(g `11),(h `12)],[((h1 `21) * (g1 `21)),((h1 `22) * (g1 `22))]] by A11, A37;
then A47: ( (h * g) `12 = h `12 & hg `21 = (h1 `21) * (g1 `21) ) by MCART_1:89;
A48: g * f = [[(f `11),(g `12)],[((g1 `21) * (f1 `21)),((g1 `22) * (f1 `22))]] by A11, A38;
then A49: ( (g * f) `11 = f `11 & gf `21 = (g1 `21) * (f1 `21) ) by MCART_1:89;
A50: gf `22 = (g1 `22) * (f1 `22) by A48, MCART_1:89;
A51: hg `22 = (h1 `22) * (g1 `22) by A46, MCART_1:89;
( dom (g1 `21) = (g1 `11) `11 & cod (g1 `21) = (g1 `12) `11 ) by A1, Th3;
then ((h1 `21) * (g1 `21)) * (f1 `21) = (h1 `21) * ((g1 `21) * (f1 `21)) by A37, A38, A39, A43, A41, CAT_1:43;
hence h * (g * f) = (h * g) * f by A37, A38, A39, A41, A45, A44, A42, A40, A47, A49, A51, A50, CAT_1:43; :: thesis: verum
end;
for f, g being Morphism of CatStr(# O,M,D9,C9,a9,I #) holds
( [g,f] in dom the Comp of CatStr(# O,M,D9,C9,a9,I #) iff dom g = cod f )
proof
let f, g be Morphism of CatStr(# O,M,D9,C9,a9,I #); :: thesis: ( [g,f] in dom the Comp of CatStr(# O,M,D9,C9,a9,I #) iff dom g = cod f )
reconsider f1 = f, g1 = g as Element of commaMorphs (F,G) ;
A52: ( dom g = g1 `11 & cod f = f1 `12 ) by A2, A9;
thus ( [g,f] in dom the Comp of CatStr(# O,M,D9,C9,a9,I #) implies dom g = cod f ) :: thesis: ( dom g = cod f implies [g,f] in dom the Comp of CatStr(# O,M,D9,C9,a9,I #) )
proof
assume [g,f] in dom the Comp of CatStr(# O,M,D9,C9,a9,I #) ; :: thesis: dom g = cod f
then consider k1, k2 being Element of commaMorphs (F,G) such that
A53: [g,f] = [k1,k2] and
A54: k1 `11 = k2 `12 by A10;
g = k1 by A53, ZFMISC_1:33;
hence dom g = cod f by A52, A53, A54, ZFMISC_1:33; :: thesis: verum
end;
thus ( dom g = cod f implies [g,f] in dom the Comp of CatStr(# O,M,D9,C9,a9,I #) ) by A10, A52; :: thesis: verum
end;
then reconsider FG = CatStr(# O,M,D9,C9,a9,I #) as strict Category by A30, A36, A17, CAT_1:29;
take FG ; :: thesis: ( the carrier of FG = commaObjs (F,G) & the carrier' of FG = commaMorphs (F,G) & ( for k being Element of commaMorphs (F,G) holds the Source of FG . k = k `11 ) & ( for k being Element of commaMorphs (F,G) holds the Target of FG . k = k `12 ) & ( for o being Element of commaObjs (F,G) holds the Id of FG . o = [[o,o],[(id (o `11)),(id (o `12))]] ) & the Comp of FG = commaComp (F,G) )
thus ( the carrier of FG = commaObjs (F,G) & the carrier' of FG = commaMorphs (F,G) & ( for k being Element of commaMorphs (F,G) holds the Source of FG . k = k `11 ) & ( for k being Element of commaMorphs (F,G) holds the Target of FG . k = k `12 ) & ( for o being Element of commaObjs (F,G) holds the Id of FG . o = [[o,o],[(id (o `11)),(id (o `12))]] ) & the Comp of FG = commaComp (F,G) ) by A2, A9, A8; :: thesis: verum