let X be non empty categorial set ; :: thesis: for Y being non empty set st ( for A, B, C being Element of X
for F being Functor of A,B
for G being Functor of B,C st F in Y & G in Y holds
G * F in Y ) & ( for A being Element of X holds id A in Y ) holds
ex C being strict Categorial Category st
( the carrier of C = X & ( for A, B being Element of X
for F being Functor of A,B holds
( [[A,B],F] is Morphism of C iff F in Y ) ) )

let Y be non empty set ; :: thesis: ( ( for A, B, C being Element of X
for F being Functor of A,B
for G being Functor of B,C st F in Y & G in Y holds
G * F in Y ) & ( for A being Element of X holds id A in Y ) implies ex C being strict Categorial Category st
( the carrier of C = X & ( for A, B being Element of X
for F being Functor of A,B holds
( [[A,B],F] is Morphism of C iff F in Y ) ) ) )

assume that
A1: for A, B, C being Element of X
for F being Functor of A,B
for G being Functor of B,C st F in Y & G in Y holds
G * F in Y and
A2: for A being Element of X holds id A in Y ; :: thesis: ex C being strict Categorial Category st
( the carrier of C = X & ( for A, B being Element of X
for F being Functor of A,B holds
( [[A,B],F] is Morphism of C iff F in Y ) ) )

set B = { b where b is Element of Y : b is Function } ;
set a = the Element of X;
id the Element of X in Y by A2;
then id the Element of X in { b where b is Element of Y : b is Function } ;
then reconsider B = { b where b is Element of Y : b is Function } as non empty set ;
B is functional
proof
let x be object ; :: according to FUNCT_1:def 13 :: thesis: ( not x in B or x is set )
assume x in B ; :: thesis: x is set
then ex b being Element of Y st
( x = b & b is Function ) ;
hence x is set ; :: thesis: verum
end;
then reconsider B = B as non empty functional set ;
reconsider A = X as non empty categorial set ;
defpred S1[ Element of A, Element of A, set ] means $3 is Functor of $1,$2;
deffunc H1( Function, Function) -> set = $1 * $2;
A3: for a, b, c being Element of A
for f, g being Element of B st S1[a,b,f] & S1[b,c,g] holds
( H1(g,f) in B & S1[a,c,H1(g,f)] )
proof
let a, b, c be Element of A; :: thesis: for f, g being Element of B st S1[a,b,f] & S1[b,c,g] holds
( H1(g,f) in B & S1[a,c,H1(g,f)] )

let f, g be Element of B; :: thesis: ( S1[a,b,f] & S1[b,c,g] implies ( H1(g,f) in B & S1[a,c,H1(g,f)] ) )
assume that
A4: S1[a,b,f] and
A5: S1[b,c,g] ; :: thesis: ( H1(g,f) in B & S1[a,c,H1(g,f)] )
reconsider f = f as Functor of a,b by A4;
reconsider g = g as Functor of b,c by A5;
A6: f in B ;
A7: g in B ;
A8: ex b being Element of Y st
( f = b & b is Function ) by A6;
ex b being Element of Y st
( g = b & b is Function ) by A7;
then g * f in Y by A1, A8;
hence ( H1(g,f) in B & S1[a,c,H1(g,f)] ) ; :: thesis: verum
end;
A9: for a being Element of A ex f being Element of B st
( S1[a,a,f] & ( for b being Element of A
for g being Element of B holds
( ( S1[a,b,g] implies H1(g,f) = g ) & ( S1[b,a,g] implies H1(f,g) = g ) ) ) )
proof
let a be Element of A; :: thesis: ex f being Element of B st
( S1[a,a,f] & ( for b being Element of A
for g being Element of B holds
( ( S1[a,b,g] implies H1(g,f) = g ) & ( S1[b,a,g] implies H1(f,g) = g ) ) ) )

reconsider f = id a as Element of Y by A2;
f in B ;
then reconsider f = f as Element of B ;
take f ; :: thesis: ( S1[a,a,f] & ( for b being Element of A
for g being Element of B holds
( ( S1[a,b,g] implies H1(g,f) = g ) & ( S1[b,a,g] implies H1(f,g) = g ) ) ) )

