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 16 :: 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:8
.= 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:9
.= 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:12;
hence h opp in Hom ((c opp),d) by OPPCAT_1:4; :: 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:13;
then A7: opp k in Hom ((opp d),c) by OPPCAT_1:3;
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:10;
then cod ((F opp) /. x) = c opp by A9, Def5;
then A10: dom k = cod ((F opp) /. x) by A6, CAT_1:1;
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:18
.= (opp ((F /. x) opp)) * (opp k) by A9, Def5
.= (F /. x) * (opp k) by OPPCAT_1:6 ;
:: thesis: verum
end;
then h = opp k by A5, A7;
hence h opp = k by OPPCAT_1:7; :: 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:6;
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:1;
(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:16;
then k * ((F /. x) opp) = (oppF9 /. x) opp by OPPCAT_1:7;
hence k * ((F opp) /. x) = (oppF9 /. x) opp by A12, Def5
.= (opp (F9 /. x)) opp by A12, Def6
.= F9 /. x by OPPCAT_1:7 ;
:: 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 13 :: 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:8
.= (cods F9) /. x by A15, A17, Def4
.= cod (F9 /. x) by A17, Def4
.= dom ((F9 /. x) opp) by OPPCAT_1:8
.= 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:13;
then opp h in Hom (d,(opp (c opp))) by OPPCAT_1:3;
hence opp h in Hom (d,c) by OPPCAT_1:3; :: 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:12;
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:8;
then dom (F /. x) = c by OPPCAT_1:def 2;
then A24: cod k = dom (F /. x) by A20, CAT_1:1;
(F /. x) * k = F9 /. x by A22, A23;
then (k opp) * ((F /. x) opp) = (F9 /. x) opp by A24, OPPCAT_1:16;
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:6; :: 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:7;
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:8;
then dom (F /. x) = c by OPPCAT_1:def 2;
then A27: cod k = dom (F /. x) by A20, CAT_1:1;
(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:16
.= (F /. x) * k by OPPCAT_1:def 4 ;
:: thesis: verum