:: COMMACAT semantic presentation
deffunc
H
1
(
CatStr
)
->
set
= the
Objects
of
a
1
;
deffunc
H
2
(
CatStr
)
->
set
= the
Morphisms
of
a
1
;
definition
canceled;
canceled;
canceled;
canceled;
end;
::
deftheorem
Def1
COMMACAT:def 1 :
canceled;
::
deftheorem
Def2
COMMACAT:def 2 :
canceled;
::
deftheorem
Def3
COMMACAT:def 3 :
canceled;
::
deftheorem
Def4
COMMACAT:def 4 :
canceled;
theorem
Th1
:
:: COMMACAT:1
canceled;
Lemma1
: for
b
1
,
b
2
,
b
3
,
b
4
,
b
5
,
b
6
being
set
holds
(
[
[
b
1
,
b
2
]
,
b
3
]
`11
=
b
1
&
[
[
b
1
,
b
2
]
,
b
3
]
`12
=
b
2
&
[
b
4
,
[
b
5
,
b
6
]
]
`21
=
b
5
&
[
b
4
,
[
b
5
,
b
6
]
]
`22
=
b
6
)
by
MCART_1:89
;
definition
let
c
1
,
c
2
,
c
3
be
Category
;
let
c
4
be
Functor
of
c
1
,
c
3
;
let
c
5
be
Functor
of
c
2
,
c
3
;
given
c
6
being
Object
of
c
1
,
c
7
being
Object
of
c
2
,
c
8
being
Morphism
of
c
3
such that
E2
:
c
8
in
Hom
(
c
4
.
c
6
)
,
(
c
5
.
c
7
)
;
func
commaObjs
c
4
,
c
5
->
non
empty
Subset
of
[:
[:
the
Objects
of
a
1
,the
Objects
of
a
2
:]
,the
Morphisms
of
a
3
:]
equals
:
Def5
:
:: COMMACAT:def 5
{
[
[
b
1
,
b
2
]
,
b
3
]
where B is
Object
of
a
1
, B is
Object
of
a
2
, B is
Morphism
of
a
3
:
b
3
in
Hom
(
a
4
.
b
1
)
,
(
a
5
.
b
2
)
}
;
coherence
{
[
[
b
1
,
b
2
]
,
b
3
]
where B is
Object
of
c
1
, B is
Object
of
c
2
, B is
Morphism
of
c
3
:
b
3
in
Hom
(
c
4
.
b
1
)
,
(
c
5
.
b
2
)
}
is non
empty
Subset
of
[:
[:
the
Objects
of
c
1
,the
Objects
of
c
2
:]
,the
Morphisms
of
c
3
:]
proof
end;
end;
::
deftheorem
Def5
defines
commaObjs
COMMACAT:def 5 :
for
b
1
,
b
2
,
b
3
being
Category
for
b
4
being
Functor
of
b
1
,
b
3
for
b
5
being
Functor
of
b
2
,
b
3
st ex
b
6
being
Object
of
b
1
ex
b
7
being
Object
of
b
2
ex
b
8
being
Morphism
of
b
3
st
b
8
in
Hom
(
b
4
.
b
6
)
,
(
b
5
.
b
7
)
holds
commaObjs
b
4
,
b
5
=
{
[
[
b
6
,
b
7
]
,
b
8
]
where B is
Object
of
b
1
, B is
Object
of
b
2
, B is
Morphism
of
b
3
:
b
8
in
Hom
(
b
4
.
b
6
)
,
(
b
5
.
b
7
)
}
;
theorem
Th2
:
:: COMMACAT:2
for
b
1
,
b
2
,
b
3
being
Category
for
b
4
being
Functor
of
b
1
,
b
3
for
b
5
being
Functor
of
b
2
,
b
3
for
b
6
being
Element
of
commaObjs
b
4
,
b
5
st ex
b
7
being
Object
of
b
1
ex
b
8
being
Object
of
b
2
ex
b
9
being
Morphism
of
b
3
st
b
9
in
Hom
(
b
4
.
b
7
)
,
(
b
5
.
b
8
)
holds
(
b
6
=
[
[
(
b
6
`11
)
,
(
b
6
`12
)
]
,
(
b
6
`2
)
]
&
b
6
`2
in
Hom
(
b
4
.
(
b
6
`11
)
)
,
(
b
5
.
(
b
6
`12
)
)
&
dom
(
b
6
`2
)
=
b
4
.
(
b
6
`11
)
&
cod
(
b
6
`2
)
=
b
5
.
(
b
6
`12
)
)
proof
end;
definition
let
c
1
,
c
2
,
c
3
be
Category
;
let
c
4
be
Functor
of
c
1
,
c
3
;
let
c
5
be
Functor
of
c
2
,
c
3
;
given
c
6
being
Object
of
c
1
,
c
7
being
Object
of
c
2
,
c
8
being
Morphism
of
c
3
such that
E4
:
c
8
in
Hom
(
c
4
.
c
6
)
,
(
c
5
.
c
7
)
;
func
commaMorphs
c
4
,
c
5
->
non
empty
Subset
of
[:
[:
(
commaObjs
a
4
,
a
5
)
,
(
commaObjs
a
4
,
a
5
)
:]
,
[:
the
Morphisms
of
a
1
,the
Morphisms
of
a
2
:]
:]
equals
:
Def6
:
:: COMMACAT:def 6
{
[
[
b
3
,
b
4
]
,
[
b
1
,
b
2
]
]
where B is
Morphism
of
a
1
, B is
Morphism
of
a
2
, B is
Element
of
commaObjs
a
4
,
a
5
, B is
Element
of
commaObjs
a
4
,
a
5
: (
dom
b
1
=
b
3
`11
&
cod
b
1
=
b
4
`11
&
dom
b
2
=
b
3
`12
&
cod
b
2
=
b
4
`12
&
(
b
4
`2
)
*
(
a
4
.
b
1
)
=
(
a
5
.
b
2
)
*
(
b
3
`2
)
)
}
;
coherence
{
[
[
b
3
,
b
4
]
,
[
b
1
,
b
2
]
]
where B is
Morphism
of
c
1
, B is
Morphism
of
c
2
, B is
Element
of
commaObjs
c
4
,
c
5
, B is
Element
of
commaObjs
c
4
,
c
5
: (
dom
b
1
=
b
3
`11
&
cod
b
1
=
b
4
`11
&
dom
b
2
=
b
3
`12
&
cod
b
2
=
b
4
`12
&
(
b
4
`2
)
*
(
c
4
.
b
1
)
=
(
c
5
.
b
2
)
*
(
b
3
`2
)
)
}
is non
empty
Subset
of
[:
[:
(
commaObjs
c
4
,
c
5
)
,
(
commaObjs
c
4
,
c
5
)
:]
,
[:
the
Morphisms
of
c
1
,the
Morphisms
of
c
2
:]
:]
proof
end;
end;
::
deftheorem
Def6
defines
commaMorphs
COMMACAT:def 6 :
for
b
1
,
b
2
,
b
3
being
Category
for
b
4
being
Functor
of
b
1
,
b
3
for
b
5
being
Functor
of
b
2
,
b
3
st ex
b
6
being
Object
of
b
1
ex
b
7
being
Object
of
b
2
ex
b
8
being
Morphism
of
b
3
st
b
8
in
Hom
(
b
4
.
b
6
)
,
(
b
5
.
b
7
)
holds
commaMorphs
b
4
,
b
5
=
{
[
[
b
8
,
b
9
]
,
[
b
6
,
b
7
]
]
where B is
Morphism
of
b
1
, B is
Morphism
of
b
2
, B is
Element
of
commaObjs
b
4
,
b
5
, B is
Element
of
commaObjs
b
4
,
b
5
: (
dom
b
6
=
b
8
`11
&
cod
b
6
=
b
9
`11
&
dom
b
7
=
b
8
`12
&
cod
b
7
=
b
9
`12
&
(
b
9
`2
)
*
(
b
4
.
b
6
)
=
(
b
5
.
b
7
)
*
(
b
8
`2
)
)
}
;
definition
let
c
1
,
c
2
,
c
3
be
Category
;
let
c
4
be
Functor
of
c
1
,
c
3
;
let
c
5
be
Functor
of
c
2
,
c
3
;
let
c
6
be
Element
of
commaMorphs
c
4
,
c
5
;
redefine
func
`11
as
c
6
`11
->
Element
of
commaObjs
a
4
,
a
5
;
coherence
c
6
`11
is
Element
of
commaObjs
c
4
,
c
5
proof
end;
redefine
func
`12
as
c
6
`12
->
Element
of
commaObjs
a
4
,
a
5
;
coherence
c
6
`12
is
Element
of
commaObjs
c
4
,
c
5
proof
end;
end;
theorem
Th3
:
:: COMMACAT:3
for
b
1
,
b
2
,
b
3
being
Category
for
b
4
being
Functor
of
b
1
,
b
3
for
b
5
being
Functor
of
b
2
,
b
3
for
b
6
being
Element
of
commaMorphs
b
4
,
b
5
st ex
b
7
being
Object
of
b
1
ex
b
8
being
Object
of
b
2
ex
b
9
being
Morphism
of
b
3
st
b
9
in
Hom
(
b
4
.
b
7
)
,
(
b
5
.
b
8
)
holds
(
b
6
=
[
[
(
b
6
`11
)
,
(
b
6
`12
)
]
,
[
(
b
6
`21
)
,
(
b
6
`22
)
]
]
&
dom
(
b
6
`21
)
=
(
b
6
`11
)
`11
&
cod
(
b
6
`21
)
=
(
b
6
`12
)
`11
&
dom
(
b
6
`22
)
=
(
b
6
`11
)
`12
&
cod
(
b
6
`22
)
=
(
b
6
`12
)
`12
&
(
(
b
6
`12
)
`2
)
*
(
b
4
.
(
b
6
`21
)
)
=
(
b
5
.
(
b
6
`22
)
)
*
(
(
b
6
`11
)
`2
)
)
proof
end;
definition
let
c
1
,
c
2
,
c
3
be
Category
;
let
c
4
be
Functor
of
c
1
,
c
3
;
let
c
5
be
Functor
of
c
2
,
c
3
;
let
c
6
,
c
7
be
Element
of
commaMorphs
c
4
,
c
5
;
given
c
8
being
Object
of
c
1
,
c
9
being
Object
of
c
2
,
c
10
being
Morphism
of
c
3
such that
E6
:
c
10
in
Hom
(
c
4
.
c
8
)
,
(
c
5
.
c
9
)
;
assume
E7
:
c
6
`12
=
c
7
`11
;
func
c
7
*
c
6
->
Element
of
commaMorphs
a
4
,
a
5
equals
:
Def7
:
:: COMMACAT:def 7
[
[
(
a
6
`11
)
,
(
a
7
`12
)
]
,
[
(
(
a
7
`21
)
*
(
a
6
`21
)
)
,
(
(
a
7
`22
)
*
(
a
6
`22
)
)
]
]
;
coherence
[
[
(
c
6
`11
)
,
(
c
7
`12
)
]
,
[
(
(
c
7
`21
)
*
(
c
6
`21
)
)
,
(
(
c
7
`22
)
*
(
c
6
`22
)
)
]
]
is
Element
of
commaMorphs
c
4
,
c
5
proof
end;
end;
::
deftheorem
Def7
defines
*
COMMACAT:def 7 :
for
b
1
,
b
2
,
b
3
being
Category
for
b
4
being
Functor
of
b
1
,
b
3
for
b
5
being
Functor
of
b
2
,
b
3
for
b
6
,
b
7
being
Element
of
commaMorphs
b
4
,
b
5
st ex
b
8
being
Object
of
b
1
ex
b
9
being
Object
of
b
2
ex
b
10
being
Morphism
of
b
3
st
b
10
in
Hom
(
b
4
.
b
8
)
,
(
b
5
.
b
9
)
&
b
6
`12
=
b
7
`11
holds
b
7
*
b
6
=
[
[
(
b
6
`11
)
,
(
b
7
`12
)
]
,
[
(
(
b
7
`21
)
*
(
b
6
`21
)
)
,
(
(
b
7
`22
)
*
(
b
6
`22
)
)
]
]
;
definition
let
c
1
,
c
2
,
c
3
be
Category
;
let
c
4
be
Functor
of
c
1
,
c
3
;
let
c
5
be
Functor
of
c
2
,
c
3
;
func
commaComp
c
4
,
c
5
->
PartFunc
of
[:
(
commaMorphs
a
4
,
a
5
)
,
(
commaMorphs
a
4
,
a
5
)
:]
,
commaMorphs
a
4
,
a
5
means
:
Def8
:
:: COMMACAT:def 8
(
dom
a
6
=
{
[
b
1
,
b
2
]
where B is
Element
of
commaMorphs
a
4
,
a
5
, B is
Element
of
commaMorphs
a
4
,
a
5
:
b
1
`11
=
b
2
`12
}
& ( for
b
1
,
b
2
being
Element
of
commaMorphs
a
4
,
a
5
st
[
b
1
,
b
2
]
in
dom
a
6
holds
a
6
.
[
b
1
,
b
2
]
=
b
1
*
b
2
) );
existence
ex
b
1
being
PartFunc
of
[:
(
commaMorphs
c
4
,
c
5
)
,
(
commaMorphs
c
4
,
c
5
)
:]
,
commaMorphs
c
4
,
c
5
st
(
dom
b
1
=
{
[
b
2
,
b
3
]
where B is
Element
of
commaMorphs
c
4
,
c
5
, B is
Element
of
commaMorphs
c
4
,
c
5
:
b
2
`11
=
b
3
`12
}
& ( for
b
2
,
b
3
being
Element
of
commaMorphs
c
4
,
c
5
st
[
b
2
,
b
3
]
in
dom
b
1
holds
b
1
.
[
b
2
,
b
3
]
=
b
2
*
b
3
) )
proof
end;
uniqueness
for
b
1
,
b
2
being
PartFunc
of
[:
(
commaMorphs
c
4
,
c
5
)
,
(
commaMorphs
c
4
,
c
5
)
:]
,
commaMorphs
c
4
,
c
5
st
dom
b
1
=
{
[
b
3
,
b
4
]
where B is
Element
of
commaMorphs
c
4
,
c
5
, B is
Element
of
commaMorphs
c
4
,
c
5
:
b
3
`11
=
b
4
`12
}
& ( for
b
3
,
b
4
being
Element
of
commaMorphs
c
4
,
c
5
st
[
b
3
,
b
4
]
in
dom
b
1
holds
b
1
.
[
b
3
,
b
4
]
=
b
3
*
b
4
) &
dom
b
2
=
{
[
b
3
,
b
4
]
where B is
Element
of
commaMorphs
c
4
,
c
5
, B is
Element
of
commaMorphs
c
4
,
c
5
:
b
3
`11
=
b
4
`12
}
& ( for
b
3
,
b
4
being
Element
of
commaMorphs
c
4
,
c
5
st
[
b
3
,
b
4
]
in
dom
b
2
holds
b
2
.
[
b
3
,
b
4
]
=
b
3
*
b
4
) holds
b
1
=
b
2
proof
end;
end;
::
deftheorem
Def8
defines
commaComp
COMMACAT:def 8 :
for
b
1
,
b
2
,
b
3
being
Category
for
b
4
being
Functor
of
b
1
,
b
3
for
b
5
being
Functor
of
b
2
,
b
3
for
b
6
being
PartFunc
of
[:
(
commaMorphs
b
4
,
b
5
)
,
(
commaMorphs
b
4
,
b
5
)
:]
,
commaMorphs
b
4
,
b
5
holds
(
b
6
=
commaComp
b
4
,
b
5
iff (
dom
b
6
=
{
[
b
7
,
b
8
]
where B is
Element
of
commaMorphs
b
4
,
b
5
, B is
Element
of
commaMorphs
b
4
,
b
5
:
b
7
`11
=
b
8
`12
}
& ( for
b
7
,
b
8
being
Element
of
commaMorphs
b
4
,
b
5
st
[
b
7
,
b
8
]
in
dom
b
6
holds
b
6
.
[
b
7
,
b
8
]
=
b
7
*
b
8
) ) );
definition
let
c
1
,
c
2
,
c
3
be
Category
;
let
c
4
be
Functor
of
c
1
,
c
3
;
let
c
5
be
Functor
of
c
2
,
c
3
;
given
c
6
being
Object
of
c
1
,
c
7
being
Object
of
c
2
,
c
8
being
Morphism
of
c
3
such that
E8
:
c
8
in
Hom
(
c
4
.
c
6
)
,
(
c
5
.
c
7
)
;
func
c
4
comma
c
5
->
strict
Category
means
:: COMMACAT:def 9
( the
Objects
of
a
6
=
commaObjs
a
4
,
a
5
& the
Morphisms
of
a
6
=
commaMorphs
a
4
,
a
5
& ( for
b
1
being
Element
of
commaMorphs
a
4
,
a
5
holds the
Dom
of
a
6
.
b
1
=
b
1
`11
) & ( for
b
1
being
Element
of
commaMorphs
a
4
,
a
5
holds the
Cod
of
a
6
.
b
1
=
b
1
`12
) & ( for
b
1
being
Element
of
commaObjs
a
4
,
a
5
holds the
Id
of
a
6
.
b
1
=
[
[
b
1
,
b
1
]
,
[
(
id
(
b
1
`11
)
)
,
(
id
(
b
1
`12
)
)
]
]
) & the
Comp
of
a
6
=
commaComp
a
4
,
a
5
);
existence
ex
b
1
being
strict
Category
st
( the
Objects
of
b
1
=
commaObjs
c
4
,
c
5
& the
Morphisms
of
b
1
=
commaMorphs
c
4
,
c
5
& ( for
b
2
being
Element
of
commaMorphs
c
4
,
c
5
holds the
Dom
of
b
1
.
b
2
=
b
2
`11
) & ( for
b
2
being
Element
of
commaMorphs
c
4
,
c
5
holds the
Cod
of
b
1
.
b
2
=
b
2
`12
) & ( for
b
2
being
Element
of
commaObjs
c
4
,
c
5
holds the
Id
of
b
1
.
b
2
=
[
[
b
2
,
b
2
]
,
[
(
id
(
b
2
`11
)
)
,
(
id
(
b
2
`12
)
)
]
]
) & the
Comp
of
b
1
=
commaComp
c
4
,
c
5
)
proof
end;
uniqueness
for
b
1
,
b
2
being
strict
Category
st the
Objects
of
b
1
=
commaObjs
c
4
,
c
5
& the
Morphisms
of
b
1
=
commaMorphs
c
4
,
c
5
& ( for
b
3
being
Element
of
commaMorphs
c
4
,
c
5
holds the
Dom
of
b
1
.
b
3
=
b
3
`11
) & ( for
b
3
being
Element
of
commaMorphs
c
4
,
c
5
holds the
Cod
of
b
1
.
b
3
=
b
3
`12
) & ( for
b
3
being
Element
of
commaObjs
c
4
,
c
5
holds the
Id
of
b
1
.
b
3
=
[
[
b
3
,
b
3
]
,
[
(
id
(
b
3
`11
)
)
,
(
id
(
b
3
`12
)
)
]
]
) & the
Comp
of
b
1
=
commaComp
c
4
,
c
5
& the
Objects
of
b
2
=
commaObjs
c
4
,
c
5
& the
Morphisms
of
b
2
=
commaMorphs
c
4
,
c
5
& ( for
b
3
being
Element
of
commaMorphs
c
4
,
c
5
holds the
Dom
of
b
2
.
b
3
=
b
3
`11
) & ( for
b
3
being
Element
of
commaMorphs
c
4
,
c
5
holds the
Cod
of
b
2
.
b
3
=
b
3
`12
) & ( for
b
3
being
Element
of
commaObjs
c
4
,
c
5
holds the
Id
of
b
2
.
b
3
=
[
[
b
3
,
b
3
]
,
[
(
id
(
b
3
`11
)
)
,
(
id
(
b
3
`12
)
)
]
]
) & the
Comp
of
b
2
=
commaComp
c
4
,
c
5
holds
b
1
=
b
2
proof
end;
end;
::
deftheorem
Def9
defines
comma
COMMACAT:def 9 :
for
b
1
,
b
2
,
b
3
being
Category
for
b
4
being
Functor
of
b
1
,
b
3
for
b
5
being
Functor
of
b
2
,
b
3
st ex
b
6
being
Object
of
b
1
ex
b
7
being
Object
of
b
2
ex
b
8
being
Morphism
of
b
3
st
b
8
in
Hom
(
b
4
.
b
6
)
,
(
b
5
.
b
7
)
holds
for
b
6
being
strict
Category
holds
(
b
6
=
b
4
comma
b
5
iff ( the
Objects
of
b
6
=
commaObjs
b
4
,
b
5
& the
Morphisms
of
b
6
=
commaMorphs
b
4
,
b
5
& ( for
b
7
being
Element
of
commaMorphs
b
4
,
b
5
holds the
Dom
of
b
6
.
b
7
=
b
7
`11
) & ( for
b
7
being
Element
of
commaMorphs
b
4
,
b
5
holds the
Cod
of
b
6
.
b
7
=
b
7
`12
) & ( for
b
7
being
Element
of
commaObjs
b
4
,
b
5
holds the
Id
of
b
6
.
b
7
=
[
[
b
7
,
b
7
]
,
[
(
id
(
b
7
`11
)
)
,
(
id
(
b
7
`12
)
)
]
]
) & the
Comp
of
b
6
=
commaComp
b
4
,
b
5
) );
theorem
Th4
:
:: COMMACAT:4
for
b
1
,
b
2
being
set
holds
( the
Objects
of
(
1Cat
b
2
,
b
1
)
=
{
b
2
}
& the
Morphisms
of
(
1Cat
b
2
,
b
1
)
=
{
b
1
}
)
proof
end;
theorem
Th5
:
:: COMMACAT:5
for
b
1
,
b
2
being
set
for
b
3
,
b
4
being
Object
of
(
1Cat
b
2
,
b
1
)
holds
Hom
b
3
,
b
4
=
{
b
1
}
proof
end;
definition
let
c
1
be
Category
;
let
c
2
be
Object
of
c
1
;
func
1Cat
c
2
->
strict
Subcategory
of
a
1
equals
:: COMMACAT:def 10
1Cat
a
2
,
(
id
a
2
)
;
coherence
1Cat
c
2
,
(
id
c
2
)
is
strict
Subcategory
of
c
1
proof
end;
end;
::
deftheorem
Def10
defines
1Cat
COMMACAT:def 10 :
for
b
1
being
Category
for
b
2
being
Object
of
b
1
holds
1Cat
b
2
=
1Cat
b
2
,
(
id
b
2
)
;
definition
let
c
1
be
Category
;
let
c
2
be
Object
of
c
1
;
func
c
2
comma
c
1
->
strict
Category
equals
:: COMMACAT:def 11
(
incl
(
1Cat
a
2
)
)
comma
(
id
a
1
)
;
coherence
(
incl
(
1Cat
c
2
)
)
comma
(
id
c
1
)
is
strict
Category
;
func
c
1
comma
c
2
->
strict
Category
equals
:: COMMACAT:def 12
(
id
a
1
)
comma
(
incl
(
1Cat
a
2
)
)
;
coherence
(
id
c
1
)
comma
(
incl
(
1Cat
c
2
)
)
is
strict
Category
;
end;
::
deftheorem
Def11
defines
comma
COMMACAT:def 11 :
for
b
1
being
Category
for
b
2
being
Object
of
b
1
holds
b
2
comma
b
1
=
(
incl
(
1Cat
b
2
)
)
comma
(
id
b
1
)
;
::
deftheorem
Def12
defines
comma
COMMACAT:def 12 :
for
b
1
being
Category
for
b
2
being
Object
of
b
1
holds
b
1
comma
b
2
=
(
id
b
1
)
comma
(
incl
(
1Cat
b
2
)
)
;