:: INDEX_1 semantic presentation

registration
let c1 be non empty set ;
cluster V3 ManySortedSet of a1;
existence
not for b1 being ManySortedSet of c1 holds b1 is empty-yielding
proof end;
end;

registration
let c1 be non empty set ;
cluster V2 -> V3 ManySortedSet of a1;
coherence
for b1 being ManySortedSet of c1 st b1 is non-empty holds
not b1 is empty-yielding
proof end;
end;

definition
let c1 be Categorial Category;
let c2 be Morphism of c1;
redefine func `2 as c2 `2 -> Functor of a2 `11 ,a2 `12 ;
coherence
c2 `2 is Functor of c2 `11 ,c2 `12
proof end;
end;

theorem Th1: :: INDEX_1:1
for b1 being Categorial Category
for b2, b3 being Morphism of b1 st dom b3 = cod b2 holds
b3 * b2 = [[(dom b2),(cod b3)],((b3 `2 ) * (b2 `2 ))]
proof end;

theorem Th2: :: INDEX_1:2
for b1 being Category
for b2, b3 being Categorial Category
for b4 being Functor of b1,b2
for b5 being Functor of b1,b3 st b4 = b5 holds
Obj b4 = Obj b5
proof end;

definition
let c1 be Function;
attr a1 is Category-yielding means :Def1: :: INDEX_1:def 1
for b1 being set st b1 in dom a1 holds
a1 . b1 is Category;
end;

:: deftheorem Def1 defines Category-yielding INDEX_1:def 1 :
for b1 being Function holds
( b1 is Category-yielding iff for b2 being set st b2 in dom b1 holds
b1 . b2 is Category );

registration
cluster Category-yielding set ;
existence
ex b1 being Function st b1 is Category-yielding
proof end;
end;

registration
let c1 be set ;
cluster Category-yielding ManySortedSet of a1;
existence
ex b1 being ManySortedSet of c1 st b1 is Category-yielding
proof end;
end;

definition
let c1 be set ;
mode ManySortedCategory of a1 is Category-yielding ManySortedSet of a1;
end;

definition
let c1 be Category;
mode ManySortedSet of a1 is ManySortedSet of the Objects of a1;
mode ManySortedCategory of a1 is ManySortedCategory of the Objects of a1;
end;

registration
let c1 be set ;
let c2 be Category;
cluster a1 --> a2 -> Category-yielding ;
coherence
c1 --> c2 is Category-yielding
proof end;
end;

registration
let c1 be non empty set ;
cluster -> non empty ManySortedSet of a1;
coherence
for b1 being ManySortedSet of c1 holds not b1 is empty
proof end;
end;

registration
let c1 be Category-yielding Function;
cluster rng a1 -> categorial ;
coherence
rng c1 is categorial
proof end;
end;

definition
let c1 be non empty set ;
let c2 be ManySortedCategory of c1;
let c3 be Element of c1;
redefine func . as c2 . c3 -> Category;
coherence
c2 . c3 is Category
proof end;
end;

registration
let c1 be Function;
let c2 be Category-yielding Function;
cluster a1 * a2 -> Category-yielding ;
coherence
c2 * c1 is Category-yielding
proof end;
end;

definition
let c1 be Category-yielding Function;
func Objs c1 -> non-empty Function means :Def2: :: INDEX_1:def 2
( dom a2 = dom a1 & ( for b1 being set st b1 in dom a1 holds
for b2 being Category st b2 = a1 . b1 holds
a2 . b1 = the Objects of b2 ) );
existence
ex b1 being non-empty Function st
( dom b1 = dom c1 & ( for b2 being set st b2 in dom c1 holds
for b3 being Category st b3 = c1 . b2 holds
b1 . b2 = the Objects of b3 ) )
proof end;
uniqueness
for b1, b2 being non-empty Function st dom b1 = dom c1 & ( for b3 being set st b3 in dom c1 holds
for b4 being Category st b4 = c1 . b3 holds
b1 . b3 = the Objects of b4 ) & dom b2 = dom c1 & ( for b3 being set st b3 in dom c1 holds
for b4 being Category st b4 = c1 . b3 holds
b2 . b3 = the Objects of b4 ) holds
b1 = b2
proof end;
func Mphs c1 -> non-empty Function means :Def3: :: INDEX_1:def 3
( dom a2 = dom a1 & ( for b1 being set st b1 in dom a1 holds
for b2 being Category st b2 = a1 . b1 holds
a2 . b1 = the Morphisms of b2 ) );
existence
ex b1 being non-empty Function st
( dom b1 = dom c1 & ( for b2 being set st b2 in dom c1 holds
for b3 being Category st b3 = c1 . b2 holds
b1 . b2 = the Morphisms of b3 ) )
proof end;
uniqueness
for b1, b2 being non-empty Function st dom b1 = dom c1 & ( for b3 being set st b3 in dom c1 holds
for b4 being Category st b4 = c1 . b3 holds
b1 . b3 = the Morphisms of b4 ) & dom b2 = dom c1 & ( for b3 being set st b3 in dom c1 holds
for b4 being Category st b4 = c1 . b3 holds
b2 . b3 = the Morphisms of b4 ) holds
b1 = b2
proof end;
end;

:: deftheorem Def2 defines Objs INDEX_1:def 2 :
for b1 being Category-yielding Function
for b2 being non-empty Function holds
( b2 = Objs b1 iff ( dom b2 = dom b1 & ( for b3 being set st b3 in dom b1 holds
for b4 being Category st b4 = b1 . b3 holds
b2 . b3 = the Objects of b4 ) ) );

:: deftheorem Def3 defines Mphs INDEX_1:def 3 :
for b1 being Category-yielding Function
for b2 being non-empty Function holds
( b2 = Mphs b1 iff ( dom b2 = dom b1 & ( for b3 being set st b3 in dom b1 holds
for b4 being Category st b4 = b1 . b3 holds
b2 . b3 = the Morphisms of b4 ) ) );

definition
let c1 be non empty set ;
let c2 be ManySortedCategory of c1;
redefine func Objs as Objs c2 -> V2 ManySortedSet of a1;
coherence
Objs c2 is V2 ManySortedSet of c1
proof end;
redefine func Mphs as Mphs c2 -> V2 ManySortedSet of a1;
coherence
Mphs c2 is V2 ManySortedSet of c1
proof end;
end;

theorem Th3: :: INDEX_1:3
for b1 being set
for b2 being Category holds
( Objs (b1 --> b2) = b1 --> the Objects of b2 & Mphs (b1 --> b2) = b1 --> the Morphisms of b2 )
proof end;

definition
let c1, c2 be set ;
mode ManySortedSet of c1,c2 -> set means :Def4: :: INDEX_1:def 4
ex b1 being ManySortedSet of a1ex b2 being ManySortedSet of a2 st a3 = [b1,b2];
existence
ex b1 being set ex b2 being ManySortedSet of c1ex b3 being ManySortedSet of c2 st b1 = [b2,b3]
proof end;
end;

:: deftheorem Def4 defines ManySortedSet INDEX_1:def 4 :
for b1, b2 being set
for b3 being set holds
( b3 is ManySortedSet of b1,b2 iff ex b4 being ManySortedSet of b1ex b5 being ManySortedSet of b2 st b3 = [b4,b5] );

definition
let c1, c2 be set ;
let c3 be ManySortedSet of c1;
let c4 be ManySortedSet of c2;
redefine func [ as [c3,c4] -> ManySortedSet of a1,a2;
coherence
[c3,c4] is ManySortedSet of c1,c2
proof end;
end;

definition
let c1, c2 be set ;
let c3 be ManySortedSet of c1,c2;
redefine func `1 as c3 `1 -> ManySortedSet of a1;
coherence
c3 `1 is ManySortedSet of c1
proof end;
redefine func `2 as c3 `2 -> ManySortedSet of a2;
coherence
c3 `2 is ManySortedSet of c2
proof end;
end;

definition
let c1, c2 be set ;
let c3 be ManySortedSet of c1,c2;
attr a3 is Category-yielding_on_first means :Def5: :: INDEX_1:def 5
a3 `1 is Category-yielding;
attr a3 is Function-yielding_on_second means :Def6: :: INDEX_1:def 6
a3 `2 is Function-yielding;
end;

:: deftheorem Def5 defines Category-yielding_on_first INDEX_1:def 5 :
for b1, b2 being set
for b3 being ManySortedSet of b1,b2 holds
( b3 is Category-yielding_on_first iff b3 `1 is Category-yielding );

