let I be set ; :: thesis: for C being Category
for c being Object of C
for F being Function of I,the carrier' of C holds
( c is_a_product_wrt F iff c opp is_a_coproduct_wrt F opp )

let C be Category; :: thesis: for c being Object of C
for F being Function of I,the carrier' of C holds
( c is_a_product_wrt F iff c opp is_a_coproduct_wrt F opp )

let c be Object of C; :: thesis: for F being Function of I,the carrier' of C holds
( c is_a_product_wrt F iff c opp is_a_coproduct_wrt F opp )

let F be Function of I,the carrier' of C; :: thesis: ( c is_a_product_wrt F iff c opp is_a_coproduct_wrt F opp )
thus ( c is_a_product_wrt F implies c opp is_a_coproduct_wrt F opp ) :: thesis: ( c opp is_a_coproduct_wrt F opp implies c is_a_product_wrt F )
proof
assume A1: c is_a_product_wrt F ; :: thesis: c opp is_a_coproduct_wrt F opp
then F is Projections_family of c,I by Def15;
hence F opp is Injections_family of c opp ,I by Th74; :: according to CAT_3:def 18 :: thesis: for d being Object of (C opp )
for F9 being Injections_family of d,I st doms (F opp ) = doms F9 holds
ex h being Morphism of (C opp ) st
( h in Hom (c opp ),d & ( for k being Morphism of (C opp ) st k in Hom (c opp ),d holds
( ( for x being set st x in I holds
k * ((F opp ) /. x) = F9 /. x ) iff h = k ) ) )

let d be Object of (C opp ); :: thesis: for F9 being Injections_family of d,I st doms (F opp ) = doms F9 holds
ex h being Morphism of (C opp ) st
( h in Hom (c opp ),d & ( for k being Morphism of (C opp ) st k in Hom (c opp ),d holds
( ( for x being set st x in I holds
k * ((F opp ) /. x) = F9 /. x ) iff h = k ) ) )

let F9 be Injections_family of d,I; :: thesis: ( doms (F opp ) = doms F9 implies ex h being Morphism of (C opp ) st
( h in Hom (c opp ),d & ( for k being Morphism of (C opp ) st k in Hom (c opp ),d holds
( ( for x being set st x in I holds
k * ((F opp ) /. x) = F9 /. x ) iff h = k ) ) ) )

assume A2: doms (F opp ) = doms F9 ; :: thesis: ex h being Morphism of (C opp ) st
( h in Hom (c opp ),d & ( for k being Morphism of (C opp ) st k in Hom (c opp ),d holds
( ( for x being set st x in I holds
k * ((F opp ) /. x) = F9 /. x ) iff h = k ) ) )

reconsider oppF9 = opp F9 as Projections_family of opp d,I by Th75;
now
let x be set ; :: thesis: ( x in I implies (cods F) /. x = (cods oppF9) /. x )
assume A3: x in I ; :: thesis: (cods F) /. x = (cods oppF9) /. x
hence (cods F) /. x = cod (F /. x) by Def4
.= dom ((F /. x) opp ) by OPPCAT_1:9
.= dom ((F opp ) /. x) by A3, Def5
.= (doms F9) /. x by A2, A3, Def3
.= dom (F9 /. x) by A3, Def3
.= cod (opp (F9 /. x)) by OPPCAT_1:10
.= cod (oppF9 /. x) by A3, Def6
.= (cods oppF9) /. x by A3, Def4 ;
:: thesis: verum
end;
then cods F = cods oppF9 by Th1;
then consider h being Morphism of C such that
A4: h in Hom (opp d),c and
A5: for k being Morphism of C st k in Hom (opp d),c holds
( ( for x being set st x in I holds
(F /. x) * k = oppF9 /. x ) iff h = k ) by A1, Def15;
take h opp ; :: thesis: ( h opp in Hom (c opp ),d & ( for k being Morphism of (C opp ) st k in Hom (c opp ),d holds
( ( for x being set st x in I holds
k * ((F opp ) /. x) = F9 /. x ) iff h opp = k ) ) )

h opp in Hom (c opp ),((opp d) opp ) by A4, OPPCAT_1:13;
hence h opp in Hom (c opp ),d by OPPCAT_1:5; :: thesis: for k being Morphism of (C opp ) st k in Hom (c opp ),d holds
( ( for x being set st x in I holds
k * ((F opp ) /. x) = F9 /. x ) iff h opp = k )

let k be Morphism of (C opp ); :: thesis: ( k in Hom (c opp ),d implies ( ( for x being set st x in I holds
k * ((F opp ) /. x) = F9 /. x ) iff h opp = k ) )

