:: CAT_4 semantic presentation :: Showing IDV graph ... (Click the Palm Trees again to close it)
definition
let C be
Category;
let a,
b be
Object of
C;
canceled;redefine pred a,
b are_isomorphic means :: CAT_4:def 2
(
Hom a,
b <> {} &
Hom b,
a <> {} & ex
f being
Morphism of
a,
b ex
f' being
Morphism of
b,
a st
(
f * f' = id b &
f' * f = id a ) );
compatibility
( a,b are_isomorphic iff ( Hom a,b <> {} & Hom b,a <> {} & ex f being Morphism of a,b ex f' being Morphism of b,a st
( f * f' = id b & f' * f = id a ) ) )
by CAT_1:81;
end;
:: deftheorem CAT_4:def 1 :
canceled;
:: deftheorem defines are_isomorphic CAT_4:def 2 :
:: deftheorem defines with_finite_product CAT_4:def 3 :
theorem Th1: :: CAT_4:1 :: Showing IDV graph ... (Click the Palm Tree again to close it)
definition
attr c1 is
strict;
struct ProdCatStr -> CatStr ;
aggr ProdCatStr(#
Objects,
Morphisms,
Dom,
Cod,
Comp,
Id,
TerminalObj,
CatProd,
Proj1,
Proj2 #)
-> ProdCatStr ;
sel TerminalObj c1 -> Element of the
Objects of
c1;
sel CatProd c1 -> Function of
[:the Objects of c1,the Objects of c1:],the
Objects of
c1;
sel Proj1 c1 -> Function of
[:the Objects of c1,the Objects of c1:],the
Morphisms of
c1;
sel Proj2 c1 -> Function of
[:the Objects of c1,the Objects of c1:],the
Morphisms of
c1;
end;
:: deftheorem defines [1] CAT_4:def 4 :
:: deftheorem defines [x] CAT_4:def 5 :
:: deftheorem defines pr1 CAT_4:def 6 :
:: deftheorem defines pr2 CAT_4:def 7 :
definition
let o,
m be
set ;
func c1Cat o,
m -> strict ProdCatStr equals :: CAT_4:def 8
ProdCatStr(#
{o},
{m},
({m} --> o),
({m} --> o),
(m,m .--> m),
({o} --> m),
(Extract o),
(o,o :-> o),
(o,o :-> m),
(o,o :-> m) #);
correctness
coherence
ProdCatStr(# {o},{m},({m} --> o),({m} --> o),(m,m .--> m),({o} --> m),(Extract o),(o,o :-> o),(o,o :-> m),(o,o :-> m) #) is strict ProdCatStr ;
;
end;
:: deftheorem defines c1Cat CAT_4:def 8 :
for
o,
m being
set holds
c1Cat o,
m = ProdCatStr(#
{o},
{m},
({m} --> o),
({m} --> o),
(m,m .--> m),
({o} --> m),
(Extract o),
(o,o :-> o),
(o,o :-> m),
(o,o :-> m) #);
theorem :: CAT_4:2 :: Showing IDV graph ... (Click the Palm Tree again to close it)
for
o,
m being
set holds
CatStr(# the
Objects of
(c1Cat o,m),the
Morphisms of
(c1Cat o,m),the
Dom of
(c1Cat o,m),the
Cod of
(c1Cat o,m),the
Comp of
(c1Cat o,m),the
Id of
(c1Cat o,m) #)
= 1Cat o,
m ;
Lm1:
for o, m being set holds c1Cat o,m is Category-like
theorem Th3: :: CAT_4:3 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th4: :: CAT_4:4 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th5: :: CAT_4:5 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th6: :: CAT_4:6 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th7: :: CAT_4:7 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem :: CAT_4:8 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem :: CAT_4:9 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th10: :: CAT_4:10 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th11: :: CAT_4:11 :: Showing IDV graph ... (Click the Palm Tree again to close it)
:: deftheorem Def9 defines Cartesian CAT_4:def 9 :
theorem Th12: :: CAT_4:12 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th13: :: CAT_4:13 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th14: :: CAT_4:14 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th15: :: CAT_4:15 :: Showing IDV graph ... (Click the Palm Tree again to close it)
:: deftheorem defines term CAT_4:def 10 :
theorem Th16: :: CAT_4:16 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem :: CAT_4:17 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem :: CAT_4:18 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th19: :: CAT_4:19 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th20: :: CAT_4:20 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th21: :: CAT_4:21 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th22: :: CAT_4:22 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem :: CAT_4:23 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem :: CAT_4:24 :: Showing IDV graph ... (Click the Palm Tree again to close it)
definition
let C be
Cartesian_category;
let a,
b,
c be
Object of
C;
let f be
Morphism of
c,
a;
let g be
Morphism of
c,
b;
assume A1:
(
Hom c,
a <> {} &
Hom c,
b <> {} )
;
func <:f,g:> -> Morphism of
c,
a [x] b means :
Def11:
:: CAT_4:def 11
(
(pr1 a,b) * it = f &
(pr2 a,b) * it = g );
existence
ex b1 being Morphism of c,a [x] b st
( (pr1 a,b) * b1 = f & (pr2 a,b) * b1 = g )
uniqueness
for b1, b2 being Morphism of c,a [x] b st (pr1 a,b) * b1 = f & (pr2 a,b) * b1 = g & (pr1 a,b) * b2 = f & (pr2 a,b) * b2 = g holds
b1 = b2
end;
:: deftheorem Def11 defines <: CAT_4:def 11 :
for
C being
Cartesian_category for
a,
b,
c being
Object of
C for
f being
Morphism of
c,
a for
g being
Morphism of
c,
b st
Hom c,
a <> {} &
Hom c,
b <> {} holds
for
b7 being
Morphism of
c,
a [x] b holds
(
b7 = <:f,g:> iff (
(pr1 a,b) * b7 = f &
(pr2 a,b) * b7 = g ) );
theorem Th25: :: CAT_4:25 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th26: :: CAT_4:26 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th27: :: CAT_4:27 :: Showing IDV graph ... (Click the Palm Tree again to close it)
for
C being
Cartesian_category for
c,
a,
b,
d being
Object of
C for
f being
Morphism of
c,
a for
g being
Morphism of
c,
b for
h being
Morphism of
d,
c st
Hom c,
a <> {} &
Hom c,
b <> {} &
Hom d,
c <> {} holds
<:(f * h),(g * h):> = <:f,g:> * h
theorem Th28: :: CAT_4:28 :: Showing IDV graph ... (Click the Palm Tree again to close it)
for
C being
Cartesian_category for
c,
a,
b being
Object of
C for
f,
k being
Morphism of
c,
a for
g,
h being
Morphism of
c,
b st
Hom c,
a <> {} &
Hom c,
b <> {} &
<:f,g:> = <:k,h:> holds
(
f = k &
g = h )
theorem :: CAT_4:29 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th30: :: CAT_4:30 :: Showing IDV graph ... (Click the Palm Tree again to close it)
definition
let C be
Cartesian_category;
let a be
Object of
C;
func lambda a -> Morphism of
([1] C) [x] a,
a equals :: CAT_4:def 12
pr2 ([1] C),
a;
correctness
coherence
pr2 ([1] C),a is Morphism of ([1] C) [x] a,a;
;
func lambda' a -> Morphism of
a,
([1] C) [x] a equals :: CAT_4:def 13
<:(term a),(id a):>;
correctness
coherence
<:(term a),(id a):> is Morphism of a,([1] C) [x] a;
;
func rho a -> Morphism of
a [x] ([1] C),
a equals :: CAT_4:def 14
pr1 a,
([1] C);
correctness
coherence
pr1 a,([1] C) is Morphism of a [x] ([1] C),a;
;
func rho' a -> Morphism of
a,
a [x] ([1] C) equals :: CAT_4:def 15
<:(id a),(term a):>;
correctness
coherence
<:(id a),(term a):> is Morphism of a,a [x] ([1] C);
;
end;
:: deftheorem defines lambda CAT_4:def 12 :
:: deftheorem defines lambda' CAT_4:def 13 :
:: deftheorem defines rho CAT_4:def 14 :
:: deftheorem defines rho' CAT_4:def 15 :
theorem Th31: :: CAT_4:31 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem :: CAT_4:32 :: Showing IDV graph ... (Click the Palm Tree again to close it)
definition
let C be
Cartesian_category;
let a,
b be
Object of
C;
func Switch a,
b -> Morphism of
a [x] b,
b [x] a equals :: CAT_4:def 16
<:(pr2 a,b),(pr1 a,b):>;
correctness
coherence
<:(pr2 a,b),(pr1 a,b):> is Morphism of a [x] b,b [x] a;
;
end;
:: deftheorem defines Switch CAT_4:def 16 :
theorem Th33: :: CAT_4:33 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th34: :: CAT_4:34 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem :: CAT_4:35 :: Showing IDV graph ... (Click the Palm Tree again to close it)
:: deftheorem defines Delta CAT_4:def 17 :
theorem :: CAT_4:36 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem :: CAT_4:37 :: Showing IDV graph ... (Click the Palm Tree again to close it)
definition
let C be
Cartesian_category;
let a,
b,
c be
Object of
C;
func Alpha a,
b,
c -> Morphism of
(a [x] b) [x] c,
a [x] (b [x] c) equals :: CAT_4:def 18
<:((pr1 a,b) * (pr1 (a [x] b),c)),<:((pr2 a,b) * (pr1 (a [x] b),c)),(pr2 (a [x] b),c):>:>;
correctness
coherence
<:((pr1 a,b) * (pr1 (a [x] b),c)),<:((pr2 a,b) * (pr1 (a [x] b),c)),(pr2 (a [x] b),c):>:> is Morphism of (a [x] b) [x] c,a [x] (b [x] c);
;
func Alpha' a,
b,
c -> Morphism of
a [x] (b [x] c),
(a [x] b) [x] c equals :: CAT_4:def 19
<:<:(pr1 a,(b [x] c)),((pr1 b,c) * (pr2 a,(b [x] c))):>,((pr2 b,c) * (pr2 a,(b [x] c))):>;
correctness
coherence
<:<:(pr1 a,(b [x] c)),((pr1 b,c) * (pr2 a,(b [x] c))):>,((pr2 b,c) * (pr2 a,(b [x] c))):> is Morphism of a [x] (b [x] c),(a [x] b) [x] c;
;
end;
:: deftheorem defines Alpha CAT_4:def 18 :
for
C being
Cartesian_category for
a,
b,
c being
Object of
C holds
Alpha a,
b,
c = <:((pr1 a,b) * (pr1 (a [x] b),c)),<:((pr2 a,b) * (pr1 (a [x] b),c)),(pr2 (a [x] b),c):>:>;
:: deftheorem defines Alpha' CAT_4:def 19 :
for
C being
Cartesian_category for
a,
b,
c being
Object of
C holds
Alpha' a,
b,
c = <:<:(pr1 a,(b [x] c)),((pr1 b,c) * (pr2 a,(b [x] c))):>,((pr2 b,c) * (pr2 a,(b [x] c))):>;
theorem Th38: :: CAT_4:38 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th39: :: CAT_4:39 :: Showing IDV graph ... (Click the Palm Tree again to close it)
for
C being
Cartesian_category for
a,
b,
c being
Object of
C holds
(
(Alpha a,b,c) * (Alpha' a,b,c) = id (a [x] (b [x] c)) &
(Alpha' a,b,c) * (Alpha a,b,c) = id ((a [x] b) [x] c) )
theorem :: CAT_4:40 :: Showing IDV graph ... (Click the Palm Tree again to close it)
definition
let C be
Cartesian_category;
let a,
b,
c,
d be
Object of
C;
let f be
Morphism of
a,
b;
let g be
Morphism of
c,
d;
func f [x] g -> Morphism of
a [x] c,
b [x] d equals :: CAT_4:def 20
<:(f * (pr1 a,c)),(g * (pr2 a,c)):>;
correctness
coherence
<:(f * (pr1 a,c)),(g * (pr2 a,c)):> is Morphism of a [x] c,b [x] d;
;
end;
:: deftheorem defines [x] CAT_4:def 20 :
theorem :: CAT_4:41 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem :: CAT_4:42 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th43: :: CAT_4:43 :: Showing IDV graph ... (Click the Palm Tree again to close it)
for
C being
Cartesian_category for
a,
b,
c,
d,
e being
Object of
C for
f being
Morphism of
a,
b for
h being
Morphism of
c,
d for
g being
Morphism of
e,
a for
k being
Morphism of
e,
c st
Hom a,
b <> {} &
Hom c,
d <> {} &
Hom e,
a <> {} &
Hom e,
c <> {} holds
(f [x] h) * <:g,k:> = <:(f * g),(h * k):>
theorem :: CAT_4:44 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem :: CAT_4:45 :: Showing IDV graph ... (Click the Palm Tree again to close it)
for
C being
Cartesian_category for
a,
b,
c,
d,
e,
s being
Object of
C for
f being
Morphism of
a,
b for
h being
Morphism of
c,
d for
g being
Morphism of
e,
a for
k being
Morphism of
s,
c st
Hom a,
b <> {} &
Hom c,
d <> {} &
Hom e,
a <> {} &
Hom s,
c <> {} holds
(f [x] h) * (g [x] k) = (f * g) [x] (h * k)
:: deftheorem defines with_finite_coproduct CAT_4:def 21 :
theorem Th46: :: CAT_4:46 :: Showing IDV graph ... (Click the Palm Tree again to close it)
definition
attr c1 is
strict;
struct CoprodCatStr -> CatStr ;
aggr CoprodCatStr(#
Objects,
Morphisms,
Dom,
Cod,
Comp,
Id,
Initial,
Coproduct,
Incl1,
Incl2 #)
-> CoprodCatStr ;
sel Initial c1 -> Element of the
Objects of
c1;
sel Coproduct c1 -> Function of
[:the Objects of c1,the Objects of c1:],the
Objects of
c1;
sel Incl1 c1 -> Function of
[:the Objects of c1,the Objects of c1:],the
Morphisms of
c1;
sel Incl2 c1 -> Function of
[:the Objects of c1,the Objects of c1:],the
Morphisms of
c1;
end;
:: deftheorem defines [0] CAT_4:def 22 :
:: deftheorem defines + CAT_4:def 23 :
:: deftheorem defines in1 CAT_4:def 24 :
:: deftheorem defines in2 CAT_4:def 25 :
definition
let o,
m be
set ;
func c1Cat* o,
m -> strict CoprodCatStr equals :: CAT_4:def 26
CoprodCatStr(#
{o},
{m},
({m} --> o),
({m} --> o),
(m,m .--> m),
({o} --> m),
(Extract o),
(o,o :-> o),
(o,o :-> m),
(o,o :-> m) #);
correctness
coherence
CoprodCatStr(# {o},{m},({m} --> o),({m} --> o),(m,m .--> m),({o} --> m),(Extract o),(o,o :-> o),(o,o :-> m),(o,o :-> m) #) is strict CoprodCatStr ;
;
end;
:: deftheorem defines c1Cat* CAT_4:def 26 :
for
o,
m being
set holds
c1Cat* o,
m = CoprodCatStr(#
{o},
{m},
({m} --> o),
({m} --> o),
(m,m .--> m),
({o} --> m),
(Extract o),
(o,o :-> o),
(o,o :-> m),
(o,o :-> m) #);
theorem :: CAT_4:47 :: Showing IDV graph ... (Click the Palm Tree again to close it)
for
o,
m being
set holds
CatStr(# the
Objects of
(c1Cat* o,m),the
Morphisms of
(c1Cat* o,m),the
Dom of
(c1Cat* o,m),the
Cod of
(c1Cat* o,m),the
Comp of
(c1Cat* o,m),the
Id of
(c1Cat* o,m) #)
= 1Cat o,
m ;
Lm2:
for o, m being set holds c1Cat* o,m is Category-like
theorem Th48: :: CAT_4:48 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th49: :: CAT_4:49 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th50: :: CAT_4:50 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th51: :: CAT_4:51 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th52: :: CAT_4:52 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem :: CAT_4:53 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem :: CAT_4:54 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th55: :: CAT_4:55 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th56: :: CAT_4:56 :: Showing IDV graph ... (Click the Palm Tree again to close it)
:: deftheorem Def27 defines Cocartesian CAT_4:def 27 :
theorem Th57: :: CAT_4:57 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th58: :: CAT_4:58 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th59: :: CAT_4:59 :: Showing IDV graph ... (Click the Palm Tree again to close it)
:: deftheorem defines init CAT_4:def 28 :
theorem Th60: :: CAT_4:60 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th61: :: CAT_4:61 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem :: CAT_4:62 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem :: CAT_4:63 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th64: :: CAT_4:64 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th65: :: CAT_4:65 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th66: :: CAT_4:66 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th67: :: CAT_4:67 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem :: CAT_4:68 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem :: CAT_4:69 :: Showing IDV graph ... (Click the Palm Tree again to close it)
definition
let C be
Cocartesian_category;
let a,
b,
c be
Object of
C;
let f be
Morphism of
a,
c;
let g be
Morphism of
b,
c;
assume A1:
(
Hom a,
c <> {} &
Hom b,
c <> {} )
;
func [$f,g$] -> Morphism of
a + b,
c means :
Def29:
:: CAT_4:def 29
(
it * (in1 a,b) = f &
it * (in2 a,b) = g );
existence
ex b1 being Morphism of a + b,c st
( b1 * (in1 a,b) = f & b1 * (in2 a,b) = g )
uniqueness
for b1, b2 being Morphism of a + b,c st b1 * (in1 a,b) = f & b1 * (in2 a,b) = g & b2 * (in1 a,b) = f & b2 * (in2 a,b) = g holds
b1 = b2
end;
:: deftheorem Def29 defines [$ CAT_4:def 29 :
for
C being
Cocartesian_category for
a,
b,
c being
Object of
C for
f being
Morphism of
a,
c for
g being
Morphism of
b,
c st
Hom a,
c <> {} &
Hom b,
c <> {} holds
for
b7 being
Morphism of
a + b,
c holds
(
b7 = [$f,g$] iff (
b7 * (in1 a,b) = f &
b7 * (in2 a,b) = g ) );
theorem Th70: :: CAT_4:70 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th71: :: CAT_4:71 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th72: :: CAT_4:72 :: Showing IDV graph ... (Click the Palm Tree again to close it)
for
C being
Cocartesian_category for
a,
c,
b,
d being
Object of
C for
f being
Morphism of
a,
c for
g being
Morphism of
b,
c for
h being
Morphism of
c,
d st
Hom a,
c <> {} &
Hom b,
c <> {} &
Hom c,
d <> {} holds
[$(h * f),(h * g)$] = h * [$f,g$]
theorem Th73: :: CAT_4:73 :: Showing IDV graph ... (Click the Palm Tree again to close it)
for
C being
Cocartesian_category for
a,
c,
b being
Object of
C for
f,
k being
Morphism of
a,
c for
g,
h being
Morphism of
b,
c st
Hom a,
c <> {} &
Hom b,
c <> {} &
[$f,g$] = [$k,h$] holds
(
f = k &
g = h )
theorem :: CAT_4:74 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem :: CAT_4:75 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem :: CAT_4:76 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem :: CAT_4:77 :: Showing IDV graph ... (Click the Palm Tree again to close it)
:: deftheorem defines nabla CAT_4:def 30 :
definition
let C be
Cocartesian_category;
let a,
b,
c,
d be
Object of
C;
let f be
Morphism of
a,
c;
let g be
Morphism of
b,
d;
func f + g -> Morphism of
a + b,
c + d equals :: CAT_4:def 31
[$((in1 c,d) * f),((in2 c,d) * g)$];
correctness
coherence
[$((in1 c,d) * f),((in2 c,d) * g)$] is Morphism of a + b,c + d;
;
end;
:: deftheorem defines + CAT_4:def 31 :
theorem :: CAT_4:78 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem :: CAT_4:79 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem Th80: :: CAT_4:80 :: Showing IDV graph ... (Click the Palm Tree again to close it)
for
C being
Cocartesian_category for
a,
c,
b,
d,
e being
Object of
C for
f being
Morphism of
a,
c for
h being
Morphism of
b,
d for
g being
Morphism of
c,
e for
k being
Morphism of
d,
e st
Hom a,
c <> {} &
Hom b,
d <> {} &
Hom c,
e <> {} &
Hom d,
e <> {} holds
[$g,k$] * (f + h) = [$(g * f),(k * h)$]
theorem :: CAT_4:81 :: Showing IDV graph ... (Click the Palm Tree again to close it)
theorem :: CAT_4:82 :: Showing IDV graph ... (Click the Palm Tree again to close it)
for
C being
Cocartesian_category for
a,
c,
b,
d,
e,
s being
Object of
C for
f being
Morphism of
a,
c for
h being
Morphism of
b,
d for
g being
Morphism of
c,
e for
k being
Morphism of
d,
s st
Hom a,
c <> {} &
Hom b,
d <> {} &
Hom c,
e <> {} &
Hom d,
s <> {} holds
(g + k) * (f + h) = (g * f) + (k * h)