:: deftheorem Def6 defines Function-yielding_on_second INDEX_1:def 6 :
for b1, b2 being set
for b3 being ManySortedSet of b1,b2 holds
( b3 is Function-yielding_on_second iff b3 `2 is Function-yielding );

registration
let c1, c2 be set ;
cluster Category-yielding_on_first Function-yielding_on_second ManySortedSet of a1,a2;
existence
ex b1 being ManySortedSet of c1,c2 st
( b1 is Category-yielding_on_first & b1 is Function-yielding_on_second )
proof end;
end;

definition
let c1, c2 be set ;
let c3 be Category-yielding_on_first ManySortedSet of c1,c2;
redefine func `1 as c3 `1 -> ManySortedCategory of a1;
coherence
c3 `1 is ManySortedCategory of c1
by Def5;
end;

definition
let c1, c2 be set ;
let c3 be Function-yielding_on_second ManySortedSet of c1,c2;
redefine func `2 as c3 `2 -> ManySortedFunction of a2;
coherence
c3 `2 is ManySortedFunction of c2
by Def6;
end;

registration
let c1 be Function-yielding Function;
cluster rng a1 -> functional ;
coherence
rng c1 is functional
proof end;
end;

definition
let c1, c2 be set ;
let c3 be ManySortedCategory of c1;
let c4 be ManySortedFunction of c2;
redefine func [ as [c3,c4] -> Category-yielding_on_first Function-yielding_on_second ManySortedSet of a1,a2;
coherence
[c3,c4] is Category-yielding_on_first Function-yielding_on_second ManySortedSet of c1,c2
proof end;
end;

definition
let c1 be non empty set ;
let c2, c3 be ManySortedCategory of c1;
mode ManySortedFunctor of c2,c3 -> ManySortedFunction of a1 means :Def7: :: INDEX_1:def 7
for b1 being Element of a1 holds a4 . b1 is Functor of a2 . b1,a3 . b1;
existence
ex b1 being ManySortedFunction of c1 st
for b2 being Element of c1 holds b1 . b2 is Functor of c2 . b2,c3 . b2
proof end;
end;

:: deftheorem Def7 defines ManySortedFunctor INDEX_1:def 7 :
for b1 being non empty set
for b2, b3 being ManySortedCategory of b1
for b4 being ManySortedFunction of b1 holds
( b4 is ManySortedFunctor of b2,b3 iff for b5 being Element of b1 holds b4 . b5 is Functor of b2 . b5,b3 . b5 );

scheme :: INDEX_1:sch 1
s1{ F1() -> non empty set , F2() -> ManySortedCategory of F1(), F3() -> ManySortedCategory of F1(), F4( set ) -> set } :
ex b1 being ManySortedFunctor of F2(),F3() st
for b2 being Element of F1() holds b1 . b2 = F4(b2)
provided
E9: for b1 being Element of F1() holds F4(b1) is Functor of F2() . b1,F3() . b1
proof end;

definition
let c1 be non empty set ;
let c2, c3 be ManySortedCategory of c1;
let c4 be ManySortedFunctor of c2,c3;
let c5 be Element of c1;
redefine func . as c4 . c5 -> Functor of a2 . a5,a3 . a5;
coherence
c4 . c5 is Functor of c2 . c5,c3 . c5
by Def7;
end;

definition
let c1, c2 be non empty set ;
let c3, c4 be Function of c2,c1;
mode Indexing of c3,c4 -> Category-yielding_on_first ManySortedSet of a1,a2 means :Def8: :: INDEX_1:def 8
a5 `2 is ManySortedFunctor of (a5 `1 ) * a3,(a5 `1 ) * a4;
existence
ex b1 being Category-yielding_on_first ManySortedSet of c1,c2 st b1 `2 is ManySortedFunctor of (b1 `1 ) * c3,(b1 `1 ) * c4
proof end;
end;

:: deftheorem Def8 defines Indexing INDEX_1:def 8 :
for b1, b2 being non empty set
for b3, b4 being Function of b2,b1
for b5 being Category-yielding_on_first ManySortedSet of b1,b2 holds
( b5 is Indexing of b3,b4 iff b5 `2 is ManySortedFunctor of (b5 `1 ) * b3,(b5 `1 ) * b4 );

