:: MSINST_1 semantic presentation

definition
let c1 be non empty set ;
func MSSCat c1 -> non empty strict AltCatStr means :Def1: :: MSINST_1:def 1
( the carrier of a2 = MSS_set a1 & ( for b1, b2 being Element of MSS_set a1 holds the Arrows of a2 . b1,b2 = MSS_morph b1,b2 ) & ( for b1, b2, b3 being object of a2 st b1 in MSS_set a1 & b2 in MSS_set a1 & b3 in MSS_set a1 holds
for b4, b5, b6, b7 being Function st [b4,b5] in the Arrows of a2 . b1,b2 & [b6,b7] in the Arrows of a2 . b2,b3 holds
(the Comp of a2 . b1,b2,b3) . [b6,b7],[b4,b5] = [(b6 * b4),(b7 * b5)] ) );
existence
ex b1 being non empty strict AltCatStr st
( the carrier of b1 = MSS_set c1 & ( for b2, b3 being Element of MSS_set c1 holds the Arrows of b1 . b2,b3 = MSS_morph b2,b3 ) & ( for b2, b3, b4 being object of b1 st b2 in MSS_set c1 & b3 in MSS_set c1 & b4 in MSS_set c1 holds
for b5, b6, b7, b8 being Function st [b5,b6] in the Arrows of b1 . b2,b3 & [b7,b8] in the Arrows of b1 . b3,b4 holds
(the Comp of b1 . b2,b3,b4) . [b7,b8],[b5,b6] = [(b7 * b5),(b8 * b6)] ) )
proof end;
uniqueness
for b1, b2 being non empty strict AltCatStr st the carrier of b1 = MSS_set c1 & ( for b3, b4 being Element of MSS_set c1 holds the Arrows of b1 . b3,b4 = MSS_morph b3,b4 ) & ( for b3, b4, b5 being object of b1 st b3 in MSS_set c1 & b4 in MSS_set c1 & b5 in MSS_set c1 holds
for b6, b7, b8, b9 being Function st [b6,b7] in the Arrows of b1 . b3,b4 & [b8,b9] in the Arrows of b1 . b4,b5 holds
(the Comp of b1 . b3,b4,b5) . [b8,b9],[b6,b7] = [(b8 * b6),(b9 * b7)] ) & the carrier of b2 = MSS_set c1 & ( for b3, b4 being Element of MSS_set c1 holds the Arrows of b2 . b3,b4 = MSS_morph b3,b4 ) & ( for b3, b4, b5 being object of b2 st b3 in MSS_set c1 & b4 in MSS_set c1 & b5 in MSS_set c1 holds
for b6, b7, b8, b9 being Function st [b6,b7] in the Arrows of b2 . b3,b4 & [b8,b9] in the Arrows of b2 . b4,b5 holds
(the Comp of b2 . b3,b4,b5) . [b8,b9],[b6,b7] = [(b8 * b6),(b9 * b7)] ) holds
b1 = b2
proof end;
end;

:: deftheorem Def1 defines MSSCat MSINST_1:def 1 :
for b1 being non empty set
for b2 being non empty strict AltCatStr holds
( b2 = MSSCat b1 iff ( the carrier of b2 = MSS_set b1 & ( for b3, b4 being Element of MSS_set b1 holds the Arrows of b2 . b3,b4 = MSS_morph b3,b4 ) & ( for b3, b4, b5 being object of b2 st b3 in MSS_set b1 & b4 in MSS_set b1 & b5 in MSS_set b1 holds
for b6, b7, b8, b9 being Function st [b6,b7] in the Arrows of b2 . b3,b4 & [b8,b9] in the Arrows of b2 . b4,b5 holds
(the Comp of b2 . b3,b4,b5) . [b8,b9],[b6,b7] = [(b8 * b6),(b9 * b7)] ) ) );

registration
let c1 be non empty set ;
cluster MSSCat a1 -> non empty transitive strict associative with_units ;
coherence
( MSSCat c1 is transitive & MSSCat c1 is associative & MSSCat c1 is with_units )
proof end;
end;

theorem Th1: :: MSINST_1:1
for b1 being non empty set
for b2 being category st b2 = MSSCat b1 holds
for b3 being object of b2 holds b3 is non empty non void ManySortedSign
proof end;

registration
let c1 be non empty non void ManySortedSign ;
cluster strict feasible MSAlgebra of a1;
existence
ex b1 being MSAlgebra of c1 st
( b1 is strict & b1 is feasible )
proof end;
end;

