Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Ind

### 3 Morphisms

Any GAP object satisfying IsCapCategoryMorphism can be added to a category and then becomes a morphism in this category. Any morphism can belong to one or no category. After a GAP object is added to the category, it knows which things can be computed in its category and to which category it belongs. It knows categorical properties and attributes, and the functions for existential quantifiers can be applied to the morphism.

#### 3.1 Attributes for the Type of Morphisms

##### 3.1-1 CapCategory
 ‣ CapCategory( alpha ) ( attribute )

Returns: a category

The argument is a morphism $$\alpha$$. The output is the category $$\mathbf{C}$$ to which $$\alpha$$ was added.

##### 3.1-2 Source
 ‣ Source( alpha ) ( attribute )

Returns: an object

The argument is a morphism $$\alpha: a \rightarrow b$$. The output is its source $$a$$.

##### 3.1-3 Range
 ‣ Range( alpha ) ( attribute )

Returns: an object

The argument is a morphism $$\alpha: a \rightarrow b$$. The output is its range $$b$$.

##### 3.1-4 Target
 ‣ Target( alpha ) ( attribute )

Returns: an object

The argument is a morphism $$\alpha: a \rightarrow b$$. The output is its target $$b$$.

#### 3.2 Morphism constructors

##### 3.2-1 MorphismConstructor
 ‣ MorphismConstructor( S, a, T ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(S,T)$$

The arguments are two objects $$S$$ and $$T$$ in a category, and a morphism datum $$a$$ (type and semantics of the morphism datum depend on the category). The output is a morphism in $$\mathrm{Hom}(S,T)$$ defined by $$a$$. Note that by default this CAP operation is not cached. You can change this behaviour by calling SetCachingToWeak( C, "MorphismConstructor" ) resp. SetCachingToCrisp( C, "MorphismConstructor" ).

##### 3.2-2 MorphismDatum
 ‣ MorphismDatum( mor ) ( attribute )

Returns: depends on the category

The argument is a CAP category morphism mor. The output is a datum which can be used to construct mor, that is, IsEqualForMorphisms( mor, MorphismConstructor( Source( mor ), MorphismDatum( mor ), Range( mor ) ) ). Note that by default this CAP operation is not cached. You can change this behaviour by calling SetCachingToWeak( C, "MorphismDatum" ) resp. SetCachingToCrisp( C, "MorphismDatum" ).

#### 3.3 Categorical Properties of Morphisms

##### 3.3-1 IsMonomorphism
 ‣ IsMonomorphism( alpha ) ( property )

Returns: a boolean

The argument is a morphism $$\alpha$$. The output is true if $$\alpha$$ is a monomorphism, otherwise the output is false.

##### 3.3-2 IsEpimorphism
 ‣ IsEpimorphism( alpha ) ( property )

Returns: a boolean

The argument is a morphism $$\alpha$$. The output is true if $$\alpha$$ is an epimorphism, otherwise the output is false.

##### 3.3-3 IsIsomorphism
 ‣ IsIsomorphism( alpha ) ( property )

Returns: a boolean

The argument is a morphism $$\alpha$$. The output is true if $$\alpha$$ is an isomorphism, otherwise the output is false.

##### 3.3-4 IsSplitMonomorphism
 ‣ IsSplitMonomorphism( alpha ) ( property )

Returns: a boolean

The argument is a morphism $$\alpha$$. The output is true if $$\alpha$$ is a split monomorphism, otherwise the output is false.

##### 3.3-5 IsSplitEpimorphism
 ‣ IsSplitEpimorphism( alpha ) ( property )

Returns: a boolean

The argument is a morphism $$\alpha$$. The output is true if $$\alpha$$ is a split epimorphism, otherwise the output is false.

##### 3.3-6 IsOne
 ‣ IsOne( alpha ) ( property )

Returns: a boolean

The argument is a morphism $$\alpha: a \rightarrow a$$. The output is true if $$\alpha$$ is congruent to the identity of $$a$$, otherwise the output is false.

##### 3.3-7 IsIdempotent
 ‣ IsIdempotent( alpha ) ( property )

Returns: a boolean

The argument is a morphism $$\alpha: a \rightarrow a$$. The output is true if $$\alpha^2 \sim_{a,a} \alpha$$, otherwise the output is false.

#### 3.4 Random Morphisms

CAP provides two principal methods to generate random morphisms with or without fixed source and range:

• By integers: The integer is simply a parameter that can be used to create a random morphism.

• By lists: The list is used when creating a random morphism would need more than one parameter. Lists offer more flexibility at the expense of the genericity of the methods. This happens because lists that are valid as input in some category may be not valid for other categories. Hence, these operations are not thought to be used in generic categorical algorithms.

##### 3.4-1 RandomMorphismWithFixedSourceByInteger
 ‣ RandomMorphismWithFixedSourceByInteger( a, n ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(a,b)$$

The arguments are an object $$a$$ in a category $$C$$ and an integer $$n$$. The output is a random morphism $$\alpha: a \rightarrow b$$ for some object $$b$$ in $$C$$. If $$C$$ is equipped with the methods RandomObjectByInteger and RandomMorphismWithFixedSourceAndRangeByInteger and $$C$$ is an Ab-category, then RandomMorphismWithFixedSourceByInteger$$(C,a,n)$$ can be derived as RandomMorphismWithFixedSourceAndRangeByInteger($$C$$,$$a$$,$$b$$,$$1$$+Log2Int($$n$$)) where $$b$$ is computed via RandomObjectByInteger($$C$$,$$n$$).

##### 3.4-2 RandomMorphismWithFixedSourceByList
 ‣ RandomMorphismWithFixedSourceByList( a, L ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(a,b)$$

The arguments are an object $$a$$ in a category $$C$$ and a list $$L$$. The output is a random morphism $$\alpha: a \rightarrow b$$ for some object $$b$$ in $$C$$. If $$C$$ is equipped with the methods RandomObjectByList and RandomMorphismWithFixedSourceAndRangeByList and $$C$$ is an Ab-category, then RandomMorphismWithFixedSourceByList$$(C,a,L)$$ can be derived as RandomMorphismWithFixedSourceAndRangeByList($$C,a,b,L[2]$$) where $$b$$ is computed via RandomObjectByList($$C,L[1]$$).

##### 3.4-3 RandomMorphismWithFixedRangeByInteger
 ‣ RandomMorphismWithFixedRangeByInteger( b, n ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(a,b)$$

The arguments are an object $$b$$ in a category $$C$$ and an integer $$n$$. The output is a random morphism $$\alpha: a \rightarrow b$$ for some object $$a$$ in $$C$$. If $$C$$ is equipped with the methods RandomObjectByInteger and RandomMorphismWithFixedSourceAndRangeByInteger and $$C$$ is an Ab-category, then RandomMorphismWithFixedRangeByInteger$$(C,b,n)$$ can be derived as RandomMorphismWithFixedSourceAndRangeByInteger($$C$$,$$a$$,$$b$$,$$1$$+Log2Int($$n$$)) where $$a$$ is computed via RandomObjectByInteger($$C$$,$$n$$).

##### 3.4-4 RandomMorphismWithFixedRangeByList
 ‣ RandomMorphismWithFixedRangeByList( b, L ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(a,b)$$

The arguments are an object $$b$$ in a category $$C$$ and a list $$L$$. The output is a random morphism $$\alpha: a \rightarrow b$$ for some object $$a$$ in $$C$$. If $$C$$ is equipped with the methods RandomObjectByList and RandomMorphismWithFixedSourceAndRangeByList and $$C$$ is an Ab-category, then RandomMorphismWithFixedRangeByList$$(C,b,L)$$ can be derived as RandomMorphismWithFixedSourceAndRangeByList($$C,a,b,L[2]$$) where $$a$$ is computed via RandomObjectByList($$C,L[1]$$).

##### 3.4-5 RandomMorphismWithFixedSourceAndRangeByInteger
 ‣ RandomMorphismWithFixedSourceAndRangeByInteger( a, b, n ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(a,b)$$

The arguments are two objects $$a$$ and $$b$$ in a category $$C$$ and an integer $$n$$. The output is a random morphism $$\alpha: a \rightarrow b$$ in $$C$$.

##### 3.4-6 RandomMorphismWithFixedSourceAndRangeByList
 ‣ RandomMorphismWithFixedSourceAndRangeByList( a, b, L ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(a,b)$$

This operation is not a CAP basic operation The arguments are two objects $$a$$ and $$b$$ in a category $$C$$ and a list $$L$$. The output is a random morphism $$\alpha: a \rightarrow b$$ in $$C$$.

##### 3.4-7 RandomMorphismByInteger
 ‣ RandomMorphismByInteger( C, n ) ( operation )

Returns: a morphism in $$C$$

The arguments are a category $$C$$ and an integer $$n$$. The output is a random morphism in $$C$$. The operation can be derived in three different ways:

• If $$C$$ is equipped with the methods RandomObjectByInteger and RandomMorphismWithFixedSourceAndRangeByInteger and $$C$$ is an Ab-category, then RandomMorphism$$(C,n)$$ can be derived as RandomMorphismWithFixedSourceAndRangeByInteger($$C,a,b$$,$$1$$+Log2Int($$n$$)) where $$a$$ and $$b$$ are computed via RandomObjectByInteger($$C,n$$).

• If $$C$$ is equipped with the methods RandomObjectByInteger and RandomMorphismWithFixedSourceByInteger, then RandomMorphism$$(C,n)$$ can be derived as RandomMorphismWithFixedSourceByInteger($$C,a,1$$+Log2Int($$n$$)) where $$a$$ is computed via RandomObjectByInteger($$C,n$$).

• If $$C$$ is equipped with the methods RandomObjectByInteger and RandomMorphismWithFixedRangeByInteger, then RandomMorphism$$(C,n)$$ can be derived as RandomMorphismWithFixedRangeByInteger($$C,b,1$$+Log2Int($$n$$)) where $$b$$ is computed via RandomObjectByInteger($$C,n$$).

##### 3.4-8 RandomMorphismByList
 ‣ RandomMorphismByList( C, L ) ( operation )

Returns: a morphism in $$C$$

The arguments are a category $$C$$ and a list $$L$$. The output is a random morphism in $$C$$. The operation can be derived in three different ways:

• If $$C$$ is equipped with the methods RandomObjectByList and RandomMorphismWithFixedSourceAndRangeByList and $$C$$ is an Ab-category, then RandomMorphism$$(C,L)$$ can be derived as RandomMorphismWithFixedSourceAndRangeByList($$C,a,b,L[3]$$)) where $$a$$ and $$b$$ are computed via RandomObjectByList($$C,L[i]$$) for $$i=1,2$$ respectively.

• If $$C$$ is equipped with the methods RandomObjectByList and RandomMorphismWithFixedSourceByList, then RandomMorphism$$(C,L)$$ can be derived as RandomMorphismWithFixedSourceByList($$C,a,L[2]$$) where $$a$$ is computed via RandomObjectByList($$C,L[1]$$).

• If $$C$$ is equipped with the methods RandomObjectByList and RandomMorphismWithFixedRangeByList, then RandomMorphism$$(C,L)$$ can be derived as RandomMorphismWithFixedRangeByList($$C,b,L[2]$$) where $$b$$ is computed via RandomObjectByList($$C,L[1]$$).

##### 3.4-9 RandomMorphismWithFixedSource
 ‣ RandomMorphismWithFixedSource( a, n ) ( operation )
 ‣ RandomMorphismWithFixedSource( a, L ) ( operation )
 ‣ RandomMorphismWithFixedRange( b, n ) ( operation )
 ‣ RandomMorphismWithFixedRange( b, L ) ( operation )
 ‣ RandomMorphismWithFixedSourceAndRange( a, b, n ) ( operation )
 ‣ RandomMorphismWithFixedSourceAndRange( a, b, L ) ( operation )
 ‣ RandomMorphism( a, b, n ) ( operation )
 ‣ RandomMorphism( a, b, L ) ( operation )
 ‣ RandomMorphism( C, n ) ( operation )
 ‣ RandomMorphism( C, L ) ( operation )

These are convenient methods and they, depending on the input, delegate to one of the above methods.

#### 3.5 Non-Categorical Properties of Morphisms

Non-categorical properties are not stable under equivalences of categories.

##### 3.5-1 IsEqualToIdentityMorphism
 ‣ IsEqualToIdentityMorphism( alpha ) ( property )

Returns: a boolean

The argument is a morphism $$\alpha: a \rightarrow b$$. The output is true if $$\alpha = \mathrm{id}_a$$, otherwise the output is false.

##### 3.5-2 IsEqualToZeroMorphism
 ‣ IsEqualToZeroMorphism( alpha ) ( property )

Returns: a boolean

The argument is a morphism $$\alpha: a \rightarrow b$$. The output is true if $$\alpha = 0$$, otherwise the output is false.

##### 3.5-3 IsEndomorphism
 ‣ IsEndomorphism( alpha ) ( property )

Returns: a boolean

The argument is a morphism $$\alpha$$. The output is true if $$\alpha$$ is an endomorphism, otherwise the output is false.

##### 3.5-4 IsAutomorphism
 ‣ IsAutomorphism( alpha ) ( property )

Returns: a boolean

The argument is a morphism $$\alpha$$. The output is true if $$\alpha$$ is an automorphism, otherwise the output is false.

#### 3.6 Adding Morphisms to a Category

 ‣ Add( category, morphism ) ( operation )

Adds morphism as a morphism to category.

 ‣ AddMorphism( category, morphism ) ( operation )

Adds morphism as a morphism to category. If morphism already lies in the filter IsCapCategoryMorphism, the operation Add (3.6-1) can be used instead.

 ‣ AddMorphismRepresentation( category, filter ) ( operation )

Deprecated: use CreateCapCategoryWithDataTypes (1.3-4) instead. The argument filter is used to create a morphism type for the category category, which is then used in ObjectifyMorphismWithSourceAndRangeForCAPWithAttributes to objectify morphisms for this category. filter must imply IsCapCategoryMorphism.

##### 3.6-4 ObjectifyMorphismWithSourceAndRangeForCAPWithAttributes
 ‣ ObjectifyMorphismWithSourceAndRangeForCAPWithAttributes( morphism, category, source, range[, attr1, val1, attr2, val2, ...] ) ( function )

Returns: a morphism

Deprecated: use CreateCapCategoryMorphismWithAttributes (3.6-5) instead.

##### 3.6-5 CreateCapCategoryMorphismWithAttributes
 ‣ CreateCapCategoryMorphismWithAttributes( category, source, range[, attr1, val1, attr2, val2, ...] ) ( function )

Returns: a morphism

Creates a morphism in category with the given attributes.

##### 3.6-6 AsCapCategoryMorphism
 ‣ AsCapCategoryMorphism( category, source, value, range ) ( function )

Returns: a morphism

EXPERIMENTAL: This specification might change any time without prior notice. Views value as a morphism from source to range in category.

##### 3.6-7 AsPrimitiveValue
 ‣ AsPrimitiveValue( morphism ) ( attribute )
 ‣ AsInteger( morphism ) ( attribute )
 ‣ AsHomalgMatrix( morphism ) ( attribute )

Returns: a value

EXPERIMENTAL: This specification might change any time without prior notice. Views a morphism obtained via AsCapCategoryMorphism (3.6-6) as a primitive value again. Here, the word primitive means primitive from the perspective of the category. For example, from the perspective of an opposite category, morphisms of the underlying category are primitive values. The attribute is chosen according to the morphism datum type:

• For IsInt, the attribute AsInteger is used.

• For IsHomalgMatrix, the attribute AsHomalgMatrix is used.

In all other cases or if no morphism datum type is given, the attribute AsPrimitiveValue is used.

#### 3.7 Equality and Congruence for Morphisms

##### 3.7-1 IsCongruentForMorphisms
 ‣ IsCongruentForMorphisms( alpha, beta ) ( operation )

Returns: a boolean

The arguments are two morphisms $$\alpha, \beta: a \rightarrow b$$. The output is true if $$\alpha \sim_{a,b} \beta$$, otherwise the output is false.

##### 3.7-2 IsEqualForMorphisms
 ‣ IsEqualForMorphisms( alpha, beta ) ( operation )

Returns: a boolean

The arguments are two morphisms $$\alpha, \beta: a \rightarrow b$$. The output is true if $$\alpha = \beta$$, otherwise the output is false.

##### 3.7-3 IsEqualForMorphismsOnMor
 ‣ IsEqualForMorphismsOnMor( alpha, beta ) ( operation )

Returns: a boolean

The arguments are two morphisms $$\alpha: a \rightarrow b, \beta: c \rightarrow d$$. The output is true if $$\alpha = \beta$$, otherwise the output is false.

#### 3.8 Basic Operations for Morphisms in Ab-Categories

##### 3.8-1 IsZeroForMorphisms
 ‣ IsZeroForMorphisms( alpha ) ( property )

Returns: a boolean

The argument is a morphism $$\alpha: a \rightarrow b$$. The output is true if $$\alpha \sim_{a,b} 0$$, otherwise the output is false.

 ‣ AdditionForMorphisms( alpha, beta ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(a,b)$$

The arguments are two morphisms $$\alpha, \beta: a \rightarrow b$$. The output is the addition $$\alpha + \beta$$. Note: The addition has to be compatible with the congruence of morphisms.

##### 3.8-3 SubtractionForMorphisms
 ‣ SubtractionForMorphisms( alpha, beta ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(a,b)$$

The arguments are two morphisms $$\alpha, \beta: a \rightarrow b$$. The output is the addition $$\alpha - \beta$$. Note: The addition has to be compatible with the congruence of morphisms.

 ‣ AdditiveInverseForMorphisms( alpha ) ( attribute )

Returns: a morphism in $$\mathrm{Hom}(a,b)$$

The argument is a morphism $$\alpha: a \rightarrow b$$. The output is its additive inverse $$-\alpha$$. Note: The addition has to be compatible with the congruence of morphisms.

##### 3.8-5 MultiplyWithElementOfCommutativeRingForMorphisms
 ‣ MultiplyWithElementOfCommutativeRingForMorphisms( r, alpha ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(a,b)$$

The arguments are an element $$r$$ of a commutative ring and a morphism $$\alpha: a \rightarrow b$$. The output is the multiplication with the ring element $$r \cdot \alpha$$. Note: The multiplication has to be compatible with the congruence of morphisms.

##### 3.8-6 *
 ‣ *( r, alpha ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(a,b)$$

This is a convenience method. It has two arguments. The first argument is either a rational number $$q$$ or an element $$r$$ of a commutative ring $$R$$. The second argument is a morphism $$\alpha: a \rightarrow b$$ in a linear category over the commutative ring $$R$$. In the case where the first element is a rational number, this method tries to interpret $$q$$ as an element $$r$$ of $$R$$ via R!.interpret_rationals_func. If no such interpretation exists, this method throws an error. The output is the multiplication with the ring element $$r \cdot \alpha$$.

##### 3.8-7 ZeroMorphism
 ‣ ZeroMorphism( a, b ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(a,b)$$

The arguments are two objects $$a$$ and $$b$$. The output is the zero morphism $$0: a \rightarrow b$$.

#### 3.9 Subobject and Factorobject Operations

Subobjects of an object $$c$$ are monomorphisms with range $$c$$ and a special function for comparision. Similarly, factorobjects of an object $$c$$ are epimorphisms with source $$c$$ and a special function for comparision.

##### 3.9-1 IsEqualAsSubobjects
 ‣ IsEqualAsSubobjects( alpha, beta ) ( operation )

Returns: a boolean

The arguments are two subobjects $$\alpha: a \rightarrow c$$, $$\beta: b \rightarrow c$$. The output is true if there exists an isomorphism $$\iota: a \rightarrow b$$ such that $$\beta \circ \iota \sim_{a,c} \alpha$$, otherwise the output is false.

##### 3.9-2 IsEqualAsFactorobjects
 ‣ IsEqualAsFactorobjects( alpha, beta ) ( operation )

Returns: a boolean

The arguments are two factorobjects $$\alpha: c \rightarrow a$$, $$\beta: c \rightarrow b$$. The output is true if there exists an isomorphism $$\iota: b \rightarrow a$$ such that $$\iota \circ \beta \sim_{c,a} \alpha$$, otherwise the output is false.

##### 3.9-3 IsDominating
 ‣ IsDominating( alpha, beta ) ( operation )

Returns: a boolean

In short: Returns true iff $$\alpha$$ is smaller than $$\beta$$. Full description: The arguments are two subobjects $$\alpha: a \rightarrow c$$, $$\beta: b \rightarrow c$$. The output is true if there exists a morphism $$\iota: a \rightarrow b$$ such that $$\beta \circ \iota \sim_{a,c} \alpha$$, otherwise the output is false.

##### 3.9-4 IsCodominating
 ‣ IsCodominating( alpha, beta ) ( operation )

Returns: a boolean

In short: Returns true iff $$\alpha$$ is smaller than $$\beta$$. Full description: The arguments are two factorobjects $$\alpha: c \rightarrow a$$, $$\beta: c \rightarrow b$$. The output is true if there exists a morphism $$\iota: b \rightarrow a$$ such that $$\iota \circ \beta \sim_{c,a} \alpha$$, otherwise the output is false.

#### 3.10 Identity Morphism and Composition of Morphisms

##### 3.10-1 IdentityMorphism
 ‣ IdentityMorphism( a ) ( attribute )

Returns: a morphism in $$\mathrm{Hom}(a,a)$$

The argument is an object $$a$$. The output is its identity morphism $$\mathrm{id}_a$$.

##### 3.10-2 PreCompose
 ‣ PreCompose( alpha, beta ) ( operation )

Returns: a morphism in $$\mathrm{Hom}( a, c )$$

The arguments are two morphisms $$\alpha: a \rightarrow b$$, $$\beta: b \rightarrow c$$. The output is the composition $$\beta \circ \alpha: a \rightarrow c$$.

##### 3.10-3 PreCompose
 ‣ PreCompose( L ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(a_1, a_{n+1})$$

This is a convenience method. The argument is a list of morphisms $$L = ( \alpha_1: a_1 \rightarrow a_2, \alpha_2: a_2 \rightarrow a_3, \dots, \alpha_n: a_n \rightarrow a_{n+1} )$$. The output is the composition $$\alpha_{n} \circ ( \alpha_{n-1} \circ ( \dots ( \alpha_2 \circ \alpha_1 ) ) )$$.

##### 3.10-4 PreComposeList
 ‣ PreComposeList( s, L, r ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(s, r)$$

The arguments are two objects s = $$a_1$$, r = $$a_{n+1}$$, and a list of morphisms $$L = ( \alpha_1: a_1 \rightarrow a_2, \alpha_2: a_2 \rightarrow a_3, \dots, \alpha_n: a_n \rightarrow a_{n+1} )$$ in $$C$$. The output is the composition $$\alpha_{n} \circ ( \alpha_{n-1} \circ ( \dots ( \alpha_2 \circ \alpha_1 ) ) )$$. If $$L$$ is empty, then $$s$$ must be equal to $$r$$ and the output is congruent to the identity morphism of $$s$$.

##### 3.10-5 PostCompose
 ‣ PostCompose( beta, alpha ) ( operation )

Returns: a morphism in $$\mathrm{Hom}( a, c )$$

The arguments are two morphisms $$\beta: b \rightarrow c$$, $$\alpha: a \rightarrow b$$. The output is the composition $$\beta \circ \alpha: a \rightarrow c$$.

##### 3.10-6 PostCompose
 ‣ PostCompose( L ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(a_1, a_{n+1})$$

This is a convenience method. The argument is a list of morphisms $$L = ( \alpha_n: a_n \rightarrow a_{n+1}, \alpha_{n-1}: a_{n-1} \rightarrow a_n, \dots, \alpha_1: a_1 \rightarrow a_2 )$$. The output is the composition $$((\alpha_{n} \circ \alpha_{n-1}) \circ \dots \alpha_2) \circ \alpha_1$$.

##### 3.10-7 PostComposeList
 ‣ PostComposeList( s, L, r ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(s, r)$$

The arguments are two objects s = $$a_1$$, r = $$a_{n+1}$$, and a list of morphisms $$L = ( \alpha_n: a_n \rightarrow a_{n+1}, \alpha_{n-1}: a_{n-1} \rightarrow a_n, \dots, \alpha_1: a_1 \rightarrow a_2 )$$. The output is the composition $$((\alpha_{n} \circ \alpha_{n-1}) \circ \dots \alpha_2) \circ \alpha_1$$. If $$L$$ is empty, then $$s$$ must be equal to $$r$$ and the output is congruent to the identity morphism of $$s$$.

##### 3.10-8 SumOfMorphisms
 ‣ SumOfMorphisms( s, morphisms, r ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(s,r)$$

The arguments are two objects s, r and a list morphisms of morphisms from s to r. The output is the sum of all elements in morphisms, or the zero-morphism from s to r if morphisms is empty.

##### 3.10-9 LinearCombinationOfMorphisms
 ‣ LinearCombinationOfMorphisms( s, coeffs, mors, r ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(s,r)$$

The arguments are two objects s, r in some linear category over a ring $$R$$, a list coeffs of ring elements in $$R$$ and a list mors of morphisms from s to r. The output is the linear combination of the morphisms in mors with respect to the coefficients list coeffs, or the zero morphism from s to r if coeffs and mors are the empty lists.

#### 3.11 Well-Definedness of Morphisms

##### 3.11-1 IsWellDefinedForMorphisms
 ‣ IsWellDefinedForMorphisms( alpha ) ( operation )

Returns: a boolean

The argument is a morphism $$\alpha$$. The output is true if $$\alpha$$ is well-defined, otherwise the output is false.

##### 3.11-2 IsWellDefinedForMorphismsWithGivenSourceAndRange
 ‣ IsWellDefinedForMorphismsWithGivenSourceAndRange( source, alpha, range ) ( operation )

Returns: a boolean

The arguments are two well-defined objects $$S$$ and $$T$$ and a morphism $$\alpha$$. The output is true if $$\alpha$$ is a well-defined morphism from $$S$$ to $$T$$, otherwise the output is false.

#### 3.12 Lift/Colift

• For any pair of morphisms $$\alpha: a \rightarrow c$$, $$\beta: b \rightarrow c$$, we call each morphism $$\alpha / \beta: a \rightarrow b$$ such that $$\beta \circ (\alpha / \beta) \sim_{a,c} \alpha$$ a lift of $$\alpha$$ along $$\beta$$.

• For any pair of morphisms $$\alpha: a \rightarrow c$$, $$\beta: a \rightarrow b$$, we call each morphism $$\alpha \backslash \beta: c \rightarrow b$$ such that $$(\alpha \backslash \beta) \circ \alpha \sim_{a,b} \beta$$ a colift of $$\beta$$ along $$\alpha$$.

Note that such lifts (or colifts) do not have to be unique. So in general, we do not expect that algorithms computing lifts (or colifts) do this in a functorial way. Thus the operations $$\mathtt{Lift}$$ and $$\mathtt{Colift}$$ are not regarded as categorical operations, but only as set-theoretic operations.

##### 3.12-1 LiftAlongMonomorphism
 ‣ LiftAlongMonomorphism( iota, tau ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(t,k)$$

The arguments are a monomorphism $$\iota: k \hookrightarrow a$$ and a morphism $$\tau: t \rightarrow a$$ such that there is a morphism $$u: t \rightarrow k$$ with $$\iota \circ u \sim_{t,a} \tau$$. The output is such a $$u$$.

##### 3.12-2 ColiftAlongEpimorphism
 ‣ ColiftAlongEpimorphism( epsilon, tau ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(c,t)$$

The arguments are an epimorphism $$\epsilon: a \rightarrow c$$ and a morphism $$\tau: a \rightarrow t$$ such that there is a morphism $$u: c \rightarrow t$$ with $$u \circ \epsilon \sim_{a,t} \tau$$. The output is such a $$u$$.

##### 3.12-3 IsLiftableAlongMonomorphism
 ‣ IsLiftableAlongMonomorphism( iota, tau ) ( operation )

Returns: a boolean

The arguments are a monomorphism $$\iota: k \hookrightarrow a$$ and a morphism $$\tau: t \rightarrow a$$. The output is true if there exists a morphism $$u: t \rightarrow k$$ with $$\iota \circ u \sim_{t,a} \tau$$. Otherwise, the output is false.

##### 3.12-4 IsColiftableAlongEpimorphism
 ‣ IsColiftableAlongEpimorphism( epsilon, tau ) ( operation )

Returns: a boolean

The arguments are an epimorphism $$\epsilon: a \rightarrow c$$ and a morphism $$\tau: a \rightarrow t$$. The output is true if there exists a morphism $$u: c \rightarrow t$$ with $$u \circ \epsilon \sim_{a,t} \tau$$. Otherwise, the output is false.

##### 3.12-5 Lift
 ‣ Lift( alpha, beta ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(a,b)$$

The arguments are two morphisms $$\alpha: a \rightarrow c$$, $$\beta: b \rightarrow c$$ such that a lift $$\alpha / \beta: a \rightarrow b$$ of $$\alpha$$ along $$\beta$$ exists. The output is such a lift $$\alpha / \beta: a \rightarrow b$$. Recall that a lift $$\alpha / \beta: a \rightarrow b$$ of $$\alpha$$ along $$\beta$$ is a morphism such that $$\beta \circ (\alpha / \beta) \sim_{a,c} \alpha$$.

##### 3.12-6 LiftOrFail
 ‣ LiftOrFail( alpha, beta ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(a,b) + \{ \mathtt{fail} \}$$

The arguments are two morphisms $$\alpha: a \rightarrow c$$, $$\beta: b \rightarrow c$$. The output is a lift $$\alpha / \beta: a \rightarrow b$$ of $$\alpha$$ along $$\beta$$ if such a lift exists or $$\mathtt{fail}$$ if it doesn't. Recall that a lift $$\alpha / \beta: a \rightarrow b$$ of $$\alpha$$ along $$\beta$$ is a morphism such that $$\beta \circ (\alpha / \beta) \sim_{a,c} \alpha$$.

##### 3.12-7 IsLiftable
 ‣ IsLiftable( alpha, beta ) ( operation )

Returns: a boolean

The arguments are two morphisms $$\alpha: a \rightarrow c$$, $$\beta: b \rightarrow c$$. The output is true if there exists a lift $$\alpha / \beta: a \rightarrow b$$ of $$\alpha$$ along $$\beta$$, i.e., a morphism such that $$\beta \circ (\alpha / \beta) \sim_{a,c} \alpha$$. Otherwise, the output is false.

##### 3.12-8 Colift
 ‣ Colift( alpha, beta ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(c,b)$$

The arguments are two morphisms $$\alpha: a \rightarrow c$$, $$\beta: a \rightarrow b$$ such that a colift $$\alpha \backslash \beta: c \rightarrow b$$ of $$\beta$$ along $$\alpha$$ exists. The output is such a colift $$\alpha \backslash \beta: c \rightarrow b$$. Recall that a colift $$\alpha \backslash \beta: c \rightarrow b$$ of $$\beta$$ along $$\alpha$$ is a morphism such that $$(\alpha \backslash \beta) \circ \alpha \sim_{a,b} \beta$$.

##### 3.12-9 ColiftOrFail
 ‣ ColiftOrFail( alpha, beta ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(c,b) + \{ \mathtt{fail} \}$$

The arguments are two morphisms $$\alpha: a \rightarrow c$$, $$\beta: a \rightarrow b$$. The output is a colift $$\alpha \backslash \beta: c \rightarrow b$$ of $$\beta$$ along $$\alpha$$ if such a colift exists or $$\mathtt{fail}$$ if it doesn't. Recall that a colift $$\alpha \backslash \beta: c \rightarrow b$$ of $$\beta$$ along $$\alpha$$ is a morphism such that $$(\alpha \backslash \beta) \circ \alpha \sim_{a,b} \beta$$.

##### 3.12-10 IsColiftable
 ‣ IsColiftable( alpha, beta ) ( operation )

Returns: a boolean

The arguments are two morphisms $$\alpha: a \rightarrow c$$, $$\beta: a \rightarrow b$$. The output is true if there exists a colift $$\alpha \backslash \beta: c \rightarrow b$$ of $$\beta$$ along $$\alpha$$., i.e., a morphism such that $$(\alpha \backslash \beta) \circ \alpha \sim_{a,b} \beta$$. Otherwise, the output is false.

#### 3.13 Inverses

Let $$\alpha: a \rightarrow b$$ be a morphism. An inverse of $$\alpha$$ is a morphism $$\alpha^{-1}: b \rightarrow a$$ such that $$\alpha \circ \alpha^{-1} \sim_{b,b} \mathrm{id}_b$$ and $$\alpha^{-1} \circ \alpha \sim_{a,a} \mathrm{id}_a$$.

##### 3.13-1 InverseForMorphisms
 ‣ InverseForMorphisms( alpha ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(b,a)$$

The argument is an isomorphism $$\alpha: a \rightarrow b$$. The output is its inverse $$\alpha^{-1}: b \rightarrow a$$.

##### 3.13-2 PreInverseForMorphisms
 ‣ PreInverseForMorphisms( alpha ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(b,a)$$

The argument is a split-epimorphism $$\alpha: a \rightarrow b$$. The output is a pre-inverse $$\iota: b \rightarrow a$$ of $$\alpha$$, i.e., $$\iota$$ satisfies $$\alpha \circ \iota \sim_{b,b} \mathrm{id}_b$$. The morphism $$\iota$$ is also known as a section or a right-inverse of $$\alpha$$.

##### 3.13-3 PostInverseForMorphisms
 ‣ PostInverseForMorphisms( alpha ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(b,a)$$

The argument is a split-monomorphism $$\alpha: a \rightarrow b$$. The output is a post-inverse $$\pi: b \rightarrow a$$ of $$\alpha$$, i.e., $$\pi$$ satisfies $$\pi \circ \alpha \sim_{a,a} \mathrm{id}_a$$. The morphism $$\pi$$ is also known as a contraction or a left-inverse of $$\alpha$$.

#### 3.14 Tool functions for caches

##### 3.14-1 IsEqualForCacheForMorphisms
 ‣ IsEqualForCacheForMorphisms( phi, psi ) ( operation )

Returns: true or false

By default, CAP uses caches to store the values of Categorical operations. To get a value out of the cache, one needs to compare the input of a basic operation with its previous input. To compare morphisms in the category, IsEqualForCacheForMorphisms is used. By default, IsEqualForCacheForMorphisms falls back to IsEqualForCache (see ToolsForHomalg), which in turn defaults to recursive comparison for lists and IsIdenticalObj in all other cases. If you add a function via AddIsEqualForCacheForMorphisms, that function is used instead. A function $$F: a,b \mapsto bool$$ is expected there. The output has to be true or false. Fail is not allowed in this context.

#### 3.15 IsHomSetInhabited

##### 3.15-1 IsHomSetInhabited
 ‣ IsHomSetInhabited( A, B ) ( operation )

Returns: a boolean

The arguments are two objects A and B. The output is true if there exists a morphism from A to B, otherwise the output is false.

#### 3.16 Homomorphism structures

Homomorphism structures are way to "oversee" the homomorphisms between two given objects. Let $$C$$, $$D$$ be categories. A $$D$$-homomorphism structure for $$C$$ consists of the following data:

• a functor $$H: C^{\mathrm{op}} \times C \rightarrow D$$ (when $$C$$ and $$D$$ are Ab-categories, $$H$$ is assumed to be bilinear).

• an object $$1 \in D$$, called the distinguished object,

• a bijection $$\nu: \mathrm{Hom}_{C}(a,b) \simeq \mathrm{Hom}_{D}(1, H(a,b))$$ natural in $$a,b \in C$$.

##### 3.16-1 HomomorphismStructureOnObjects
 ‣ HomomorphismStructureOnObjects( a, b ) ( operation )

Returns: an object in $$D$$

The arguments are two objects $$a, b$$ in $$C$$. The output is the value of the homomorphism structure on objects $$H(a,b)$$.

##### 3.16-2 HomomorphismStructureOnMorphisms
 ‣ HomomorphismStructureOnMorphisms( alpha, beta ) ( operation )

Returns: a morphism in $$\mathrm{Hom}_{D}(H(a',b), H(a,b'))$$

The arguments are two morphisms $$\alpha: a \rightarrow a', \beta: b \rightarrow b'$$ in $$C$$. The output is the value of the homomorphism structure on morphisms $$H(\alpha, \beta )$$.

##### 3.16-3 HomomorphismStructureOnMorphismsWithGivenObjects
 ‣ HomomorphismStructureOnMorphismsWithGivenObjects( s, alpha, beta, r ) ( operation )

Returns: a morphism in $$\mathrm{Hom}_{D}(H(a',b), H(a,b'))$$

The arguments are an object $$s = H(a',b)$$ in $$D$$, two morphisms $$\alpha: a \rightarrow a', \beta: b \rightarrow b'$$ in $$C$$, and an object $$r = H(a,b')$$ in $$D$$. The output is the value of the homomorphism structure on morphisms $$H(\alpha, \beta )$$.

##### 3.16-4 DistinguishedObjectOfHomomorphismStructure
 ‣ DistinguishedObjectOfHomomorphismStructure( C ) ( attribute )

Returns: an object in $$D$$

The argument is a category $$C$$. The output is the distinguished object $$1$$ in $$D$$ of the homomorphism structure.

##### 3.16-5 InterpretMorphismAsMorphismFromDistinguishedObjectToHomomorphismStructure
 ‣ InterpretMorphismAsMorphismFromDistinguishedObjectToHomomorphismStructure( alpha ) ( attribute )

Returns: a morphism in $$\mathrm{Hom}_{D}(1, H(a,a'))$$

The argument is a morphism $$\alpha: a \rightarrow a'$$ in $$C$$. The output is the corresponding morphism $$\nu( \alpha ): 1 \rightarrow H(a,a')$$ in $$D$$ of the homomorphism structure.

##### 3.16-6 InterpretMorphismAsMorphismFromDistinguishedObjectToHomomorphismStructureWithGivenObjects
 ‣ InterpretMorphismAsMorphismFromDistinguishedObjectToHomomorphismStructureWithGivenObjects( distinguished_object, alpha, r ) ( operation )

Returns: a morphism in $$\mathrm{Hom}_{D}(1, r)$$

The arguments are the distinguished object $$1$$, a morphism $$\alpha: a \rightarrow a'$$, and the object $$r = H(a,a')$$. The output is the corresponding morphism $$\nu( \alpha ): 1 \rightarrow r$$ in $$D$$ of the homomorphism structure.

##### 3.16-7 InterpretMorphismFromDistinguishedObjectToHomomorphismStructureAsMorphism
 ‣ InterpretMorphismFromDistinguishedObjectToHomomorphismStructureAsMorphism( a, a', iota ) ( operation )

Returns: a morphism in $$\mathrm{Hom}_{C}(a,a')$$

The arguments are objects $$a,a'$$ in $$C$$ and a morphism $$\iota: 1 \rightarrow H(a,a')$$ in $$D$$. The output is the corresponding morphism $$\nu^{-1}(\iota): a \rightarrow a'$$ in $$C$$ of the homomorphism structure.

##### 3.16-8 SolveLinearSystemInAbCategory
 ‣ SolveLinearSystemInAbCategory( alpha, beta, gamma ) ( operation )

Returns: a list of morphisms $$[X_1, \dots, X_n]$$

The arguments are three lists $$\alpha$$, $$\beta$$, and $$\gamma$$. The first list $$\alpha$$ (the left coefficients) is a list of list of morphisms $$\alpha_{ij}: A_i \rightarrow B_j$$, where $$i = 1 \dots m$$ and $$j = 1 \dots n$$ for integers $$m,n \geq 1$$. The second list $$\beta$$ (the right coefficients) is a list of list of morphisms $$\beta_{ij}: C_j \rightarrow D_i$$, where $$i = 1 \dots m$$ and $$j = 1 \dots n$$. The third list $$\gamma$$ (the right side) is a list of morphisms $$\gamma_i: A_i \rightarrow D_i$$, where $$i = 1, \dots, m$$. Assumes that a solution to the linear system defined by $$\alpha$$, $$\beta$$, $$\gamma$$ exists, i.e., there exist morphisms $$X_j: B_j \rightarrow C_j$$ for $$j=1\dots n$$ such that $$\sum_{j = 1}^n \alpha_{ij}\cdot X_j \cdot \beta_{ij} = \gamma_i$$ for all $$i = 1 \dots m$$. The output is list of such morphisms $$X_j: B_j \rightarrow C_j$$ for $$j=1\dots n$$.

##### 3.16-9 SolveLinearSystemInAbCategoryOrFail
 ‣ SolveLinearSystemInAbCategoryOrFail( alpha, beta, gamma ) ( operation )

Returns: a list of morphisms $$[X_1, \dots, X_n]$$ or fail

Like SolveLinearSystemInAbCategory, but without the assumption that a solution exists. If no solution exists, fail is returned.

##### 3.16-10 MereExistenceOfSolutionOfLinearSystemInAbCategory
 ‣ MereExistenceOfSolutionOfLinearSystemInAbCategory( alpha, beta, gamma ) ( operation )

Returns: a boolean

Like SolveLinearSystemInAbCategory, but the output is simply true if a solution exists, false otherwise.

##### 3.16-11 HomStructure
 ‣ HomStructure( alpha, beta ) ( operation )

Returns: a morphism in $$\mathrm{Hom}_{D}(H(a',b), H(a,b'))$$

This is a convenience method. The arguments are two morphisms $$\alpha: a \rightarrow a', \beta: b \rightarrow b'$$ in $$C$$. The output is HomomorphismStructureOnMorphisms called on $$\alpha$$, $$\beta$$.

##### 3.16-12 HomStructure
 ‣ HomStructure( alpha, b ) ( operation )

Returns: a morphism in $$\mathrm{Hom}_{D}(H(a',b), H(a,b))$$

This is a convenience method. The arguments are a morphism $$\alpha: a \rightarrow a'$$ and an object $$b$$ in $$C$$. The output is HomomorphismStructureOnMorphisms called on $$\alpha$$, $$\mathrm{id}_b$$.

##### 3.16-13 HomStructure
 ‣ HomStructure( a, beta ) ( operation )

Returns: a morphism in $$\mathrm{Hom}_{D}(H(a,b), H(a,b'))$$

This is a convenience method. The arguments are an object $$a$$ and a morphism $$\beta: b \rightarrow b'$$ in $$C$$. The output is HomomorphismStructureOnMorphisms called on $$\mathrm{id}_a$$, $$\beta$$.

##### 3.16-14 HomStructure
 ‣ HomStructure( a, b ) ( operation )

Returns: an object

This is a convenience method. The arguments are two objects $$a$$ and $$b$$ in $$C$$. The output is HomomorphismStructureOnObjects called on $$a,b$$.

##### 3.16-15 HomStructure
 ‣ HomStructure( arg ) ( operation )

This is a convenience method for InterpretMorphismAsMorphismFromDistinguishedObjectToHomomorphismStructure.

##### 3.16-16 HomStructure
 ‣ HomStructure( arg1, arg2, arg3 ) ( operation )

This is a convenience method for InterpretMorphismFromDistinguishedObjectToHomomorphismStructureAsMorphism.

##### 3.16-17 HomStructure
 ‣ HomStructure( arg ) ( operation )

This is a convenience method for DistinguishedObjectOfHomomorphismStructure.

##### 3.16-18 ExtendRangeOfHomomorphismStructureByFullEmbedding
 ‣ ExtendRangeOfHomomorphismStructureByFullEmbedding( C, E, object_function, morphism_function, object_function_inverse, morphism_function_inverse ) ( operation )
 ‣ HomomorphismStructureOnObjectsExtendedByFullEmbedding( C, E, a, b ) ( operation )
 ‣ HomomorphismStructureOnMorphismsExtendedByFullEmbedding( C, E, alpha, beta ) ( operation )
 ‣ HomomorphismStructureOnMorphismsWithGivenObjectsExtendedByFullEmbedding( C, E, s, alpha, beta, r ) ( operation )
 ‣ DistinguishedObjectOfHomomorphismStructureExtendedByFullEmbedding( C, E ) ( operation )
 ‣ InterpretMorphismAsMorphismFromDistinguishedObjectToHomomorphismStructureExtendedByFullEmbedding( C, E, alpha ) ( operation )
 ‣ InterpretMorphismAsMorphismFromDistinguishedObjectToHomomorphismStructureWithGivenObjectsExtendedByFullEmbedding( C, E, distinguished_object, alpha, r ) ( operation )
 ‣ InterpretMorphismFromDistinguishedObjectToHomomorphismStructureAsMorphismExtendedByFullEmbedding( C, E, a, a', iota ) ( operation )

Returns: nothing

If $$\iota\colon D \to E$$ is a full embedding of categories, every $$D$$-homomorphism structure for a category $$C$$ extends to a $$E$$-homomorphism structure for $$C$$. This operations accepts four functions and installs operations DistinguishedObjectOfHomomorphismStructureExtendedByFullEmbedding, HomomorphismStructureOnObjectsExtendedByFullEmbedding etc. which correspond to the $$E$$-homomorphism structure for $$C$$. Note: To distinguish embeddings in different categories, in addition to $$C$$ also $$E$$ is passed to the operations. When using this with different embeddings with the range category $$E$$, only the last embedding will be used. The arguments are:

• object_function gets the categories $$C$$ and $$E$$ and an object in $$D$$.

• morphism_function gets the categories $$C$$ and $$E$$, an object in $$E$$, a morphism in $$D$$ and another object in $$E$$. The objects are the results of object_function applied to the source and range of the morphism.

• object_function_inverse gets the categories $$C$$ and $$E$$ and an object in $$E$$.

• morphism_function_inverse gets the categories $$C$$ and $$E$$, an object in $$D$$, a morphism in $$E$$ and another object in $$D$$. The objects are the results of object_function_inverse applied to the source and range of the morphism.

object_function and morphism_function define the embedding. object_function_inverse and morphism_function_inverse define the inverse of the embedding on its image.

##### 3.16-19 ExtendRangeOfHomomorphismStructureByIdentityAsFullEmbedding
 ‣ ExtendRangeOfHomomorphismStructureByIdentityAsFullEmbedding( C ) ( operation )

Returns: nothing

Chooses the identity on $$D$$ as the full embedding in ExtendRangeOfHomomorphismStructureByFullEmbedding (3.16-18). This is useful to handle this case as a degenerate case of ExtendRangeOfHomomorphismStructureByFullEmbedding (3.16-18).

##### 3.16-20 MorphismsOfExternalHom
 ‣ MorphismsOfExternalHom( a, b ) ( operation )

Returns: a list of morphisms in $$\mathrm{Hom}( a, b )$$

The argument are two objects a, b. The output is a list of all morphisms from a to b.

##### 3.16-21 BasisOfExternalHom
 ‣ BasisOfExternalHom( a, b ) ( operation )

Returns: a list of morphisms in $$\mathrm{Hom}_{C}(a,b)$$

The arguments are objects $$a,b$$ in a $$k$$-linear category $$C$$. The output is a list $$L$$ of morphisms which is a basis of $$\mathrm{Hom}_{C}(a,b)$$ in the sense that any given morphism $$\alpha: a \to b$$ can uniquely be written as a linear combination of $$L$$ with the coefficients in CoefficientsOfMorphism($$\alpha$$).

##### 3.16-22 CoefficientsOfMorphism
 ‣ CoefficientsOfMorphism( alpha ) ( attribute )

Returns: a list of elements in $$k$$

This is a convenience method. The argument is a morphism $$\alpha: a \to b$$ in a $$k$$-linear category $$C$$. The output is a list of coefficients of $$\alpha$$ with respect to the list BasisOfExternalHom(a,b).

#### 3.17 Simplified Morphisms

Let $$\phi: A \rightarrow B$$ be a morphism. There are several different natural ways to look at $$\phi$$ as an object in an ambient category:

• $$\mathrm{Hom}( A, B )$$, the set of homomorphisms with the equivalence relation $$\mathtt{IsCongruentForMorphisms}$$ regarded as a category,

• $$\sum_{A}\mathrm{Hom}( A, B )$$, the category of morphisms where the range is fixed,

• $$\sum_{B}\mathrm{Hom}( A, B )$$, the category of morphisms where the source is fixed,

• $$\sum_{A,B}\mathrm{Hom}( A, B )$$, the category of morphisms where neither source nor range is fixed,

and furthermore, if $$\phi$$ happens to be an endomorphism $$A \rightarrow A$$, we also have

• $$\sum_{A}\mathrm{Hom}(A,A)$$, the category of endomorphisms.

Let $$\mathbf{C}$$ be one of the categories above in which $$\phi$$ may reside as an object, and let $$i$$ be a non-negative integer or $$\infty$$. CAP provides commands for passing from $$\phi$$ to $$\phi_i$$, where $$\phi_i$$ is isomorphic to $$\phi$$ in $$\mathbf{C}$$, but "simpler". The idea is that the greater the $$i$$, the "simpler" the $$\phi_i$$ (but this could mean the harder the computation), with $$\infty$$ as a possible value. The case $$i = 0$$ defaults to the identity operator for all simplifications. For the Add-operatations, only the cases $$i \geq 1$$ have to be given as functions.

$$\$$

If we regard $$\phi$$ as an object in the category $$\mathrm{Hom}( A, B )$$, $$\phi_i$$ is again in $$\mathrm{Hom}( A, B )$$ such that $$\phi \sim_{A,B} \phi_i$$. This case is handled by the following commands:

##### 3.17-1 SimplifyMorphism
 ‣ SimplifyMorphism( phi, i ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(A,B)$$

The arguments are a morphism $$\phi: A \rightarrow B$$ and a non-negative integer $$i$$ or infinity. The output is a simplified morphism $$\phi_i$$.

$$\$$

If we regard $$\phi$$ as an object in the category $$\sum_{A}\mathrm{Hom}( A, B )$$, then $$\phi_i$$ is a morphism of type $$A_i \rightarrow B$$ and there is an isomorphism $$\sigma_i: A \rightarrow A_i$$ such that $$\phi_i \circ \sigma_i \sim_{A,B} \phi$$. This case is handled by the following commands:

##### 3.17-2 SimplifySource
 ‣ SimplifySource( phi, i ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(A_i,B)$$

The arguments are a morphism $$\phi: A \rightarrow B$$ and a non-negative integer $$i$$ or infinity. The output is a simplified morphism with simplified source $$\phi_i: A_i \rightarrow B$$.

##### 3.17-3 SimplifySource_IsoToInputObject
 ‣ SimplifySource_IsoToInputObject( phi, i ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(A_i,A)$$

The arguments are a morphism $$\phi: A \rightarrow B$$ and a non-negative integer $$i$$ or infinity. The output is the isomorphism $$(\sigma_i)^{-1}: A_i \rightarrow A$$.

##### 3.17-4 SimplifySource_IsoFromInputObject
 ‣ SimplifySource_IsoFromInputObject( phi, i ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(A,A_i)$$

The arguments are a morphism $$\phi: A \rightarrow B$$ and a non-negative integer $$i$$ or infinity. The output is the isomorphism $$\sigma_i: A \rightarrow A_i$$.

$$\$$

If we regard $$\phi$$ as an object in the category $$\sum_{B}\mathrm{Hom}( A, B )$$, then $$\phi_i$$ is a morphism of type $$A \rightarrow B_i$$ and there is an isomorphism $$\rho_i: B \rightarrow B_i$$ such that $$\rho_i^{-1} \circ \phi_i\sim_{A,B} \phi$$. This case is handled by the following commands:

##### 3.17-5 SimplifyRange
 ‣ SimplifyRange( phi, i ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(A,B_i)$$

The arguments are a morphism $$\phi: A \rightarrow B$$ and a non-negative integer $$i$$ or infinity. The output is a simplified morphism with simplified range $$\phi_i: A \rightarrow B_i$$.

##### 3.17-6 SimplifyRange_IsoToInputObject
 ‣ SimplifyRange_IsoToInputObject( phi, i ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(B_i,B)$$

The arguments are a morphism $$\phi: A \rightarrow B$$ and a non-negative integer $$i$$ or infinity. The output is the isomorphism $$(\rho_i)^{-1}: B_i \rightarrow B$$.

##### 3.17-7 SimplifyRange_IsoFromInputObject
 ‣ SimplifyRange_IsoFromInputObject( phi, i ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(B,B_i)$$

The arguments are a morphism $$\phi: A \rightarrow B$$ and a non-negative integer $$i$$ or infinity. The output is the isomorphism $$\rho_i: B \rightarrow B_i$$.

$$\$$

If we regard $$\phi$$ as an object in the category $$\sum_{A, B}\mathrm{Hom}( A, B )$$, then $$\phi_i$$ is a morphism of type $$A_i \rightarrow B_i$$ and there is are isomorphisms $$\sigma_i: A \rightarrow A_i$$ and $$\rho_i: B \rightarrow B_i$$ such that $$\rho_i^{-1} \circ \phi_i \circ \sigma_i \sim_{A,B} \phi$$. This case is handled by the following commands:

##### 3.17-8 SimplifySourceAndRange
 ‣ SimplifySourceAndRange( phi, i ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(A_i,B_i)$$

The arguments are a morphism $$\phi: A \rightarrow B$$ and a non-negative integer $$i$$ or infinity. The output is a simplified morphism with simplified source and range $$\phi_i: A_i \rightarrow B_i$$.

##### 3.17-9 SimplifySourceAndRange_IsoToInputRange
 ‣ SimplifySourceAndRange_IsoToInputRange( phi, i ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(B_i,B)$$

The arguments are a morphism $$\phi: A \rightarrow B$$ and a non-negative integer $$i$$ or infinity. The output is the isomorphism $$(\rho_i)^{-1}: B_i \rightarrow B$$.

##### 3.17-10 SimplifySourceAndRange_IsoFromInputRange
 ‣ SimplifySourceAndRange_IsoFromInputRange( phi, i ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(B,B_i)$$

The arguments are a morphism $$\phi: A \rightarrow B$$ and a non-negative integer $$i$$ or infinity. The output is the isomorphism $$\rho_i: B \rightarrow B_i$$.

##### 3.17-11 SimplifySourceAndRange_IsoToInputSource
 ‣ SimplifySourceAndRange_IsoToInputSource( phi, i ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(A_i,A)$$

The arguments are a morphism $$\phi: A \rightarrow B$$ and a non-negative integer $$i$$ or infinity. The output is the isomorphism $$(\sigma_i)^{-1}: A_i \rightarrow A$$.

##### 3.17-12 SimplifySourceAndRange_IsoFromInputSource
 ‣ SimplifySourceAndRange_IsoFromInputSource( phi, i ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(A,A_i)$$

The arguments are a morphism $$\phi: A \rightarrow B$$ and a non-negative integer $$i$$ or infinity. The output is the isomorphism $$\sigma_i: A \rightarrow A_i$$.

$$\$$

If $$\phi:A \rightarrow A$$ is an endomorphism, we may regard it as an object in the category $$\sum_{A}\mathrm{Hom}( A, A )$$. In this case $$\phi_i$$ is a morphism of type $$A_i \rightarrow A_i$$ and there is an isomorphism $$\sigma_i: A \rightarrow A_i$$ such that $$\sigma_i^{-1} \circ \phi_i \circ \sigma_i \sim_{A,A} \phi$$. This case is handled by the following commands:

##### 3.17-13 SimplifyEndo
 ‣ SimplifyEndo( phi, i ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(A_i,A_i)$$

The arguments are an endomorphism $$\phi: A \rightarrow A$$ and a non-negative integer $$i$$ or infinity. The output is a simplified endomorphism $$\phi_i: A_i \rightarrow A_i$$.

##### 3.17-14 SimplifyEndo_IsoToInputObject
 ‣ SimplifyEndo_IsoToInputObject( phi, i ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(A_i,A)$$

The arguments are an endomorphism $$\phi: A \rightarrow A$$ and a non-negative integer $$i$$ or infinity. The output is the isomorphism $$(\sigma_i)^{-1}: A_i \rightarrow A$$.

##### 3.17-15 SimplifyEndo_IsoFromInputObject
 ‣ SimplifyEndo_IsoFromInputObject( phi, i ) ( operation )

Returns: a morphism in $$\mathrm{Hom}(A,A_i)$$

The arguments are an endomorphism $$\phi: A \rightarrow A$$ and a non-negative integer $$i$$ or infinity. The output is the isomorphism $$\sigma_i: A \rightarrow A_i$$.

##### 3.17-16 Simplify
 ‣ Simplify( phi ) ( attribute )

Returns: a morphism in $$\mathrm{Hom}(A_{\infty},B_{\infty})$$

This is a convenient method. The argument is a morphism $$\phi: A \rightarrow B$$. The output is a "simplified" version of $$\phi$$ that may change the source and range of $$\phi$$ (up to isomorphism). To be precise, the output is an $$\infty$$-th simplified morphism of $$(\iota_A^{\infty})^{-1}\circ \phi \circ \iota_A^{\infty}$$.

#### 3.18 Reduction by split epi summands

Let $$\alpha: A \rightarrow B$$ be a morphism in an additive category. Suppose we are given direct sum decompositions of $$A \simeq A' \oplus A''$$ and $$B \simeq B' \oplus B''$$ such that If $$\alpha''$$ is a split epimorphism, then we call $$\alpha': A' \rightarrow B'$$ some reduction of $$\alpha$$ by split epi summands. The inclusions/projections of the decompositions into direct sums induce commutative diagrams and

##### 3.18-1 SomeReductionBySplitEpiSummand
 ‣ SomeReductionBySplitEpiSummand( alpha ) ( attribute )

Returns: a morphism in $$\mathrm{Hom}(A',B')$$

The argument is a morphism $$\alpha: A \rightarrow B$$. The output is some reduction of $$\alpha$$ by split epi summands $$\alpha': A' \rightarrow B'$$.

##### 3.18-2 SomeReductionBySplitEpiSummand_MorphismToInputRange
 ‣ SomeReductionBySplitEpiSummand_MorphismToInputRange( alpha ) ( attribute )

Returns: a morphism in $$\mathrm{Hom}(B',B)$$

The argument is a morphism $$\alpha: A \rightarrow B$$. The output is the morphism $$\beta': B' \rightarrow B$$ linking $$\alpha$$ with some reduction by split epi summands.

##### 3.18-3 SomeReductionBySplitEpiSummand_MorphismFromInputRange
 ‣ SomeReductionBySplitEpiSummand_MorphismFromInputRange( alpha ) ( attribute )

Returns: a morphism in $$\mathrm{Hom}(B,B')$$

The argument is a morphism $$\alpha: A \rightarrow B$$. The output is the morphism $$\beta: B \rightarrow B'$$ linking $$\alpha$$ with some reduction by split epi summands.

Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Ind

generated by GAPDoc2HTML