theorem Th4: :: INDEX_1:4
for b1, b2 being non empty set
for b3, b4 being Function of b2,b1
for b5 being Indexing of b3,b4
for b6 being Element of b2 holds (b5 `2 ) . b6 is Functor of (b5 `1 ) . (b3 . b6),(b5 `1 ) . (b4 . b6)
proof end;

theorem Th5: :: INDEX_1:5
for b1 being Category
for b2 being Indexing of the Dom of b1,the Cod of b1
for b3 being Morphism of b1 holds (b2 `2 ) . b3 is Functor of (b2 `1 ) . (dom b3),(b2 `1 ) . (cod b3)
proof end;

definition
let c1, c2 be non empty set ;
let c3, c4 be Function of c2,c1;
let c5 be Indexing of c3,c4;
redefine func `2 as c5 `2 -> ManySortedFunctor of (a5 `1 ) * a3,(a5 `1 ) * a4;
coherence
c5 `2 is ManySortedFunctor of (c5 `1 ) * c3,(c5 `1 ) * c4
by Def8;
end;

E12: now
let c1, c2 be non empty set ;
let c3, c4 be Function of c2,c1;
let c5 be Indexing of c3,c4;
E13: dom (c5 `1 ) = c1 by PBOOLE:def 3;
consider c6 being strict Categorial full Category such that
E14: the Objects of c6 = rng (c5 `1 ) by CAT_5:20;
take c7 = c6;
thus for b1 being Element of c1 holds (c5 `1 ) . b1 is Object of c7 by E13, E14, FUNCT_1:def 5;
let c8 be Element of c2;
( (c5 `1 ) . (c3 . c8) is Object of c7 & (c5 `1 ) . (c4 . c8) is Object of c7 & (c5 `2 ) . c8 is Functor of (c5 `1 ) . (c3 . c8),(c5 `1 ) . (c4 . c8) ) by E13, E14, Th4, FUNCT_1:def 5;
hence [[((c5 `1 ) . (c3 . c8)),((c5 `1 ) . (c4 . c8))],((c5 `2 ) . c8)] is Morphism of c7 by CAT_5:def 8;
end;

definition
let c1, c2 be non empty set ;
let c3, c4 be Function of c2,c1;
let c5 be Indexing of c3,c4;
mode TargetCat of c5 -> Categorial Category means :Def9: :: INDEX_1:def 9
( ( for b1 being Element of a1 holds (a5 `1 ) . b1 is Object of a6 ) & ( for b1 being Element of a2 holds [[((a5 `1 ) . (a3 . b1)),((a5 `1 ) . (a4 . b1))],((a5 `2 ) . b1)] is Morphism of a6 ) );
existence
ex b1 being Categorial Category st
( ( for b2 being Element of c1 holds (c5 `1 ) . b2 is Object of b1 ) & ( for b2 being Element of c2 holds [[((c5 `1 ) . (c3 . b2)),((c5 `1 ) . (c4 . b2))],((c5 `2 ) . b2)] is Morphism of b1 ) )
proof end;
end;

