‣ IsStableCategory ( seq_obj ) | ( filter ) |
Returns: true
or false
The GAP category of stable categories
‣ IsStableCategoryCell ( seq_obj ) | ( filter ) |
Returns: true
or false
The GAP category of stable categories cells.
‣ IsStableCategoryObject ( seq_obj ) | ( filter ) |
Returns: true
or false
The GAP category of stable categories objects.
‣ IsStableCategoryMorphism ( seq_obj ) | ( filter ) |
Returns: true
or false
The GAP category of stable categories morphisms.
‣ StableCategory ( category, f ) | ( operation ) |
Returns: an additive category \CC/I
The arguments are an additive category \CC and a function f which decides whether or a not a morphism \alpha:A \to B in \CC belongs to some two-sided ideal I of morphisms in \CC. The output is the stable category \CC/I.
‣ CongruencyTestFunction ( stable_category ) | ( attribute ) |
Returns: a gap function
The argument is a stable category \CC/I. The output is is a gap function f such that for any \alpha in \CC, [\alpha] \sim 0 if and only if f(\alpha)=\mathrm{true}.
‣ ProjectionFunctor ( stable_category ) | ( attribute ) |
Returns: a functor \CC \to \CC/I
The argument is a stable category \CC/I. The output is the natural projection functor \pi: \CC \to \CC/I.
‣ StableCategoryObject ( stable_category, A ) | ( operation ) |
Returns: [A] in \CC/I
The arguments are a stable category \CC/I and an object A in \CC. The output is [A] in \CC/I.
‣ UnderlyingCell ( class_A ) | ( attribute ) |
Returns: an object in \CC
The argument is an object [A] in a stable category \CC/I. The output is A.
‣ StableCategoryMorphism ( class_A, alpha, class_B ) | ( operation ) |
Returns: [\alpha]:[A]\to [B] in \CC/I
The arguments are an object [A] in a stable category \CC/I, a morphism \alpha:A\to B in \CC and an object [B] in \CC/I. The output is [\alpha] in \CC/I.
‣ StableCategoryMorphism ( alpha ) | ( operation ) |
Returns: [\alpha]:[A]\to [B] in \CC/I
The arguments are a stable category \CC/I and a morphism \alpha:A\to B in \CC. The output is [\alpha] in \CC/I.
‣ UnderlyingCell ( class_alpha ) | ( attribute ) |
Returns: an object in \CC
The argument is a morphism [\alpha] in a stable category \CC/I. The output is \alpha.
If \CC is an abelian category with enough projectives, then the set of all morphisms which factor through some projective object in \CC defines a two-sided ideal I of morphisms. For every object A in \CC, we fix an epimorphism p_A:P_A \to A with P_A a projective object. One can easily verify that a morphism \alpha:A \to B factors through some projective object if and only if it lifts along p_B:P_B \to B. The stable category \CC/I is usually called the stable category of \CC by projectives. Let us illustrate this for the category of finitely presented \mathbb{Z}-modules.
gap> LoadPackage( "FreydCategoriesForCAP" ); true gap> LoadPackage( "StableCategories" ); true gap> ZZ := HomalgRingOfIntegers( ); Z gap> ZZ_rows := CategoryOfRows( ZZ ); Rows( Z ) gap> ZZ_mod := FreydCategory( ZZ_rows ); Freyd( Rows( Z ) ) gap> f := m -> IsLiftable( m, EpimorphismFromSomeProjectiveObject( Range( m ) ) ); function( m ) ... end gap> ZZ_mod_by_projs := StableCategory( ZZ_mod, f ); Stable category( Freyd( Rows( Z ) ) ) defined by f gap> A := HomalgMatrix( [[0,0],[0,2],[0,3]], 3, 2, ZZ ) / ZZ_rows / ZZ_mod; <An object in Freyd( Rows( Z ) )> gap> IsZero( A ); false gap> class_A := StableCategoryObject( ZZ_mod_by_projs, A ); <An object in Stable category( Freyd( Rows( Z ) ) ) defined by f> gap> IsZeroForMorphisms( IdentityMorphism( class_A ) ); true gap> IsZero( class_A ); true gap> IsProjective( A ); true gap> RangeCategoryOfHomomorphismStructure( ZZ_mod ); Freyd( Rows( Z ) ) gap> HasRangeCategoryOfHomomorphismStructure( ZZ_mod_by_projs ); false
In order to be able to lift the homomorphism structure from \CC to \CC/I, we need to equip \CC with more categorical operations (see the next section).
Let \CC be a category equipped with a system \LL of lifting objects. The set of all morphisms \alpha:A \to B which lift along \ell_B:L_B \to B defines a two-sided ideal I_{\LL} of morphisms in \CC. It can be shown that a morphism \alpha: A \to B belongs to I_{\LL} if and only if it factors through at least on object in \LL. The extra structure which is bundled with the system of lifting objects enables us to lift more than additive structure form \CC to \CC/I_{\LL}. This will be illustrated in the next example. The category \CC/{I_{\LL}} can be constructed by the following operation:
‣ StableCategoryByClassOfLiftingObjects ( category ) | ( attribute ) |
Returns: a stable category
The argument is an additive category equipped with a system of lifting objects \LL. The output is the stable category \CC/I_{\LL} where I_{\LL} is the two-sided ideal of morphisms \alpha: A \to B in \CC that lift along \ell_B:L_B \to B.
We found earlier that the class of all \EE-projective objects in any exact category (\CC,\EE) defines a system of lifting objects. Let us illustrate this for the category of finitely presented \mathbb{Z}-modules.
gap> LoadPackage( "FreydCategoriesForCAP" ); true gap> LoadPackage( "StableCategories" ); true gap> ZZ := HomalgRingOfIntegers( ); Z gap> ZZ_rows := CategoryOfRows( ZZ ); Rows( Z ) gap> ZZ_mod := FreydCategory( ZZ_rows ); Freyd( Rows( Z ) ) gap> IsExactCategoryWithEnoughExactProjectives( ZZ_mod ); true gap> ZZ_mod_by_projs := StableCategoryByClassOfLiftingObjects( ZZ_mod ); Stable category( Freyd( Rows( Z ) ) ) defined by a system of lifting objects gap> CongruencyTestFunction( ZZ_mod_by_projs ); <Property "IsLiftableAlongMorphismFromLiftingObject"> gap> A := HomalgMatrix( [[0,0],[0,2],[0,3]], 3, 2, ZZ ) / ZZ_rows / ZZ_mod; <An object in Freyd( Rows( Z ) )> gap> IsZero( A ); false gap> class_A := StableCategoryObject( ZZ_mod_by_projs, A ); <An object in Stable category( Freyd( Rows( Z ) ) ) defined by a system of lifting objects> gap> IsZeroForMorphisms( IdentityMorphism( class_A ) ); true gap> IsZero( class_A ); true gap> IsProjective( A ); true gap> RangeCategoryOfHomomorphismStructure( ZZ_mod ); Freyd( Rows( Z ) ) gap> HasRangeCategoryOfHomomorphismStructure( ZZ_mod_by_projs ); true gap> RangeCategoryOfHomomorphismStructure( ZZ_mod_by_projs ); Freyd( Rows( Z ) )
In the following we create two \mathbb{Z}-modules A and B In the following, we constructe a nonzero morphism \alpha:A \to B with [\alpha]\sim 0.
gap> mat_A := HomalgMatrix( > [ [ 0, 4, -10, 6 ], > [ 10, -8, 10, -10 ], > [ 1, 5, -14, 5 ] ] , 3, 4, ZZ > );; gap> A := mat_A / ZZ_rows / ZZ_mod; <An object in Freyd( Rows( Z ) )> gap> class_A := StableCategoryObject( ZZ_mod_by_projs, A ); <An object in Stable category( Freyd( Rows( Z ) ) ) defined by a system of lifting objects> gap> mat_B := HomalgMatrix( > [ [ 8, -6, -9 ], > [ 8, -4, -9 ] ] , 2, 3, ZZ > );; gap> B := mat_B / ZZ_rows / ZZ_mod; <An object in Freyd( Rows( Z ) )> gap> class_B := StableCategoryObject( ZZ_mod_by_projs, B ); <An object in Stable category( Freyd( Rows( Z ) ) ) defined by a system of lifting objects> gap> mat_alpha := HomalgMatrix( > [ [ 1899716, 264976, 90332035416 ], > [ 2974213, 474929, 241963187751 ], > [ 2974213, 474929, 87104606157 ], > [ 2974213, 209953, -16134448239 ] ] , 4, 3, ZZ > );; gap> alpha := FreydCategoryMorphism( A, mat_alpha / ZZ_rows, B ); <A morphism in Freyd( Rows( Z ) )> gap> IsZero( alpha ); false gap> class_alpha := StableCategoryMorphism( class_A, alpha, class_B ); <A morphism in Stable category( Freyd( Rows( Z ) ) ) defined by a system of lifting objects> gap> IsZero( class_alpha ); true
This means \alpha lifts along \ell_B:L_B \to B. In the following, we compute a lift morphism of \alpha along \ell_B.
gap> IsLiftableAlongMorphismFromLiftingObject( alpha ); true gap> lambda := WitnessForBeingLiftableAlongMorphismFromLiftingObject( alpha ); <A morphism in Freyd( Rows( Z ) )> gap> Display( lambda ); -------------------------------- Source: -------------------------------- Source: A row module over Z of rank 3 Matrix: [ [ 0, 4, -10, 6 ], [ 10, -8, 10, -10 ], [ 1, 5, -14, 5 ] ] Range: A row module over Z of rank 4 A morphism in Rows( Z ) -------------------------------- Morphism datum: -------------------------------- Source: A row module over Z of rank 4 Matrix: [ [ -44715405386652, 89250478674756, 50395165232580 ], [ -119773407285675, 239063782164525, 134987049730125 ], [ -43118426622843, 86062961579229, 48595337902845 ], [ 7984893819045, -15937585477635, -8999136648675 ] ] Range: A row module over Z of rank 3 A morphism in Rows( Z ) -------------------------------- Range: -------------------------------- Source: A row module over Z of rank 0 Matrix: (an empty 0 x 3 matrix) Range: A row module over Z of rank 3 A zero, split monomorphism in Rows( Z ) -------------------------------- General description: -------------------------------- A morphism in Freyd( Rows( Z ) ) gap> ell_B := MorphismFromLiftingObject( B ); <A morphism in Freyd( Rows( Z ) )> gap> Display( ell_B ); -------------------------------- Source: -------------------------------- Source: A row module over Z of rank 0 Matrix: (an empty 0 x 3 matrix) Range: A row module over Z of rank 3 A zero, split monomorphism in Rows( Z ) -------------------------------- Morphism datum: -------------------------------- Source: A row module over Z of rank 3 Matrix: [ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ] Range: A row module over Z of rank 3 An identity morphism in Rows( Z ) -------------------------------- Range: -------------------------------- Source: A row module over Z of rank 2 Matrix: [ [ 8, -6, -9 ], [ 8, -4, -9 ] ] Range: A row module over Z of rank 3 A morphism in Rows( Z ) -------------------------------- General description: -------------------------------- A morphism in Freyd( Rows( Z ) ) gap> IsCongruentForMorphisms( PreCompose( lambda, ell_B ), alpha ); true
Let us compute \mathrm{Hom}(A,B) and \mathrm{Hom}([A],[B]) as \mathbb{Z}-modules a generating set of morphisms for \mathrm{Hom}([A],[B]).
gap> RangeCategoryOfHomomorphismStructure( ZZ_mod ); Freyd( Rows( Z ) ) gap> RangeCategoryOfHomomorphismStructure( ZZ_mod_by_projs ); Freyd( Rows( Z ) ) gap> Hom_AB := HomStructure( A, B ); <An object in Freyd( Rows( Z ) )> gap> Display( Hom_AB ); -------------------------------- Relation morphism: -------------------------------- Source: A row module over Z of rank 8 Matrix: [ [ -7, 6, 0, 1, 0, 16, 0, 1, 0 ], [ -2, 4, 0, 1, 0, 4, 10, 0, 1 ], [ 8, 0, 0, 12, 0, -8, 0, 5, 0 ], [ 9, 0, 0, 8, 4, 0, -8, 0, 5 ], [ -17, 8, 0, -16, 0, 18, 0, -14, 0 ], [ -23, 8, 0, -4, -10, 8, 10, 0, -14 ], [ 12, 6, 9, 6, 0, -10, 0, 5, 0 ], [ 13, 4, 9, 0, 6, 0, -10, 0, 5 ] ] Range: A row module over Z of rank 9 A morphism in Rows( Z ) -------------------------------- General description: -------------------------------- An object in Freyd( Rows( Z ) ) gap> Sim_Hom_AB := SimplifyObject( Hom_AB, infinity ); <An object in Freyd( Rows( Z ) )> gap> Display( Sim_Hom_AB ); -------------------------------- Relation morphism: -------------------------------- Source: A row module over Z of rank 3 Matrix: [ [ 2, 0, 0, 0 ], [ 0, 2, 0, 0 ], [ 0, 0, 2, 0 ] ] Range: A row module over Z of rank 4 A morphism in Rows( Z ) -------------------------------- General description: -------------------------------- An object in Freyd( Rows( Z ) ) gap> Hom_class_A_class_B := HomStructure( class_A, class_B ); <An object in Freyd( Rows( Z ) )> gap> Display( Hom_class_A_class_B ); -------------------------------- Relation morphism: -------------------------------- Source: A row module over Z of rank 11 Matrix: [ [ -7, 6, 0, 1, 0, 16, 0, 1, 0 ], [ -2, 4, 0, 1, 0, 4, 10, 0, 1 ], [ 8, 0, 0, 12, 0, -8, 0, 5, 0 ], [ 9, 0, 0, 8, 4, 0, -8, 0, 5 ], [ -17, 8, 0, -16, 0, 18, 0, -14, 0 ], [ -23, 8, 0, -4, -10, 8, 10, 0, -14 ], [ 12, 6, 9, 6, 0, -10, 0, 5, 0 ], [ 13, 4, 9, 0, 6, 0, -10, 0, 5 ], [ 56694, 5395, 9550, 156285, 0, -9550, 0, 0, 0 ], [ 11665, 1110, 1965, 32156, 0, -1965, 0, 0, 0 ], [ -11191, -1064, -1885, -30848, 0, 1886, 0, 0, 0 ] ] Range: A row module over Z of rank 9 A morphism in Rows( Z ) -------------------------------- General description: -------------------------------- An object in Freyd( Rows( Z ) ) gap> Sim_Hom_class_A_class_B := SimplifyObject( Hom_class_A_class_B, infinity ); <An object in Freyd( Rows( Z ) )> gap> Display( Sim_Hom_class_A_class_B ); -------------------------------- Relation morphism: -------------------------------- Source: A row module over Z of rank 2 Matrix: [ [ 2, 0 ], [ 0, 2 ] ] Range: A row module over Z of rank 2 A morphism in Rows( Z ) -------------------------------- General description: -------------------------------- An object in Freyd( Rows( Z ) )
This means \mathrm{Hom}(A,B) \cong \mathbb{Z}/2\mathbb{Z} \oplus \mathbb{Z}/2\mathbb{Z} \oplus \mathbb{Z}/2\mathbb{Z} \oplus \mathbb{Z} and \mathrm{Hom}([A],[B]) \cong \mathbb{Z}/2\mathbb{Z} \oplus \mathbb{Z}/2\mathbb{Z}.
gap> eta := SimplifyObject_IsoToInputObject( Hom_class_A_class_B, infinity ); <A morphism in Freyd( Rows( Z ) )> gap> IsEqualForObjects( Source( eta ), Sim_Hom_class_A_class_B ); true gap> IsEqualForObjects( Range( eta ), Hom_class_A_class_B ); true gap> IsIsomorphism( eta ); true gap> Display( MorphismDatum( eta ) ); Source: A row module over Z of rank 2 Matrix: [ [ 0, 0, 0, -1, 1, -1, -1, 1, 0 ], [ 0, 0, 0, 0, 1, -1, 0, 0, 1 ] ] Range: A row module over Z of rank 9 A morphism in Rows( Z ) gap> D := DistinguishedObjectOfHomomorphismStructure( ZZ_mod_by_projs ); <A projective object in Freyd( Rows( Z ) )> gap> g1 := HomalgMatrix( [[1,0]], 1, 2, ZZ ); <A 1 x 2 matrix over an internal ring> gap> g1 := FreydCategoryMorphism( D, g1 / ZZ_rows, Sim_Hom_class_A_class_B ); <A morphism in Freyd( Rows( Z ) )> gap> g1 := PreCompose( g1, eta ); <A morphism in Freyd( Rows( Z ) )> gap> g1 := > InterpretMorphismFromDistinguishedObjectToHomomorphismStructureAsMorphism( > class_A, class_B, g1 ); <A morphism in Stable category( Freyd( Rows( Z ) ) ) defined by a system of lifting objects> gap> IsEqualForObjects( Source( g1 ), class_A ); true gap> IsEqualForObjects( Range( g1 ), class_B ); true gap> Display( MorphismDatum( UnderlyingCell( g1 ) ) ); Source: A row module over Z of rank 4 Matrix: [ [ 224824, 217054, 810891 ], [ 893412, 362992, 1844424 ], [ 274828, 165777, 716643 ], [ -168860, 57774, 0 ] ] Range: A row module over Z of rank 3 A morphism in Rows( Z ) gap> IsZero( AdditionForMorphisms( g1, g1 ) ); true gap> g2 := HomalgMatrix( [[0,1]], 1, 2, ZZ ); <A 1 x 2 matrix over an internal ring> gap> g2 := FreydCategoryMorphism( D, g2 / ZZ_rows, Sim_Hom_class_A_class_B ); <A morphism in Freyd( Rows( Z ) )> gap> g2 := PreCompose( g2, eta ); <A morphism in Freyd( Rows( Z ) )> gap> g2 := > InterpretMorphismFromDistinguishedObjectToHomomorphismStructureAsMorphism( > class_A, class_B, g2 ); <A morphism in Stable category( Freyd( Rows( Z ) ) ) defined by a system of lifting objects> gap> IsEqualForObjects( Source( g2 ), class_A ); true gap> IsEqualForObjects( Range( g2 ), class_B ); true gap> Display( MorphismDatum( UnderlyingCell( g2 ) ) ); Source: A row module over Z of rank 4 Matrix: [ [ 457088, 441291, 1648629 ], [ 1816402, 737986, 3749904 ], [ 558754, 337038, 1457010 ], [ -343310, 117463, 0 ] ] Range: A row module over Z of rank 3 A morphism in Rows( Z ) gap> IsZero( AdditionForMorphisms( g2, g2 ) ); true
Let \CC be a category equipped with a system \QQ of colifting objects. The set of all morphisms \alpha:A \to B which colift along q_A:A \to Q_A defines a two-sided ideal I_{\QQ} of morphisms in \CC. It can be shown that a morphism \alpha: A \to B belongs to I_{\QQ} if and only if it factors through at least on object in \QQ. The extra structure which is bundled with the system of colifting objects enables us to lift more than additive structure form \CC to \CC/I_{\LL}. The category \CC/{I_{\QQ}} can be constructed by the following operation:
‣ StableCategoryByClassOfColiftingObjects ( category ) | ( attribute ) |
Returns: a stable category
The argument is an additive category equipped with a system of colifting objects \QQ. The output is the stable category \CC/I_{\QQ} where I_{\QQ} is the two-sided ideal of morphisms \alpha: A \to B in \CC that colift along q_A:A \to Q_A.
In this example we continue the Code example in Subsection We will construct the stable category of \mathrm{Arr}(\CC) where \CC is the additive closure of the \mathbb{Q}-algebroid defined by the quiver
gap> ReadPackage( "StableCategories", "examples/doc/CategoryOfArrows-1.g" ); true gap> AAoid; FunctorCategory( Algebroid( q(2)[m:1->2] ), Additive closure( Algebroid( V=4\ , E=10, Rel=7 ) ) ) gap> St_AAoid := StableCategoryByClassOfColiftingObjects( AAoid ); Stable category( FunctorCategory( Algebroid( q(2)[m:1->2] ), Additive closure( Algebroid( V=4\ , E=10, Rel=7 ) ) ) ) defined by a system of colifting objects gap> class_A := StableCategoryObject( St_AAoid, A ); <An object in Stable category( FunctorCategory( Algebroid( q(2)[m:1->2] ), Additive closure( Algebroid( V=4\ , E=10, Rel=7 ) ) ) ) defined by a system of colifting objects> gap> IsZeroForObjects( class_A ); false gap> class_B := StableCategoryObject( St_AAoid, B ); <An object in Stable category( FunctorCategory( Algebroid( q(2)[m:1->2] ), Additive closure( Algebroid( V=4\ , E=10, Rel=7 ) ) ) ) defined by a system of colifting objects> gap> IsZeroForObjects( class_B ); false gap> class_U := StableCategoryObject( St_AAoid, U ); <An object in Stable category( FunctorCategory( Algebroid( q(2)[m:1->2] ), Additive closure( Algebroid( V=4\ , E=10, Rel=7 ) ) ) ) defined by a system of colifting objects> gap> IsZeroForObjects( class_U ); true gap> class_phi := StableCategoryMorphism( class_A, phi, class_B ); <A morphism in Stable category( FunctorCategory( Algebroid( q(2)[m:1->2] ), Additive closure( Algebroid( V=4\ , E=10, Rel=7 ) ) ) ) defined by a system of colifting objects> gap> IsZeroForMorphisms( class_phi ); false gap> class_psi := StableCategoryMorphism( class_A, psi, class_B ); <A morphism in Stable category( FunctorCategory( Algebroid( q(2)[m:1->2] ), Additive closure( Algebroid( V=4\ , E=10, Rel=7 ) ) ) ) defined by a system of colifting objects> gap> IsZeroForMorphisms( class_psi ); true gap> IsLiftable( [ [ psi_2 ] ] / Aoid, [ [ beta ] ] / Aoid ); true gap> IsCongruentForMorphisms( > PreCompose( [ [ w ] ] / Aoid, [ [ beta ] ] / Aoid ), > [ [ psi_2 ] ] / Aoid > ); true gap> HomStructure( A, B ); <A row module over Q of rank 4> gap> HomStructure( class_A, class_B ); <A row module over Q of rank 1> gap> Hom_class_A_class_B := BasisOfExternalHom( class_A, class_B ); [ <A morphism in Stable category( FunctorCategory( Algebroid( q(2)[m:1->2] ), Additive closure( Algebroid( V=4\ , E=10, Rel=7 ) ) ) ) defined by a system of colifting objects> ] gap> Display( Hom_class_A_class_B[ 1 ] ); A morphism in Stable category( FunctorCategory( Algebroid( q(2)[m:1->2] ), Additive closure( Algebroid( V=4\ , E=10, Rel=7 ) ) ) ) defined by a system of colifting objects defined by the underlying morphism: Image of <(1)>: A 1 x 1 matrix with entries in Algebroid( V=4, E=10, Rel=7 ) [1,1]: (A_1)-[{ 1*(tau) }]->(B_1) Image of <(2)>: A 1 x 1 matrix with entries in Algebroid( V=4, E=10, Rel=7 ) [1,1]: (A_2)-[{ 1*(phi_2) }]->(B_2) A morphism in FunctorCategory( Algebroid( q(2)[m:1->2] ), Additive closure( Algebroid( V=4\ , E=10, Rel=7 ) ) ) given by the above data gap> Freyd_Aoid := FreydCategory( Aoid ); Freyd( Additive closure( Algebroid( V=4, E=10, Rel=7 ) ) ) gap> FA := FreydCategoryObject( [ [ alpha ] ] / Aoid ); <An object in Freyd( Additive closure( Algebroid( V=4, E=10, Rel=7 ) ) )> gap> IsZeroForObjects( FA ); false gap> FB := FreydCategoryObject( [ [ beta ] ] / Aoid ); <An object in Freyd( Additive closure( Algebroid( V=4, E=10, Rel=7 ) ) )> gap> IsZeroForObjects( FB ); false gap> FU := FreydCategoryObject( [ [ u ] ] / Aoid ); <An object in Freyd( Additive closure( Algebroid( V=4, E=10, Rel=7 ) ) )> gap> IsZeroForObjects( FU ); true gap> Fphi := FreydCategoryMorphism( FA, [ [ phi_2 ] ] / Aoid, FB ); <A morphism in Freyd( Additive closure( Algebroid( V=4, E=10, Rel=7 ) ) )> gap> IsZeroForMorphisms( Fphi ); false gap> Fpsi := FreydCategoryMorphism( FA, [ [ psi_2 ] ] / Aoid, FB ); <A morphism in Freyd( Additive closure( Algebroid( V=4, E=10, Rel=7 ) ) )> gap> IsZeroForMorphisms( Fpsi ); true gap> HomStructure( FA, FB ); <A row module over Q of rank 1> gap> Hom_FA_FB := BasisOfExternalHom( FA, FB ); [ <A morphism in Freyd( Additive closure( Algebroid( V=4, E=10, Rel=7 ) ) )> ] gap> Display( Hom_FA_FB[ 1 ] ); -------------------------------- Source: -------------------------------- A 1 x 1 matrix with entries in Algebroid( V=4, E=10, Rel=7 ) [1,1]: (A_1)-[{ 1*(alpha) }]->(A_2) -------------------------------- Morphism datum: -------------------------------- A 1 x 1 matrix with entries in Algebroid( V=4, E=10, Rel=7 ) [1,1]: (A_2)-[{ 1*(phi_2) }]->(B_2) -------------------------------- Range: -------------------------------- A 1 x 1 matrix with entries in Algebroid( V=4, E=10, Rel=7 ) [1,1]: (B_1)-[{ 1*(beta) }]->(B_2) -------------------------------- General description: -------------------------------- A morphism in Freyd( Additive closure( Algebroid( V=4, E=10, Rel=7 ) ) )
In this example we continue the Code example in Subsection the additive closure of the \mathbb{Q}-algebroid defined by the quiver The stable category \Ch{\CC}/I is isomorphic to the bounded homotopy category \Ho{\CC}. This follows from the fact that a morphism \alpha:A \to B in \Ch{\CC} is null-homotopic if and only if it colifts along the q_A:A \to Q_A where q_A is the natural injection of A in the mapping cone of \id_A.
gap> ReadPackage( "StableCategories", "examples/doc/ComplexesCategories-0.g" ); true gap> Ch_Aoid; Cochain complexes( Additive closure( Algebroid( V=6, E=12, Rel=9 ) ) ) gap> St_Ch_Aoid := StableCategoryByClassOfColiftingObjects( Ch_Aoid ); Stable category( Cochain complexes( Additive closure( Algebroid( V=6, E=12, Rel=9 ) ) ) ) defined by a system of colifting objects gap> class_A := StableCategoryObject( St_Ch_Aoid, A ); <An object in Stable category( Cochain complexes( Additive closure( Algebroid( V=6, E=12, Rel=9 ) ) ) ) defined by a system of colifting objects> gap> class_B := StableCategoryObject( St_Ch_Aoid, B ); <An object in Stable category( Cochain complexes( Additive closure( Algebroid( V=6, E=12, Rel=9 ) ) ) ) defined by a system of colifting objects> gap> Hom_AB := HomStructure( A, B ); <A row module over Q of rank 3> gap> Hom_A_B := BasisOfExternalHom( A, B );; gap> Display( Hom_A_B[ 1 ] ); == 2 ======================= A 1 x 1 matrix with entries in Algebroid( V=6, E=12, Rel=9 ) [1,1]: (A_2)-[{ 0 }]->(B_2) == 1 ======================= A 1 x 1 matrix with entries in Algebroid( V=6, E=12, Rel=9 ) [1,1]: (A_1)-[{ 1*(a_1*h_2) + 1*(beta_1) - 1*(alpha_1) }]->(B_1) == 0 ======================= A 1 x 1 matrix with entries in Algebroid( V=6, E=12, Rel=9 ) [1,1]: (A_0)-[{ 1*(beta_0) - 1*(alpha_0) }]->(B_0) A morphism in Cochain complexes( Additive closure( Algebroid( V=6, E=12, Rel=9 ) ) ) given by the above data gap> Display( Hom_A_B[ 2 ] ); == 2 ======================= A 1 x 1 matrix with entries in Algebroid( V=6, E=12, Rel=9 ) [1,1]: (A_2)-[{ 1*(alpha_2) }]->(B_2) == 1 ======================= A 1 x 1 matrix with entries in Algebroid( V=6, E=12, Rel=9 ) [1,1]: (A_1)-[{ 1*(alpha_1) }]->(B_1) == 0 ======================= A 1 x 1 matrix with entries in Algebroid( V=6, E=12, Rel=9 ) [1,1]: (A_0)-[{ 1*(alpha_0) }]->(B_0) A morphism in Cochain complexes( Additive closure( Algebroid( V=6, E=12, Rel=9 ) ) ) given by the above data gap> Display( Hom_A_B[ 3 ] ); == 2 ======================= A 1 x 1 matrix with entries in Algebroid( V=6, E=12, Rel=9 ) [1,1]: (A_2)-[{ 1*(beta_2) }]->(B_2) == 1 ======================= A 1 x 1 matrix with entries in Algebroid( V=6, E=12, Rel=9 ) [1,1]: (A_1)-[{ 1*(beta_1) }]->(B_1) == 0 ======================= A 1 x 1 matrix with entries in Algebroid( V=6, E=12, Rel=9 ) [1,1]: (A_0)-[{ 1*(beta_0) }]->(B_0) A morphism in Cochain complexes( Additive closure( Algebroid( V=6, E=12, Rel=9 ) ) ) given by the above data gap> Hom_class_A_class_B := HomStructure( class_A, class_B ); <A row module over Q of rank 1> gap> Hom_class_A_class_B := BasisOfExternalHom( class_A, class_B );; gap> Display( Hom_class_A_class_B[ 1 ] ); A morphism in Stable category( Cochain complexes( Additive closure( Algebroid( V=6, E=12, Rel=9 ) ) ) ) defined by a system of colifting objects defined by the underlying morphism: == 2 ======================= A 1 x 1 matrix with entries in Algebroid( V=6, E=12, Rel=9 ) [1,1]: (A_2)-[{ 1*(alpha_2) }]->(B_2) == 1 ======================= A 1 x 1 matrix with entries in Algebroid( V=6, E=12, Rel=9 ) [1,1]: (A_1)-[{ 1*(alpha_1) }]->(B_1) == 0 ======================= A 1 x 1 matrix with entries in Algebroid( V=6, E=12, Rel=9 ) [1,1]: (A_0)-[{ 1*(alpha_0) }]->(B_0) A morphism in Cochain complexes( Additive closure( Algebroid( V=6, E=12, Rel=9 ) ) ) given by the above data gap> class_alpha := StableCategoryMorphism( St_Ch_Aoid, alpha ); <A morphism in Stable category( Cochain complexes( Additive closure( Algebroid( V=6, E=12, Rel=9 ) ) ) ) defined by a system of colifting objects> gap> class_beta := StableCategoryMorphism( St_Ch_Aoid, beta ); <A morphism in Stable category( Cochain complexes( Additive closure( Algebroid( V=6, E=12, Rel=9 ) ) ) ) defined by a system of colifting objects> gap> IsCongruentForMorphisms( class_alpha, class_beta ); true gap> gamma := alpha - beta; <A morphism in Cochain complexes( Additive closure( Algebroid( V=6, E=12, Rel=9 ) ) ) with active lower bound 0 and active upper bound 2> gap> IsColiftableAlongMorphismToColiftingObject( gamma ); true gap> w := WitnessForBeingColiftableAlongMorphismToColiftingObject( gamma ); <A morphism in Cochain complexes( Additive closure( Algebroid( V=6, E=12, Rel=9 ) ) ) with active lower bound 0 and active upper bound 2> gap> IsCongruentForMorphisms( PreCompose( q_A, w ), gamma ); true gap> Display( w ); == 2 ======================= A 1 x 1 matrix with entries in Algebroid( V=6, E=12, Rel=9 ) [1,1]: (A_2)-[{ -1*(beta_2) + 1*(alpha_2) }]->(B_2) == 1 ======================= A 2 x 1 matrix with entries in Algebroid( V=6, E=12, Rel=9 ) [1,1]: (A_2)-[{ 1*(h_2) }]->(B_1) [2,1]: (A_1)-[{ -1*(beta_1) + 1*(alpha_1) }]->(B_1) == 0 ======================= A 2 x 1 matrix with entries in Algebroid( V=6, E=12, Rel=9 ) [1,1]: (A_1)-[{ 1*(h_1) }]->(B_0) [2,1]: (A_0)-[{ -1*(beta_0) + 1*(alpha_0) }]->(B_0) A morphism in Cochain complexes( Additive closure( Algebroid( V=6, E=12, Rel=9 ) ) ) given by the above data gap> H := HomotopyMorphisms( gamma ); <ZFunction> gap> Display( H[ 1 ] ); A 1 x 1 matrix with entries in Algebroid( V=6, E=12, Rel=9 ) [1,1]: (A_1)-[{ 1*(h_1) }]->(B_0) gap> Display( H[ 2 ] ); A 1 x 1 matrix with entries in Algebroid( V=6, E=12, Rel=9 ) [1,1]: (A_2)-[{ 1*(h_2) }]->(B_1)
generated by GAPDoc2HTML