definition
let c1 be non empty non void ManySortedSign ;
let c2 be non empty set ;
func MSAlg_set c1,c2 -> set means :Def2: :: MSINST_1:def 2
for b1 being set holds
( b1 in a3 iff ex b2 being strict feasible MSAlgebra of a1 st
( b1 = b2 & ( for b3 being Component of the Sorts of b2 holds b3 c= a2 ) ) );
existence
ex b1 being set st
for b2 being set holds
( b2 in b1 iff ex b3 being strict feasible MSAlgebra of c1 st
( b2 = b3 & ( for b4 being Component of the Sorts of b3 holds b4 c= c2 ) ) )
proof end;
uniqueness
for b1, b2 being set st ( for b3 being set holds
( b3 in b1 iff ex b4 being strict feasible MSAlgebra of c1 st
( b3 = b4 & ( for b5 being Component of the Sorts of b4 holds b5 c= c2 ) ) ) ) & ( for b3 being set holds
( b3 in b2 iff ex b4 being strict feasible MSAlgebra of c1 st
( b3 = b4 & ( for b5 being Component of the Sorts of b4 holds b5 c= c2 ) ) ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def2 defines MSAlg_set MSINST_1:def 2 :
for b1 being non empty non void ManySortedSign
for b2 being non empty set
for b3 being set holds
( b3 = MSAlg_set b1,b2 iff for b4 being set holds
( b4 in b3 iff ex b5 being strict feasible MSAlgebra of b1 st
( b4 = b5 & ( for b6 being Component of the Sorts of b5 holds b6 c= b2 ) ) ) );

registration
let c1 be non empty non void ManySortedSign ;
let c2 be non empty set ;
cluster MSAlg_set a1,a2 -> non empty ;
coherence
not MSAlg_set c1,c2 is empty
proof end;
end;

theorem Th2: :: MSINST_1:2
for b1 being non empty set
for b2 being non empty non void ManySortedSign
for b3 being MSAlgebra of b2 st b3 in MSAlg_set b2,b1 holds
( the Sorts of b3 in Funcs the carrier of b2,(bool b1) & the Charact of b3 in Funcs the OperSymbols of b2,(PFuncs (PFuncs NAT ,b1),b1) )
proof end;

theorem Th3: :: MSINST_1:3
for b1 being non empty non void ManySortedSign
for b2 being OperSymbol of b1
for b3, b4 being MSAlgebra of b1 st the Sorts of b3 is_transformable_to the Sorts of b4 & Args b2,b3 <> {} holds
Args b2,b4 <> {}
proof end;

theorem Th4: :: MSINST_1:4
for b1 being non empty non void ManySortedSign
for b2 being OperSymbol of b1
for b3, b4, b5 being feasible MSAlgebra of b1
for b6 being ManySortedFunction of b3,b4
for b7 being ManySortedFunction of b4,b5
for b8 being Element of Args b2,b3 st Args b2,b3 <> {} & the Sorts of b3 is_transformable_to the Sorts of b4 & the Sorts of b4 is_transformable_to the Sorts of b5 holds
ex b9 being ManySortedFunction of b3,b5 st
( b9 = b7 ** b6 & b9 # b8 = b7 # (b6 # b8) )
proof end;

theorem Th5: :: MSINST_1:5
for b1 being non empty non void ManySortedSign
for b2, b3, b4 being feasible MSAlgebra of b1
for b5 being ManySortedFunction of b2,b3
for b6 being ManySortedFunction of b3,b4 st the Sorts of b2 is_transformable_to the Sorts of b3 & the Sorts of b3 is_transformable_to the Sorts of b4 & b5 is_homomorphism b2,b3 & b6 is_homomorphism b3,b4 holds
ex b7 being ManySortedFunction of b2,b4 st
( b7 = b6 ** b5 & b7 is_homomorphism b2,b4 )
proof end;

definition
let c1 be non empty non void ManySortedSign ;
let c2 be non empty set ;
let c3, c4 be set ;
assume E7: ( c3 in MSAlg_set c1,c2 & c4 in MSAlg_set c1,c2 ) ;
func MSAlg_morph c1,c2,c3,c4 -> set means :Def3: :: MSINST_1:def 3
for b1 being set holds
( b1 in a5 iff ex b2, b3 being strict feasible MSAlgebra of a1ex b4 being ManySortedFunction of b2,b3 st
( b2 = a3 & b3 = a4 & b4 = b1 & the Sorts of b2 is_transformable_to the Sorts of b3 & b4 is_homomorphism b2,b3 ) );
existence
ex b1 being set st
for b2 being set holds
( b2 in b1 iff ex b3, b4 being strict feasible MSAlgebra of c1ex b5 being ManySortedFunction of b3,b4 st
( b3 = c3 & b4 = c4 & b5 = b2 & the Sorts of b3 is_transformable_to the Sorts of b4 & b5 is_homomorphism b3,b4 ) )
proof end;
uniqueness
for b1, b2 being set st ( for b3 being set holds
( b3 in b1 iff ex b4, b5 being strict feasible MSAlgebra of c1ex b6 being ManySortedFunction of b4,b5 st
( b4 = c3 & b5 = c4 & b6 = b3 & the Sorts of b4 is_transformable_to the Sorts of b5 & b6 is_homomorphism b4,b5 ) ) ) & ( for b3 being set holds
( b3 in b2 iff ex b4, b5 being strict feasible MSAlgebra of c1ex b6 being ManySortedFunction of b4,b5 st
( b4 = c3 & b5 = c4 & b6 = b3 & the Sorts of b4 is_transformable_to the Sorts of b5 & b6 is_homomorphism b4,b5 ) ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def3 defines MSAlg_morph MSINST_1:def 3 :
for b1 being non empty non void ManySortedSign
for b2 being non empty set
for b3, b4 being set st b3 in MSAlg_set b1,b2 & b4 in MSAlg_set b1,b2 holds
for b5 being set holds
( b5 = MSAlg_morph b1,b2,b3,b4 iff for b6 being set holds
( b6 in b5 iff ex b7, b8 being strict feasible MSAlgebra of b1ex b9 being ManySortedFunction of b7,b8 st
( b7 = b3 & b8 = b4 & b9 = b6 & the Sorts of b7 is_transformable_to the Sorts of b8 & b9 is_homomorphism b7,b8 ) ) );

definition
let c1 be non empty non void ManySortedSign ;
let c2 be non empty set ;
func MSAlgCat c1,c2 -> non empty strict AltCatStr means :Def4: :: MSINST_1:def 4
( the carrier of a3 = MSAlg_set a1,a2 & ( for b1, b2 being Element of MSAlg_set a1,a2 holds the Arrows of a3 . b1,b2 = MSAlg_morph a1,a2,b1,b2 ) & ( for b1, b2, b3 being object of a3
for b4, b5 being Function-yielding Function st b4 in the Arrows of a3 . b1,b2 & b5 in the Arrows of a3 . b2,b3 holds
(the Comp of a3 . b1,b2,b3) . b5,b4 = b5 ** b4 ) );
existence
ex b1 being non empty strict AltCatStr st
( the carrier of b1 = MSAlg_set c1,c2 & ( for b2, b3 being Element of MSAlg_set c1,c2 holds the Arrows of b1 . b2,b3 = MSAlg_morph c1,c2,b2,b3 ) & ( for b2, b3, b4 being object of b1
for b5, b6 being Function-yielding Function st b5 in the Arrows of b1 . b2,b3 & b6 in the Arrows of b1 . b3,b4 holds
(the Comp of b1 . b2,b3,b4) . b6,b5 = b6 ** b5 ) )
proof end;
uniqueness
for b1, b2 being non empty strict AltCatStr st the carrier of b1 = MSAlg_set c1,c2 & ( for b3, b4 being Element of MSAlg_set c1,c2 holds the Arrows of b1 . b3,b4 = MSAlg_morph c1,c2,b3,b4 ) & ( for b3, b4, b5 being object of b1
for b6, b7 being Function-yielding Function st b6 in the Arrows of b1 . b3,b4 & b7 in the Arrows of b1 . b4,b5 holds
(the Comp of b1 . b3,b4,b5) . b7,b6 = b7 ** b6 ) & the carrier of b2 = MSAlg_set c1,c2 & ( for b3, b4 being Element of MSAlg_set c1,c2 holds the Arrows of b2 . b3,b4 = MSAlg_morph c1,c2,b3,b4 ) & ( for b3, b4, b5 being object of b2
for b6, b7 being Function-yielding Function st b6 in the Arrows of b2 . b3,b4 & b7 in the Arrows of b2 . b4,b5 holds
(the Comp of b2 . b3,b4,b5) . b7,b6 = b7 ** b6 ) holds
b1 = b2
proof end;
end;

:: deftheorem Def4 defines MSAlgCat MSINST_1:def 4 :
for b1 being non empty non void ManySortedSign
for b2 being non empty set
for b3 being non empty strict AltCatStr holds
( b3 = MSAlgCat b1,b2 iff ( the carrier of b3 = MSAlg_set b1,b2 & ( for b4, b5 being Element of MSAlg_set b1,b2 holds the Arrows of b3 . b4,b5 = MSAlg_morph b1,b2,b4,b5 ) & ( for b4, b5, b6 being object of b3
for b7, b8 being Function-yielding Function st b7 in the Arrows of b3 . b4,b5 & b8 in the Arrows of b3 . b5,b6 holds
(the Comp of b3 . b4,b5,b6) . b8,b7 = b8 ** b7 ) ) );

registration
let c1 be non empty non void ManySortedSign ;
let c2 be non empty set ;
cluster MSAlgCat a1,a2 -> non empty transitive strict associative with_units ;
coherence
( MSAlgCat c1,c2 is transitive & MSAlgCat c1,c2 is associative & MSAlgCat c1,c2 is with_units )
proof end;
end;

theorem Th6: :: MSINST_1:6
for b1 being non empty set
for b2 being non empty non void ManySortedSign
for b3 being category st b3 = MSAlgCat b2,b1 holds
for b4 being object of b3 holds b4 is strict feasible MSAlgebra of b2
proof end;