:: deftheorem Def9 defines TargetCat INDEX_1:def 9 :
for b1, b2 being non empty set
for b3, b4 being Function of b2,b1
for b5 being Indexing of b3,b4
for b6 being Categorial Category holds
( b6 is TargetCat of b5 iff ( ( for b7 being Element of b1 holds (b5 `1 ) . b7 is Object of b6 ) & ( for b7 being Element of b2 holds [[((b5 `1 ) . (b3 . b7)),((b5 `1 ) . (b4 . b7))],((b5 `2 ) . b7)] is Morphism of b6 ) ) );

registration
let c1, c2 be non empty set ;
let c3, c4 be Function of c2,c1;
let c5 be Indexing of c3,c4;
cluster strict Categorial full TargetCat of a5;
existence
ex b1 being TargetCat of c5 st
( b1 is full & b1 is strict )
proof end;
end;

E14: now
let c1 be Category;
id c1 = id the Morphisms of c1 by CAT_1:def 21;
hence id c1 = (id c1) * (id c1) by FUNCT_2:23;
end;

definition
let c1, c2 be non empty set ;
let c3, c4 be Function of c2,c1;
let c5 be PartFunc of [:c2,c2:],c2;
let c6 be Function of c1,c2;
given c7 being Category such that E15: c7 = CatStr(# c1,c2,c3,c4,c5,c6 #) ;
mode Indexing of c3,c4,c5,c6 -> Indexing of a3,a4 means :Def10: :: INDEX_1:def 10
( ( for b1 being Element of a1 holds (a7 `2 ) . (a6 . b1) = id ((a7 `1 ) . b1) ) & ( for b1, b2 being Element of a2 st a3 . b2 = a4 . b1 holds
(a7 `2 ) . (a5 . [b2,b1]) = ((a7 `2 ) . b2) * ((a7 `2 ) . b1) ) );
existence
ex b1 being Indexing of c3,c4 st
( ( for b2 being Element of c1 holds (b1 `2 ) . (c6 . b2) = id ((b1 `1 ) . b2) ) & ( for b2, b3 being Element of c2 st c3 . b3 = c4 . b2 holds
(b1 `2 ) . (c5 . [b3,b2]) = ((b1 `2 ) . b3) * ((b1 `2 ) . b2) ) )
proof end;
end;

:: deftheorem Def10 defines Indexing INDEX_1:def 10 :
for b1, b2 being non empty set
for b3, b4 being Function of b2,b1
for b5 being PartFunc of [:b2,b2:],b2
for b6 being Function of b1,b2 st ex b7 being Category st b7 = CatStr(# b1,b2,b3,b4,b5,b6 #) holds
for b7 being Indexing of b3,b4 holds
( b7 is Indexing of b3,b4,b5,b6 iff ( ( for b8 being Element of b1 holds (b7 `2 ) . (b6 . b8) = id ((b7 `1 ) . b8) ) & ( for b8, b9 being Element of b2 st b3 . b9 = b4 . b8 holds
(b7 `2 ) . (b5 . [b9,b8]) = ((b7 `2 ) . b9) * ((b7 `2 ) . b8) ) ) );

definition
let c1 be Category;
mode Indexing of a1 is Indexing of the Dom of a1,the Cod of a1,the Comp of a1,the Id of a1;
mode coIndexing of a1 is Indexing of the Cod of a1,the Dom of a1, ~ the Comp of a1,the Id of a1;
end;

theorem Th6: :: INDEX_1:6
for b1 being Category
for b2 being Indexing of the Dom of b1,the Cod of b1 holds
( b2 is Indexing of b1 iff ( ( for b3 being Object of b1 holds (b2 `2 ) . (id b3) = id ((b2 `1 ) . b3) ) & ( for b3, b4 being Morphism of b1 st dom b4 = cod b3 holds
(b2 `2 ) . (b4 * b3) = ((b2 `2 ) . b4) * ((b2 `2 ) . b3) ) ) )
proof end;

theorem Th7: :: INDEX_1:7
for b1 being Category
for b2 being Indexing of the Cod of b1,the Dom of b1 holds
( b2 is coIndexing of b1 iff ( ( for b3 being Object of b1 holds (b2 `2 ) . (id b3) = id ((b2 `1 ) . b3) ) & ( for b3, b4 being Morphism of b1 st dom b4 = cod b3 holds
(b2 `2 ) . (b4 * b3) = ((b2 `2 ) . b3) * ((b2 `2 ) . b4) ) ) )
proof end;

theorem Th8: :: INDEX_1:8
for b1 being Category
for b2 being set holds
( b2 is coIndexing of b1 iff b2 is Indexing of (b1 opp ) )
proof end;

theorem Th9: :: INDEX_1:9
for b1 being Category
for b2 being Indexing of b1
for b3, b4 being Object of b1 st not Hom b3,b4 is empty holds
for b5 being Morphism of b3,b4 holds (b2 `2 ) . b5 is Functor of (b2 `1 ) . b3,(b2 `1 ) . b4
proof end;

theorem Th10: :: INDEX_1:10
for b1 being Category
for b2 being coIndexing of b1
for b3, b4 being Object of b1 st not Hom b3,b4 is empty holds
for b5 being Morphism of b3,b4 holds (b2 `2 ) . b5 is Functor of (b2 `1 ) . b4,(b2 `1 ) . b3
proof end;

definition
let c1 be Category;
let c2 be Indexing of c1;
let c3 be TargetCat of c2;
func c2 -functor c1,c3 -> Functor of a1,a3 means :Def11: :: INDEX_1:def 11
for b1 being Morphism of a1 holds a4 . b1 = [[((a2 `1 ) . (dom b1)),((a2 `1 ) . (cod b1))],((a2 `2 ) . b1)];
existence
ex b1 being Functor of c1,c3 st
for b2 being Morphism of c1 holds b1 . b2 = [[((c2 `1 ) . (dom b2)),((c2 `1 ) . (cod b2))],((c2 `2 ) . b2)]
proof end;
uniqueness
for b1, b2 being Functor of c1,c3 st ( for b3 being Morphism of c1 holds b1 . b3 = [[((c2 `1 ) . (dom b3)),((c2 `1 ) . (cod b3))],((c2 `2 ) . b3)] ) & ( for b3 being Morphism of c1 holds b2 . b3 = [[((c2 `1 ) . (dom b3)),((c2 `1 ) . (cod b3))],((c2 `2 ) . b3)] ) holds
b1 = b2
proof end;
end;

:: deftheorem Def11 defines -functor INDEX_1:def 11 :
for b1 being Category
for b2 being Indexing of b1
for b3 being TargetCat of b2
for b4 being Functor of b1,b3 holds
( b4 = b2 -functor b1,b3 iff for b5 being Morphism of b1 holds b4 . b5 = [[((b2 `1 ) . (dom b5)),((b2 `1 ) . (cod b5))],((b2 `2 ) . b5)] );

Lemma19: for b1 being Category
for b2 being Indexing of b1
for b3 being TargetCat of b2 holds Obj (b2 -functor b1,b3) = b2 `1
proof end;

theorem Th11: :: INDEX_1:11
for b1 being Category
for b2 being Indexing of b1
for b3, b4 being TargetCat of b2 holds
( b2 -functor b1,b3 = b2 -functor b1,b4 & Obj (b2 -functor b1,b3) = Obj (b2 -functor b1,b4) )
proof end;

theorem Th12: :: INDEX_1:12
for b1 being Category
for b2 being Indexing of b1
for b3 being TargetCat of b2 holds Obj (b2 -functor b1,b3) = b2 `1 by Lemma19;

theorem Th13: :: INDEX_1:13
for b1 being Category
for b2 being Indexing of b1
for b3 being TargetCat of b2
for b4 being Object of b1 holds (b2 -functor b1,b3) . b4 = (b2 `1 ) . b4
proof end;

definition
let c1 be Category;
let c2 be Indexing of c1;
func rng c2 -> strict TargetCat of a2 means :Def12: :: INDEX_1:def 12
for b1 being TargetCat of a2 holds a3 = Image (a2 -functor a1,b1);
uniqueness
for b1, b2 being strict TargetCat of c2 st ( for b3 being TargetCat of c2 holds b1 = Image (c2 -functor c1,b3) ) & ( for b3 being TargetCat of c2 holds b2 = Image (c2 -functor c1,b3) ) holds
b1 = b2
proof end;
existence
ex b1 being strict TargetCat of c2 st
for b2 being TargetCat of c2 holds b1 = Image (c2 -functor c1,b2)
proof end;
end;

:: deftheorem Def12 defines rng INDEX_1:def 12 :
for b1 being Category
for b2 being Indexing of b1
for b3 being strict TargetCat of b2 holds
( b3 = rng b2 iff for b4 being TargetCat of b2 holds b3 = Image (b2 -functor b1,b4) );

theorem Th14: :: INDEX_1:14
for b1 being Category
for b2 being Indexing of b1
for b3 being Categorial Category holds
( rng b2 is Subcategory of b3 iff b3 is TargetCat of b2 )
proof end;

definition
let c1 be Category;
let c2 be Indexing of c1;
let c3 be Morphism of c1;
func c2 . c3 -> Functor of (a2 `1 ) . (dom a3),(a2 `1 ) . (cod a3) equals :: INDEX_1:def 13
(a2 `2 ) . a3;
coherence
(c2 `2 ) . c3 is Functor of (c2 `1 ) . (dom c3),(c2 `1 ) . (cod c3)
proof end;
end;

:: deftheorem Def13 defines . INDEX_1:def 13 :
for b1 being Category
for b2 being Indexing of b1
for b3 being Morphism of b1 holds b2 . b3 = (b2 `2 ) . b3;

definition
let c1 be Category;
let c2 be coIndexing of c1;
let c3 be Morphism of c1;
func c2 . c3 -> Functor of (a2 `1 ) . (cod a3),(a2 `1 ) . (dom a3) equals :: INDEX_1:def 14
(a2 `2 ) . a3;
coherence
(c2 `2 ) . c3 is Functor of (c2 `1 ) . (cod c3),(c2 `1 ) . (dom c3)
proof end;
end;

:: deftheorem Def14 defines . INDEX_1:def 14 :
for b1 being Category
for b2 being coIndexing of b1
for b3 being Morphism of b1 holds b2 . b3 = (b2 `2 ) . b3;

E23: now
let c1, c2 be Category;
set c3 = the Objects of c1 --> c2;
set c4 = the Morphisms of c1 --> (id c2);
set c5 = [(the Objects of c1 --> c2),(the Morphisms of c1 --> (id c2))];
let c6 be Morphism of c1;
dom (([(the Objects of c1 --> c2),(the Morphisms of c1 --> (id c2))] `1 ) * the Dom of c1) = the Morphisms of c1 by PBOOLE:def 3;
then E24: (([(the Objects of c1 --> c2),(the Morphisms of c1 --> (id c2))] `1 ) * the Dom of c1) . c6 = ([(the Objects of c1 --> c2),(the Morphisms of c1 --> (id c2))] `1 ) . (the Dom of c1 . c6) by FUNCT_1:22
.= (the Objects of c1 --> c2) . (the Dom of c1 . c6) by MCART_1:7
.= c2 by FUNCOP_1:13 ;
dom (([(the Objects of c1 --> c2),(the Morphisms of c1 --> (id c2))] `1 ) * the Cod of c1) = the Morphisms of c1 by PBOOLE:def 3;
then E25: (([(the Objects of c1 --> c2),(the Morphisms of c1 --> (id c2))] `1 ) * the Cod of c1) . c6 = ([(the Objects of c1 --> c2),(the Morphisms of c1 --> (id c2))] `1 ) . (the Cod of c1 . c6) by FUNCT_1:22
.= (the Objects of c1 --> c2) . (the Cod of c1 . c6) by MCART_1:7
.= c2 by FUNCOP_1:13 ;
([(the Objects of c1 --> c2),(the Morphisms of c1 --> (id c2))] `2 ) . c6 = (the Morphisms of c1 --> (id c2)) . c6 by MCART_1:7
.= id c2 by FUNCOP_1:13 ;
hence ([(the Objects of c1 --> c2),(the Morphisms of c1 --> (id c2))] `2 ) . c6 is Functor of (([(the Objects of c1 --> c2),(the Morphisms of c1 --> (id c2))] `1 ) * the Dom of c1) . c6,(([(the Objects of c1 --> c2),(the Morphisms of c1 --> (id c2))] `1 ) * the Cod of c1) . c6 by E24, E25;
end;

E24: now
let c1, c2 be Category;
set c3 = the Objects of c1 --> c2;
set c4 = the Morphisms of c1 --> (id c2);
set c5 = [(the Objects of c1 --> c2),(the Morphisms of c1 --> (id c2))];
let c6 be Morphism of c1;
dom (([(the Objects of c1 --> c2),(the Morphisms of c1 --> (id c2))] `1 ) * the Dom of c1) = the Morphisms of c1 by PBOOLE:def 3;
then E25: (([(the Objects of c1 --> c2),(the Morphisms of c1 --> (id c2))] `1 ) * the Dom of c1) . c6 = ([(the Objects of c1 --> c2),(the Morphisms of c1 --> (id c2))] `1 ) . (the Dom of c1 . c6) by FUNCT_1:22
.= (the Objects of c1 --> c2) . (the Dom of c1 . c6) by MCART_1:7
.= c2 by FUNCOP_1:13 ;
dom (([(the Objects of c1 --> c2),(the Morphisms of c1 --> (id c2))] `1 ) * the Cod of c1) = the Morphisms of c1 by PBOOLE:def 3;
then E26: (([(the Objects of c1 --> c2),(the Morphisms of c1 --> (id c2))] `1 ) * the Cod of c1) . c6 = ([(the Objects of c1 --> c2),(the Morphisms of c1 --> (id c2))] `1 ) . (the Cod of c1 . c6) by FUNCT_1:22
.= (the Objects of c1 --> c2) . (the Cod of c1 . c6) by MCART_1:7
.= c2 by FUNCOP_1:13 ;
([(the Objects of c1 --> c2),(the Morphisms of c1 --> (id c2))] `2 ) . c6 = (the Morphisms of c1 --> (id c2)) . c6 by MCART_1:7
.= id c2 by FUNCOP_1:13 ;
hence ([(the Objects of c1 --> c2),(the Morphisms of c1 --> (id c2))] `2 ) . c6 is Functor of (([(the Objects of c1 --> c2),(the Morphisms of c1 --> (id c2))] `1 ) * the Cod of c1) . c6,(([(the Objects of c1 --> c2),(the Morphisms of c1 --> (id c2))] `1 ) * the Dom of c1) . c6 by E25, E26;
end;

theorem Th15: :: INDEX_1:15
for b1, b2 being Category holds
( [(the Objects of b1 --> b2),(the Morphisms of b1 --> (id b2))] is Indexing of b1 & [(the Objects of b1 --> b2),(the Morphisms of b1 --> (id b2))] is coIndexing of b1 )
proof end;

registration
let c1 be Category;
let c2 be Categorial Category;
let c3 be Functor of c1,c2;
cluster Obj a3 -> Category-yielding ;
coherence
Obj c3 is Category-yielding
proof end;
end;

theorem Th16: :: INDEX_1:16
for b1 being Category
for b2 being Categorial Category
for b3 being Functor of b1,b2 holds [(Obj b3),(pr2 b3)] is Indexing of b1
proof end;

definition
let c1 be Category;
let c2 be Categorial Category;
let c3 be Functor of c1,c2;
func c3 -indexing_of c1 -> Indexing of a1 equals :: INDEX_1:def 15
[(Obj a3),(pr2 a3)];
coherence
[(Obj c3),(pr2 c3)] is Indexing of c1
by Th16;
end;

:: deftheorem Def15 defines -indexing_of INDEX_1:def 15 :
for b1 being Category
for b2 being Categorial Category
for b3 being Functor of b1,b2 holds b3 -indexing_of b1 = [(Obj b3),(pr2 b3)];

theorem Th17: :: INDEX_1:17
for b1 being Category
for b2 being Categorial Category
for b3 being Functor of b1,b2 holds b2 is TargetCat of b3 -indexing_of b1
proof end;

theorem Th18: :: INDEX_1:18
for b1 being Category
for b2 being Categorial Category
for b3 being Functor of b1,b2
for b4 being TargetCat of b3 -indexing_of b1 holds b3 = (b3 -indexing_of b1) -functor b1,b4
proof end;

theorem Th19: :: INDEX_1:19
for b1 being Category
for b2, b3 being Categorial Category
for b4 being Functor of b1,b2
for b5 being Functor of b1,b3 st b4 = b5 holds
b4 -indexing_of b1 = b5 -indexing_of b1 by Th2;

theorem Th20: :: INDEX_1:20
for b1 being Category
for b2 being Indexing of b1
for b3 being TargetCat of b2 holds pr2 (b2 -functor b1,b3) = b2 `2
proof end;

theorem Th21: :: INDEX_1:21
for b1 being Category
for b2 being Indexing of b1
for b3 being TargetCat of b2 holds (b2 -functor b1,b3) -indexing_of b1 = b2
proof end;

E29: now
let c1, c2 be Category;
let c3 be Subcategory of c2;
let c4 be Functor of c1,c3;
(incl c3) * c4 = (id c3) * c4 by CAT_2:def 5
.= (id the Morphisms of c3) * c4 by CAT_1:def 21
.= c4 by FUNCT_2:23 ;
hence c4 is Functor of c1,c2 ;
end;

definition
let c1, c2, c3 be Category;
let c4 be Functor of c1,c2;
let c5 be Indexing of c3;
assume E30: Image c4 is Subcategory of c3 ;
func c5 * c4 -> Indexing of a1 means :Def16: :: INDEX_1:def 16
for b1 being Functor of a1,a3 st b1 = a4 holds
a6 = ((a5 -functor a3,(rng a5)) * b1) -indexing_of a1;
existence
ex b1 being Indexing of c1 st
for b2 being Functor of c1,c3 st b2 = c4 holds
b1 = ((c5 -functor c3,(rng c5)) * b2) -indexing_of c1
proof end;
uniqueness
for b1, b2 being Indexing of c1 st ( for b3 being Functor of c1,c3 st b3 = c4 holds
b1 = ((c5 -functor c3,(rng c5)) * b3) -indexing_of c1 ) & ( for b3 being Functor of c1,c3 st b3 = c4 holds
b2 = ((c5 -functor c3,(rng c5)) * b3) -indexing_of c1 ) holds
b1 = b2
proof end;
end;

:: deftheorem Def16 defines * INDEX_1:def 16 :
for b1, b2, b3 being Category
for b4 being Functor of b1,b2
for b5 being Indexing of b3 st Image b4 is Subcategory of b3 holds
for b6 being Indexing of b1 holds
( b6 = b5 * b4 iff for b7 being Functor of b1,b3 st b7 = b4 holds
b6 = ((b5 -functor b3,(rng b5)) * b7) -indexing_of b1 );

theorem Th22: :: INDEX_1:22
for b1, b2, b3, b4 being Category
for b5 being Indexing of b4
for b6 being Functor of b1,b2
for b7 being Functor of b1,b3 st Image b6 is Subcategory of b4 & Image b7 is Subcategory of b4 & b6 = b7 holds
b5 * b6 = b5 * b7
proof end;

theorem Th23: :: INDEX_1:23
for b1, b2 being Category
for b3 being Functor of b1,b2
for b4 being Indexing of b2
for b5 being TargetCat of b4 holds b4 * b3 = ((b4 -functor b2,b5) * b3) -indexing_of b1
proof end;

theorem Th24: :: INDEX_1:24
for b1, b2 being Category
for b3 being Functor of b1,b2
for b4 being Indexing of b2
for b5 being TargetCat of b4 holds b5 is TargetCat of b4 * b3
proof end;

theorem Th25: :: INDEX_1:25
for b1, b2 being Category
for b3 being Functor of b1,b2
for b4 being Indexing of b2
for b5 being TargetCat of b4 holds rng (b4 * b3) is Subcategory of b5
proof end;

theorem Th26: :: INDEX_1:26
for b1, b2, b3 being Category
for b4 being Functor of b1,b2
for b5 being Functor of b2,b3
for b6 being Indexing of b3 holds (b6 * b5) * b4 = b6 * (b5 * b4)
proof end;

definition
let c1 be Category;
let c2 be Indexing of c1;
let c3 be Categorial Category;
assume E35: c3 is TargetCat of c2 ;
let c4 be Categorial Category;
let c5 be Functor of c3,c4;
func c5 * c2 -> Indexing of a1 means :Def17: :: INDEX_1:def 17
for b1 being TargetCat of a2
for b2 being Functor of b1,a4 st b1 = a3 & b2 = a5 holds
a6 = (b2 * (a2 -functor a1,b1)) -indexing_of a1;
existence
ex b1 being Indexing of c1 st
for b2 being TargetCat of c2
for b3 being Functor of b2,c4 st b2 = c3 & b3 = c5 holds
b1 = (b3 * (c2 -functor c1,b2)) -indexing_of c1
proof end;
uniqueness
for b1, b2 being Indexing of c1 st ( for b3 being TargetCat of c2
for b4 being Functor of b3,c4 st b3 = c3 & b4 = c5 holds
b1 = (b4 * (c2 -functor c1,b3)) -indexing_of c1 ) & ( for b3 being TargetCat of c2
for b4 being Functor of b3,c4 st b3 = c3 & b4 = c5 holds
b2 = (b4 * (c2 -functor c1,b3)) -indexing_of c1 ) holds
b1 = b2
proof end;
end;

:: deftheorem Def17 defines * INDEX_1:def 17 :
for b1 being Category
for b2 being Indexing of b1
for b3 being Categorial Category st b3 is TargetCat of b2 holds
for b4 being Categorial Category
for b5 being Functor of b3,b4
for b6 being Indexing of b1 holds
( b6 = b5 * b2 iff for b7 being TargetCat of b2
for b8 being Functor of b7,b4 st b7 = b3 & b8 = b5 holds
b6 = (b8 * (b2 -functor b1,b7)) -indexing_of b1 );

theorem Th27: :: INDEX_1:27
for b1 being Category
for b2 being Indexing of b1
for b3 being TargetCat of b2
for b4, b5 being Categorial Category
for b6 being Functor of b3,b4
for b7 being Functor of b3,b5 st b6 = b7 holds
b6 * b2 = b7 * b2
proof end;

theorem Th28: :: INDEX_1:28
for b1 being Category
for b2 being Indexing of b1
for b3 being TargetCat of b2
for b4 being Categorial Category
for b5 being Functor of b3,b4 holds Image b5 is TargetCat of b5 * b2
proof end;

theorem Th29: :: INDEX_1:29
for b1 being Category
for b2 being Indexing of b1
for b3 being TargetCat of b2
for b4 being Categorial Category
for b5 being Functor of b3,b4 holds b4 is TargetCat of b5 * b2
proof end;

theorem Th30: :: INDEX_1:30
for b1 being Category
for b2 being Indexing of b1
for b3 being TargetCat of b2
for b4 being Categorial Category
for b5 being Functor of b3,b4 holds rng (b5 * b2) is Subcategory of Image b5
proof end;

theorem Th31: :: INDEX_1:31
for b1 being Category
for b2 being Indexing of b1
for b3 being TargetCat of b2
for b4, b5 being Categorial Category
for b6 being Functor of b3,b4
for b7 being Functor of b4,b5 holds (b7 * b6) * b2 = b7 * (b6 * b2)
proof end;

definition
let c1, c2 be Category;
let c3 be Indexing of c1;
let c4 be Indexing of c2;
func c4 * c3 -> Indexing of a1 equals :: INDEX_1:def 18
a4 * (a3 -functor a1,(rng a3));
correctness
coherence
c4 * (c3 -functor c1,(rng c3)) is Indexing of c1
;
;
end;

:: deftheorem Def18 defines * INDEX_1:def 18 :
for b1, b2 being Category
for b3 being Indexing of b1
for b4 being Indexing of b2 holds b4 * b3 = b4 * (b3 -functor b1,(rng b3));

theorem Th32: :: INDEX_1:32
for b1 being Category
for b2 being Categorial Category
for b3 being Indexing of b1
for b4 being Indexing of b2
for b5 being TargetCat of b3 st b2 is TargetCat of b3 holds
b4 * b3 = b4 * (b3 -functor b1,b5)
proof end;

theorem Th33: :: INDEX_1:33
for b1 being Category
for b2 being Categorial Category
for b3 being Indexing of b1
for b4 being Indexing of b2
for b5 being TargetCat of b4 st b2 is TargetCat of b3 holds
b4 * b3 = (b4 -functor b2,b5) * b3
proof end;

theorem Th34: :: INDEX_1:34
for b1, b2 being Category
for b3 being Functor of b1,b2
for b4 being Indexing of b2
for b5 being TargetCat of b4
for b6 being Categorial Category
for b7 being Functor of b5,b6 holds (b7 * b4) * b3 = b7 * (b4 * b3)
proof end;

theorem Th35: :: INDEX_1:35
for b1 being Category
for b2 being Indexing of b1
for b3 being TargetCat of b2
for b4 being Categorial Category
for b5 being Functor of b3,b4
for b6 being Indexing of b4 holds (b6 * b5) * b2 = b6 * (b5 * b2)
proof end;

theorem Th36: :: INDEX_1:36
for b1 being Category
for b2 being Indexing of b1
for b3 being TargetCat of b2
for b4 being Indexing of b3
for b5 being TargetCat of b4
for b6 being Categorial Category
for b7 being Functor of b5,b6 holds (b7 * b4) * b2 = b7 * (b4 * b2)
proof end;

theorem Th37: :: INDEX_1:37
for b1, b2 being Category
for b3 being Functor of b1,b2
for b4 being Indexing of b2
for b5 being TargetCat of b4
for b6 being Indexing of b5 holds (b6 * b4) * b3 = b6 * (b4 * b3)
proof end;

theorem Th38: :: INDEX_1:38
for b1 being Category
for b2 being Indexing of b1
for b3 being TargetCat of b2
for b4 being Indexing of b3
for b5 being TargetCat of b4
for b6 being Indexing of b5 holds (b6 * b4) * b2 = b6 * (b4 * b2)
proof end;