let C be Category; :: thesis: for O being non empty Subset of the carrier of C
for M being non empty set
for d, c being Function of M,O
for p being PartFunc of [:M,M:],M
for i being Function of O,M st CatStr(# O,M,d,c,p,i #) is_full_subcategory_of C holds
( M = union { (Hom a,b) where a, b is Object of C : ( a in O & b in O ) } & d = the Source of C | M & c = the Target of C | M & p = the Comp of C || M & i = the Id of C | O )

let O be non empty Subset of the carrier of C; :: thesis: for M being non empty set
for d, c being Function of M,O
for p being PartFunc of [:M,M:],M
for i being Function of O,M st CatStr(# O,M,d,c,p,i #) is_full_subcategory_of C holds
( M = union { (Hom a,b) where a, b is Object of C : ( a in O & b in O ) } & d = the Source of C | M & c = the Target of C | M & p = the Comp of C || M & i = the Id of C | O )

let M be non empty set ; :: thesis: for d, c being Function of M,O
for p being PartFunc of [:M,M:],M
for i being Function of O,M st CatStr(# O,M,d,c,p,i #) is_full_subcategory_of C holds
( M = union { (Hom a,b) where a, b is Object of C : ( a in O & b in O ) } & d = the Source of C | M & c = the Target of C | M & p = the Comp of C || M & i = the Id of C | O )

let d, c be Function of M,O; :: thesis: for p being PartFunc of [:M,M:],M
for i being Function of O,M st CatStr(# O,M,d,c,p,i #) is_full_subcategory_of C holds
( M = union { (Hom a,b) where a, b is Object of C : ( a in O & b in O ) } & d = the Source of C | M & c = the Target of C | M & p = the Comp of C || M & i = the Id of C | O )

let p be PartFunc of [:M,M:],M; :: thesis: for i being Function of O,M st CatStr(# O,M,d,c,p,i #) is_full_subcategory_of C holds
( M = union { (Hom a,b) where a, b is Object of C : ( a in O & b in O ) } & d = the Source of C | M & c = the Target of C | M & p = the Comp of C || M & i = the Id of C | O )

let i be Function of O,M; :: thesis: ( CatStr(# O,M,d,c,p,i #) is_full_subcategory_of C implies ( M = union { (Hom a,b) where a, b is Object of C : ( a in O & b in O ) } & d = the Source of C | M & c = the Target of C | M & p = the Comp of C || M & i = the Id of C | O ) )
set H = { (Hom a,b) where a, b is Object of C : ( a in O & b in O ) } ;
set B = CatStr(# O,M,d,c,p,i #);
assume that
A1: CatStr(# O,M,d,c,p,i #) is Subcategory of C and
A2: for a, b being Object of CatStr(# O,M,d,c,p,i #)
for a', b' being Object of C st a = a' & b = b' holds
Hom a,b = Hom a',b' ; :: according to CAT_2:def 6 :: thesis: ( M = union { (Hom a,b) where a, b is Object of C : ( a in O & b in O ) } & d = the Source of C | M & c = the Target of C | M & p = the Comp of C || M & i = the Id of C | O )
A3: for f being Morphism of CatStr(# O,M,d,c,p,i #) holds
( d . f = the Source of C . f & c . f = the Target of C . f )
proof
let f be Morphism of CatStr(# O,M,d,c,p,i #); :: thesis: ( d . f = the Source of C . f & c . f = the Target of C . f )
reconsider f' = f as Morphism of C by A1, Th14;
( dom f = dom f' & cod f = cod f' & dom f = the Source of CatStr(# O,M,d,c,p,i #) . f & dom f' = the Source of C . f' & cod f = the Target of CatStr(# O,M,d,c,p,i #) . f & cod f' = the Target of C . f' ) by A1, Th15;
hence ( d . f = the Source of C . f & c . f = the Target of C . f ) ; :: thesis: verum
end;
now
let x be set ; :: thesis: ( ( x in M implies x in union { (Hom a,b) where a, b is Object of C : ( a in O & b in O ) } ) & ( x in union { (Hom a,b) where a, b is Object of C : ( a in O & b in O ) } implies x in M ) )
thus ( x in M implies x in union { (Hom a,b) where a, b is Object of C : ( a in O & b in O ) } ) :: thesis: ( x in union { (Hom a,b) where a, b is Object of C : ( a in O & b in O ) } implies x in M )
proof
assume x in M ; :: thesis: x in union { (Hom a,b) where a, b is Object of C : ( a in O & b in O ) }
then reconsider f = x as Morphism of CatStr(# O,M,d,c,p,i #) ;
reconsider f' = f as Morphism of C by A1, Th14;
set a' = dom f';
set b' = cod f';
( the Source of CatStr(# O,M,d,c,p,i #) . f = the Source of C . f' & the Target of CatStr(# O,M,d,c,p,i #) . f = the Target of C . f' ) by A3;
then ( f in Hom (dom f'),(cod f') & Hom (dom f'),(cod f') in { (Hom a,b) where a, b is Object of C : ( a in O & b in O ) } ) ;
hence x in union { (Hom a,b) where a, b is Object of C : ( a in O & b in O ) } by TARSKI:def 4; :: thesis: verum
end;
assume x in union { (Hom a,b) where a, b is Object of C : ( a in O & b in O ) } ; :: thesis: x in M
then consider X being set such that
A4: x in X and
A5: X in { (Hom a,b) where a, b is Object of C : ( a in O & b in O ) } by TARSKI:def 4;
consider a', b' being Object of C such that
A6: X = Hom a',b' and
A7: ( a' in O & b' in O ) by A5;
reconsider a = a', b = b' as Object of CatStr(# O,M,d,c,p,i #) by A7;
Hom a,b = Hom a',b' by A2;
hence x in M by A4, A6; :: thesis: verum
end;
hence A8: M = union { (Hom a,b) where a, b is Object of C : ( a in O & b in O ) } by TARSKI:2; :: thesis: ( d = the Source of C | M & c = the Target of C | M & p = the Comp of C || M & i = the Id of C | O )
then reconsider d' = the Source of C | M, c' = the Target of C | M as Function of M,O by Th29;
now
let f be Element of M; :: thesis: d . f = d' . f
now
thus d . f = the Source of C . f by A3; :: thesis: ( f in M & f in dom the Source of C )
thus f in M ; :: thesis: f in dom the Source of C
f is Morphism of C by A1, Th14;
then f in the carrier' of C ;
hence f in dom the Source of C by FUNCT_2:def 1; :: thesis: verum
end;
hence d . f = d' . f by FUNCT_1:72; :: thesis: verum
end;
hence d = the Source of C | M by FUNCT_2:113; :: thesis: ( c = the Target of C | M & p = the Comp of C || M & i = the Id of C | O )
now
let f be Element of M; :: thesis: c . f = c' . f
now
thus c . f = the Target of C . f by A3; :: thesis: ( f in M & f in dom the Target of C )
thus f in M ; :: thesis: f in dom the Target of C
f is Morphism of C by A1, Th14;
then f in the carrier' of C ;
hence f in dom the Target of C by FUNCT_2:def 1; :: thesis: verum
end;
hence c . f = c' . f by FUNCT_1:72; :: thesis: verum
end;
hence c = the Target of C | M by FUNCT_2:113; :: thesis: ( p = the Comp of C || M & i = the Id of C | O )
set p' = the Comp of C || M;
now
A9: dom p c= [:M,M:] by RELAT_1:def 18;
A10: dom (the Comp of C || M) = (dom the Comp of C) /\ [:M,M:] by RELAT_1:90;
A11: dom (the Comp of C || M) c= dom p
proof
let x be set ; :: according to TARSKI:def 3 :: thesis: ( not x in dom (the Comp of C || M) or x in dom p )
assume A12: x in dom (the Comp of C || M) ; :: thesis: x in dom p
then x in [:M,M:] by A10, XBOOLE_0:def 4;
then consider g, f being Element of M such that
A13: x = [g,f] by DOMAIN_1:9;
reconsider f = f, g = g as Morphism of CatStr(# O,M,d,c,p,i #) ;
reconsider f' = f, g' = g as Morphism of C by A1, Th14;
[g,f] in dom the Comp of C by A10, A12, A13, XBOOLE_0:def 4;
then ( cod f = cod f' & dom g = dom g' & dom g' = cod f' ) by A1, Th15, CAT_1:40;
hence x in dom p by A1, A13, CAT_1:40; :: thesis: verum
end;
the Comp of CatStr(# O,M,d,c,p,i #) c= the Comp of C by A1, Def4;
then dom p c= dom the Comp of C by GRFUNC_1:8;
then A14: dom p c= dom (the Comp of C || M) by A9, A10, XBOOLE_1:19;
hence dom p = dom (the Comp of C || M) by A11, XBOOLE_0:def 10; :: thesis: for x being set st x in dom p holds
p . x = (the Comp of C || M) . x

let x be set ; :: thesis: ( x in dom p implies p . x = (the Comp of C || M) . x )
assume A15: x in dom p ; :: thesis: p . x = (the Comp of C || M) . x
then consider g, f being Element of M such that
A16: x = [g,f] by A9, DOMAIN_1:9;
reconsider f = f, g = g as Morphism of CatStr(# O,M,d,c,p,i #) ;
reconsider f' = f, g' = g as Morphism of C by A1, Th14;
A17: ( cod f = cod f' & dom g = dom g' & dom g = cod f ) by A1, A15, A16, Th15, CAT_1:40;
p . x = p . g,f by A16;
hence p . x = g * f by A1, A17, CAT_1:41
.= g' * f' by A1, A17, Th17
.= the Comp of C . g',f' by A17, CAT_1:41
.= (the Comp of C || M) . x by A14, A15, A16, FUNCT_1:70 ;
:: thesis: verum
end;
hence p = the Comp of C || M by FUNCT_1:9; :: thesis: i = the Id of C | O
reconsider i' = the Id of C | O as Function of O,M by A8, Th29;
now
let a be Element of O; :: thesis: i . a = i' . a
now
reconsider a' = a as Object of C ;
reconsider b = a as Object of CatStr(# O,M,d,c,p,i #) ;
( id b = id a' & id b = the Id of CatStr(# O,M,d,c,p,i #) . b & id a' = the Id of C . a' ) by A1, Def4;
hence i . a = the Id of C . a ; :: thesis: ( a in O & a in dom the Id of C )
thus a in O ; :: thesis: a in dom the Id of C
a in the carrier of C ;
hence a in dom the Id of C by FUNCT_2:def 1; :: thesis: verum
end;
hence i . a = i' . a by FUNCT_1:72; :: thesis: verum
end;
hence i = the Id of C | O by FUNCT_2:113; :: thesis: verum