assume A6: k in Hom (c opp ),d ; :: thesis: ( ( for x being set st x in I holds
k * ((F opp ) /. x) = F9 /. x ) iff h opp = k )

then opp k in Hom (opp d),(opp (c opp )) by OPPCAT_1:14;
then A7: opp k in Hom (opp d),c by OPPCAT_1:4;
thus ( ( for x being set st x in I holds
k * ((F opp ) /. x) = F9 /. x ) implies h opp = k ) :: thesis: ( h opp = k implies for x being set st x in I holds
k * ((F opp ) /. x) = F9 /. x )
proof
assume A8: for x being set st x in I holds
k * ((F opp ) /. x) = F9 /. x ; :: thesis: h opp = k
now
let x be set ; :: thesis: ( x in I implies oppF9 /. x = (F /. x) * (opp k) )
assume A9: x in I ; :: thesis: oppF9 /. x = (F /. x) * (opp k)
F is Projections_family of c,I by A1, Def15;
then dom (F /. x) = c by A9, Th45;
then cod ((F /. x) opp ) = c opp by OPPCAT_1:11;
then cod ((F opp ) /. x) = c opp by A9, Def5;
then A10: dom k = cod ((F opp ) /. x) by A6, CAT_1:18;
opp (k * ((F opp ) /. x)) = opp (F9 /. x) by A8, A9;
hence oppF9 /. x = opp (k * ((F opp ) /. x)) by A9, Def6
.= (opp ((F opp ) /. x)) * (opp k) by A10, OPPCAT_1:19
.= (opp ((F /. x) opp )) * (opp k) by A9, Def5
.= (F /. x) * (opp k) by OPPCAT_1:7 ;
:: thesis: verum
end;
then h = opp k by A5, A7;
hence h opp = k by OPPCAT_1:8; :: thesis: verum
end;
assume h opp = k ; :: thesis: for x being set st x in I holds
k * ((F opp ) /. x) = F9 /. x

then A11: h = opp k by OPPCAT_1:7;
let x be set ; :: thesis: ( x in I implies k * ((F opp ) /. x) = F9 /. x )
assume A12: x in I ; :: thesis: k * ((F opp ) /. x) = F9 /. x
F is Projections_family of c,I by A1, Def15;
then dom (F /. x) = c by A12, Th45;
then A13: cod (opp k) = dom (F /. x) by A7, CAT_1:18;
(F /. x) * (opp k) = oppF9 /. x by A5, A7, A12, A11;
then ((opp k) opp ) * ((F /. x) opp ) = (oppF9 /. x) opp by A13, OPPCAT_1:17;
then k * ((F /. x) opp ) = (oppF9 /. x) opp by OPPCAT_1:8;
hence k * ((F opp ) /. x) = (oppF9 /. x) opp by A12, Def5
.= (opp (F9 /. x)) opp by A12, Def6
.= F9 /. x by OPPCAT_1:8 ;
:: thesis: verum
end;
assume A14: c opp is_a_coproduct_wrt F opp ; :: thesis: c is_a_product_wrt F
then F opp is Injections_family of c opp ,I by Def18;
hence F is Projections_family of c,I by Th74; :: according to CAT_3:def 15 :: thesis: for b being Object of C
for F9 being Projections_family of b,I st cods F = cods F9 holds
ex h being Morphism of C st
( h in Hom b,c & ( for k being Morphism of C st k in Hom b,c holds
( ( for x being set st x in I holds
(F /. x) * k = F9 /. x ) iff h = k ) ) )

let d be Object of C; :: thesis: for F9 being Projections_family of d,I st cods F = cods F9 holds
ex h being Morphism of C st
( h in Hom d,c & ( for k being Morphism of C st k in Hom d,c holds
( ( for x being set st x in I holds
(F /. x) * k = F9 /. x ) iff h = k ) ) )

let F9 be Projections_family of d,I; :: thesis: ( cods F = cods F9 implies ex h being Morphism of C st
( h in Hom d,c & ( for k being Morphism of C st k in Hom d,c holds
( ( for x being set st x in I holds
(F /. x) * k = F9 /. x ) iff h = k ) ) ) )

assume A15: cods F = cods F9 ; :: thesis: ex h being Morphism of C st
( h in Hom d,c & ( for k being Morphism of C st k in Hom d,c holds
( ( for x being set st x in I holds
(F /. x) * k = F9 /. x ) iff h = k ) ) )