thus S1[a,a,f] ; :: thesis: for b being Element of A
for g being Element of B holds
( ( S1[a,b,g] implies H1(g,f) = g ) & ( S1[b,a,g] implies H1(f,g) = g ) )

let b be Element of A; :: thesis: for g being Element of B holds
( ( S1[a,b,g] implies H1(g,f) = g ) & ( S1[b,a,g] implies H1(f,g) = g ) )

let g be Element of B; :: thesis: ( ( S1[a,b,g] implies H1(g,f) = g ) & ( S1[b,a,g] implies H1(f,g) = g ) )
thus ( S1[a,b,g] implies g * f = g ) by FUNCT_2:17; :: thesis: ( S1[b,a,g] implies H1(f,g) = g )
assume S1[b,a,g] ; :: thesis: H1(f,g) = g
then reconsider G = g as Functor of b,a ;
(id a) * G = G by FUNCT_2:17;
hence H1(f,g) = g ; :: thesis: verum
end;
A10: for a, b, c, d being Element of A
for f, g, h being Element of B st S1[a,b,f] & S1[b,c,g] & S1[c,d,h] holds
H1(h,H1(g,f)) = H1(H1(h,g),f) by RELAT_1:36;
consider C being strict with_triple-like_morphisms Category such that
A11: ( the carrier of C = A & ( for a, b being Element of A
for f being Element of B st S1[a,b,f] holds
[[a,b],f] is Morphism of C ) & ( for m being Morphism of C ex a, b being Element of A ex f being Element of B st
( m = [[a,b],f] & S1[a,b,f] ) ) & ( for m1, m2 being Morphism of C
for a1, a2, a3 being Element of A
for f1, f2 being Element of B st m1 = [[a1,a2],f1] & m2 = [[a2,a3],f2] holds
m2 (*) m1 = [[a1,a3],H1(f2,f1)] ) ) from CAT_5:sch 1(A3, A9, A10);
C is Categorial
proof
thus the carrier of C is categorial by A11; :: according to CAT_5:def 6 :: thesis: ( ( for a being Object of C
for A being Category st a = A holds
id a = [[A,A],(id A)] ) & ( for m being Morphism of C
for A, B being Category st A = dom m & B = cod m holds
ex F being Functor of A,B st m = [[A,B],F] ) & ( for m1, m2 being Morphism of C
for A, B, C being Category
for F being Functor of A,B
for G being Functor of B,C st m1 = [[A,B],F] & m2 = [[B,C],G] holds
m2 (*) m1 = [[A,C],(G * F)] ) )

hereby :: thesis: ( ( for m being Morphism of C
for A, B being Category st A = dom m & B = cod m holds
ex F being Functor of A,B st m = [[A,B],F] ) & ( for m1, m2 being Morphism of C
for A, B, C being Category
for F being Functor of A,B
for G being Functor of B,C st m1 = [[A,B],F] & m2 = [[B,C],G] holds
m2 (*) m1 = [[A,C],(G * F)] ) )
let a be Object of C; :: thesis: for D being Category st a = D holds
id a = [[D,D],(id D)]

let D be Category; :: thesis: ( a = D implies id a = [[D,D],(id D)] )
assume A12: a = D ; :: thesis: id a = [[D,D],(id D)]
then id D in Y by A2, A11;
then id D in B ;
then reconsider f = id D as Element of B ;
reconsider x = a as Element of A by A11;
reconsider F = [[x,x],f] as Morphism of C by A11, A12;
consider b, c being Element of A, g being Element of B such that
A13: id a = [[b,c],g] and
A14: S1[b,c,g] by A11;
A15: dom (id a) = (id a) `11 by Th2;
A16: (id a) `11 = b by A13, MCART_1:85;
cod F = F `12 by Th2
.= x by MCART_1:85 ;
then F = (id a) (*) F by CAT_1:21
.= [[x,c],(g * (id the carrier' of D))] by A11, A13, A15, A16
.= [[x,c],g] by A12, A14, A15, A16, FUNCT_2:17 ;
hence id a = [[D,D],(id D)] by A12, A13, A15, MCART_1:85; :: thesis: verum
end;
hereby :: thesis: for m1, m2 being Morphism of C
for A, B, C being Category
for F being Functor of A,B
for G being Functor of B,C st m1 = [[A,B],F] & m2 = [[B,C],G] holds
m2 (*) m1 = [[A,C],(G * F)]
let m be Morphism of C; :: thesis: for A, B being Category st A = dom m & B = cod m holds
ex F being Functor of A,B st m = [[A,B],F]

consider a, b being Element of A, f being Element of B such that
A17: m = [[a,b],f] and
A18: S1[a,b,f] by A11;
A19: dom m = m `11 by Th2;
A20: cod m = m `12 by Th2;
A21: dom m = a by A17, A19, MCART_1:85;
cod m = b by A17, A20, MCART_1:85;
hence for A, B being Category st A = dom m & B = cod m holds
ex F being Functor of A,B st m = [[A,B],F] by A17, A18, A21; :: thesis: verum
end;
let m1, m2 be Morphism of C; :: thesis: for A, B, C being Category
for F being Functor of A,B
for G being Functor of B,C st m1 = [[A,B],F] & m2 = [[B,C],G] holds
m2 (*) m1 = [[A,C],(G * F)]

consider a1, b1 being Element of A, f1 being Element of B such that
A22: m1 = [[a1,b1],f1] and
S1[a1,b1,f1] by A11;
consider a2, b2 being Element of A, f2 being Element of B such that
A23: m2 = [[a2,b2],f2] and
S1[a2,b2,f2] by A11;
let A, B, C be Category; :: thesis: for F being Functor of A,B
for G being Functor of B,C st m1 = [[A,B],F] & m2 = [[B,C],G] holds
m2 (*) m1 = [[A,C],(G * F)]

let F be Functor of A,B; :: thesis: for G being Functor of B,C st m1 = [[A,B],F] & m2 = [[B,C],G] holds
m2 (*) m1 = [[A,C],(G * F)]

let G be Functor of B,C; :: thesis: ( m1 = [[A,B],F] & m2 = [[B,C],G] implies m2 (*) m1 = [[A,C],(G * F)] )
assume that
A24: m1 = [[A,B],F] and
A25: m2 = [[B,C],G] ; :: thesis: m2 (*) m1 = [[A,C],(G * F)]
A26: [A,B] = [a1,b1] by A22, A24, XTUPLE_0:1;
A27: [B,C] = [a2,b2] by A23, A25, XTUPLE_0:1;
A28: f1 = F by A22, A24, XTUPLE_0:1;
A29: f2 = G by A23, A25, XTUPLE_0:1;
A30: A = a1 by A26, XTUPLE_0:1;
A31: B = b1 by A26, XTUPLE_0:1;
C = b2 by A27, XTUPLE_0:1;
hence m2 (*) m1 = [[A,C],(G * F)] by A11, A22, A25, A28, A29, A30, A31; :: thesis: verum
end;
then reconsider C = C as strict Categorial Category ;
take C ; :: thesis: ( the carrier of C = X & ( for A, B being Element of X
for F being Functor of A,B holds
( [[A,B],F] is Morphism of C iff F in Y ) ) )

thus the carrier of C = X by A11; :: thesis: for A, B being Element of X
for F being Functor of A,B holds
( [[A,B],F] is Morphism of C iff F in Y )

let A9, B9 be Element of X; :: thesis: for F being Functor of A9,B9 holds
( [[A9,B9],F] is Morphism of C iff F in Y )

let F be Functor of A9,B9; :: thesis: ( [[A9,B9],F] is Morphism of C iff F in Y )
hereby :: thesis: ( F in Y implies [[A9,B9],F] is Morphism of C )
assume [[A9,B9],F] is Morphism of C ; :: thesis: F in Y
then reconsider m = [[A9,B9],F] as Morphism of C ;
consider a, b being Element of A, f being Element of B such that
A32: m = [[a,b],f] and
S1[a,b,f] by A11;
m `2 = f by A32;
then F in B ;
then ex b being Element of Y st
( F = b & b is Function ) ;
hence F in Y ; :: thesis: verum
end;
assume F in Y ; :: thesis: [[A9,B9],F] is Morphism of C
then F in B ;
hence [[A9,B9],F] is Morphism of C by A11; :: thesis: verum