A16: now
let x be set ; :: thesis: ( x in I implies (doms (F opp )) /. x = (doms (F9 opp )) /. x )
assume A17: x in I ; :: thesis: (doms (F opp )) /. x = (doms (F9 opp )) /. x
hence (doms (F opp )) /. x = dom ((F opp ) /. x) by Def3
.= dom ((F /. x) opp ) by A17, Def5
.= cod (F /. x) by OPPCAT_1:9
.= (cods F9) /. x by A15, A17, Def4
.= cod (F9 /. x) by A17, Def4
.= dom ((F9 /. x) opp ) by OPPCAT_1:9
.= dom ((F9 opp ) /. x) by A17, Def5
.= (doms (F9 opp )) /. x by A17, Def3 ;
:: thesis: verum
end;
reconsider F9opp = F9 opp as Injections_family of d opp ,I by Th74;
doms (F opp ) = doms F9opp by A16, Th1;
then consider h being Morphism of (C opp ) such that
A18: h in Hom (c opp ),(d opp ) and
A19: for k being Morphism of (C opp ) st k in Hom (c opp ),(d opp ) holds
( ( for x being set st x in I holds
k * ((F opp ) /. x) = F9opp /. x ) iff h = k ) by A14, Def18;
take opp h ; :: thesis: ( opp h in Hom d,c & ( for k being Morphism of C st k in Hom d,c holds
( ( for x being set st x in I holds
(F /. x) * k = F9 /. x ) iff opp h = k ) ) )

opp h in Hom (opp (d opp )),(opp (c opp )) by A18, OPPCAT_1:14;
then opp h in Hom d,(opp (c opp )) by OPPCAT_1:4;
hence opp h in Hom d,c by OPPCAT_1:4; :: thesis: for k being Morphism of C st k in Hom d,c holds
( ( for x being set st x in I holds
(F /. x) * k = F9 /. x ) iff opp h = k )

let k be Morphism of C; :: thesis: ( k in Hom d,c implies ( ( for x being set st x in I holds
(F /. x) * k = F9 /. x ) iff opp h = k ) )

assume A20: k in Hom d,c ; :: thesis: ( ( for x being set st x in I holds
(F /. x) * k = F9 /. x ) iff opp h = k )

then A21: k opp in Hom (c opp ),(d opp ) by OPPCAT_1:13;
thus ( ( for x being set st x in I holds
(F /. x) * k = F9 /. x ) implies opp h = k ) :: thesis: ( opp h = k implies for x being set st x in I holds
(F /. x) * k = F9 /. x )
proof
assume A22: for x being set st x in I holds
(F /. x) * k = F9 /. x ; :: thesis: opp h = k
now
let x be set ; :: thesis: ( x in I implies F9opp /. x = (k opp ) * ((F opp ) /. x) )
assume A23: x in I ; :: thesis: F9opp /. x = (k opp ) * ((F opp ) /. x)
F opp is Injections_family of c opp ,I by A14, Def18;
then cod ((F opp ) /. x) = c opp by A23, Th67;
then cod ((F /. x) opp ) = c opp by A23, Def5;
then dom (F /. x) = c opp by OPPCAT_1:9;
then dom (F /. x) = c by OPPCAT_1:def 2;
then A24: cod k = dom (F /. x) by A20, CAT_1:18;
(F /. x) * k = F9 /. x by A22, A23;
then (k opp ) * ((F /. x) opp ) = (F9 /. x) opp by A24, OPPCAT_1:17;
hence F9opp /. x = (k opp ) * ((F /. x) opp ) by A23, Def5
.= (k opp ) * ((F opp ) /. x) by A23, Def5 ;
:: thesis: verum
end;
then h = k opp by A19, A21;
hence opp h = k by OPPCAT_1:7; :: thesis: verum
end;
assume opp h = k ; :: thesis: for x being set st x in I holds
(F /. x) * k = F9 /. x

then A25: h = k opp by OPPCAT_1:8;
let x be set ; :: thesis: ( x in I implies (F /. x) * k = F9 /. x )
assume A26: x in I ; :: thesis: (F /. x) * k = F9 /. x
F opp is Injections_family of c opp ,I by A14, Def18;
then cod ((F opp ) /. x) = c opp by A26, Th67;
then cod ((F /. x) opp ) = c opp by A26, Def5;
then dom (F /. x) = c opp by OPPCAT_1:9;
then dom (F /. x) = c by OPPCAT_1:def 2;
then A27: cod k = dom (F /. x) by A20, CAT_1:18;
(k opp ) * ((F opp ) /. x) = F9opp /. x by A19, A21, A26, A25;
then (k opp ) * ((F opp ) /. x) = (F9 /. x) opp by A26, Def5;
hence F9 /. x = (k opp ) * ((F opp ) /. x) by OPPCAT_1:def 4
.= (k opp ) * ((F /. x) opp ) by A26, Def5
.= ((F /. x) * k) opp by A27, OPPCAT_1:17
.= (F /. x) * k by OPPCAT_1:def 4 ;
:: thesis: verum