Goto Chapter: Top 1 2 3 4 Ind
 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 

2 Lifting and Colifting systems
 2.1 Systems of lifting objects
 2.2 Examples for systems of lifting objects
 2.3 Systems of colifting objects
 2.4 Examples for systems of colifting objects

2 Lifting and Colifting systems

2.1 Systems of lifting objects

Let \(\CC\) be an additive category. A system of lifting objects in \(\CC\) consists of the following data:

2.1-1 IsLiftingObject
‣ IsLiftingObject( A )( property )

Returns: true or false

The argument is an object \(A\). The output is whether or not \(A\) belongs to \(\LL\).

2.1-2 LiftingObject
‣ LiftingObject( A )( attribute )

Returns: an object in \(\LL\)

The argument is an object \(A\). The output is an object \(L_A\) in \(\LL\).

2.1-3 MorphismFromLiftingObject
‣ MorphismFromLiftingObject( A )( attribute )

Returns: a morphism \(L_A \to A\)

The argument is an object \(A\). The output is the distinguished morphism \(\ell_A:L_A \to A\) where \(L_A=\mathrm{LiftingObject}(A)\).

2.1-4 MorphismFromLiftingObjectWithGivenLiftingObject
‣ MorphismFromLiftingObjectWithGivenLiftingObject( A, L_A )( operation )

Returns: a morphism \(L_A \to A\)

The arguments are two objects \(A\) and \(L_A=\mathrm{LiftingObject}(A)\). The output is the distinguished morphism \(\ell_A:L_A \to A\).

2.1-5 SectionOfMorphismFromLiftingObjectWithGivenLiftingObject
‣ SectionOfMorphismFromLiftingObjectWithGivenLiftingObject( A, L_A )( operation )

Returns: a morphism \(A \to L_A\)

The argument is a lifting object \(A\) in \(\LL\) and \(L_A=\mathrm{LiftingObject}(A)\). The output is a section morphism \(s_A:A \to L_A\) of \(\ell_A = \mathrm{MorphismFromLiftingObjectWithGivenLiftingObject}(A,L_A)\).

2.1-6 SectionOfMorphismFromLiftingObject
‣ SectionOfMorphismFromLiftingObject( A )( attribute )

Returns: a morphism \(A \to L_A\)

The argument is a lifting object \(A\) in \(\LL\). The output is a section morphism \(s_A:A \to L_A\) of \(\ell_A = \mathrm{MorphismFromLiftingObject}(A)\).

2.1-7 LiftingMorphismWithGivenLiftingObjects
‣ LiftingMorphismWithGivenLiftingObjects( L_A, alpha, L_B )( operation )

Returns: a morphism \(L_A \to L_B\)

The arguments are an object \(L_A=\mathrm{LiftingObject}(A)\), a morphism \(\alpha:A \to B\) and an object \(L_B=\mathrm{LiftingObject}(B)\). The output is a morphism \(L_{\alpha}:L_A \to L_B\) with \(\comp{L_\alpha}{\ell_B} \sim \comp{\ell_A}{\alpha}\) where \(\ell_A=\mathrm{MorphismFromLiftingObject}(A)\) and \(\ell_B=\mathrm{MorphismFromLiftingObject}(B)\).

2.1-8 LiftingMorphism
‣ LiftingMorphism( alpha )( attribute )

Returns: a morphism \(L_A \to L_B\)

The argument is a morphism \(\alpha:A \to B\). The output is a morphism \(L_{\alpha}:L_A \to L_B\) with \(\comp{L_\alpha}{\ell_B} \sim \comp{\ell_A}{\alpha}\) where \(L_A=\mathrm{LiftingObject}(A)\), \(L_B=\mathrm{LiftingObject}(B)\), \(\ell_A=\mathrm{MorphismFromLiftingObject}(A)\) and \(\ell_B=\mathrm{MorphismFromLiftingObject}(B)\).

2.1-9 IsLiftableAlongMorphismFromLiftingObject
‣ IsLiftableAlongMorphismFromLiftingObject( alpha )( property )

Returns: true or false

The argument is a morphism \(\alpha:A \to B\). The output is whether or not \(\alpha\) lifts along \(\ell_B: L_B \to B\) where \(\ell_B=\mathrm{MorphismFromLiftingObject}(B)\).

2.1-10 WitnessForBeingLiftableAlongMorphismFromLiftingObject
‣ WitnessForBeingLiftableAlongMorphismFromLiftingObject( alpha )( attribute )

Returns: a morphism \(\lambda:A \to L_B\)

The argument is a morphism \(\alpha:A \to B\) which lifts along \(\ell_B:L_B \to B\), where \(\ell_B=\mathrm{MorphismFromLiftingObject}(B)\). The output is a lift morphism \(\lambda:A \to L_B\) of \(\alpha\) along \(\ell_B\), i.e., \(\comp{\lambda}{\ell_B} \sim \alpha\).

2.2 Examples for systems of lifting objects

Let \((\CC,\EE)\) is an exact category with enough \(\EE\)-projective objects. For any object \(A\), there exists a deflation \(p_A:P_A \to A\) from some \(\EE\)-projective object \(P_A\). We define \(\LL\) by the class of all \(\EE\)-projective objects in \(\CC\). For an object \(A\) in \(\CC\), we define the the distinguished object \(L_A\) by \(P_A\) and the distinguished morphism \(\ell_A:L_A\to A\) by \(p_A:P_A \to A\). If \(A\) happens to be an \(\EE\)-projective object, then \(\ell_A\) is a split-epimorphism and its section morphism \(s_A:A \to L_A\) is given by the \(\EE\)-projective lift of \(\id_A\) along the deflation \(\ell_A\). For a morphism \(\alpha: A \to B\), we define \(L_\alpha:L_A \to L_B\) by the \(\EE\)-projective lift of \(\comp{\ell_A}{\alpha}\) along the deflation \(\ell_B\).

Every abelian category \(\CC\) is exact with respect to the class \(\EE\) of all short exact sequences in \(\CC\). The fact that in abelian categories every monomorphism is a kernel of its cokernel and every epimorphism is a cokernel of its kernel implies that a morphism in this category is an inflation if and only if it is a monomorphism; and is a deflation if and only if it is an epimorphism. It also implies that an object in \(\CC\) is \(\EE\)-injective if and only if it is injective in the usual sense, and is \(\EE\)-projective if and only if it is projective in the usual sense.

gap> alpha := mu;
<A morphism in Category of f.p. graded left modules over Q{e0,e1}
(with weights [ -1, -1 ])>
gap> A := Source( alpha );
<An object in Category of f.p. graded left modules over Q{e0,e1}
(with weights [ -1, -1 ])>
gap> B := Range( alpha );
<An object in Category of f.p. graded left modules over Q{e0,e1}
(with weights [ -1, -1 ])>
gap> ell_A := MorphismFromLiftingObject( A );
<A morphism in Category of f.p. graded left modules over Q{e0,e1}
(with weights [ -1, -1 ])>
gap> ell_B := MorphismFromLiftingObject( B );
<A morphism in Category of f.p. graded left modules over Q{e0,e1}
(with weights [ -1, -1 ])>
gap> L_alpha := LiftingMorphism( alpha );
<A morphism in Category of f.p. graded left modules over Q{e0,e1}
(with weights [ -1, -1 ])>
gap> IsCongruentForMorphisms(
>       PreCompose( L_alpha, ell_B ), PreCompose( ell_A, alpha ) 
>     );
true
gap> IsLiftableAlongMorphismFromLiftingObject( alpha );
true
gap> lambda := WitnessForBeingLiftableAlongMorphismFromLiftingObject( alpha );
<A morphism in Category of f.p. graded left modules over Q{e0,e1}
(with weights [ -1, -1 ])>
gap> IsCongruentForMorphisms( PreCompose( lambda, ell_B ), alpha );
true

2.3 Systems of colifting objects

Let \(\CC\) be an additive category. A system of colifting objects in \(\CC\) consists of the following data:

2.3-1 IsColiftingObject
‣ IsColiftingObject( A )( property )

Returns: true or false

The argument is an object \(A\). The output is whether or not \(A\) belongs to \(\QQ\).

2.3-2 ColiftingObject
‣ ColiftingObject( A )( attribute )

Returns: an object in \(\QQ\)

The argument is an object \(A\). The output is an object \(Q_A\) in \(\QQ\).

2.3-3 MorphismToColiftingObject
‣ MorphismToColiftingObject( A )( attribute )

Returns: a morphism \(A \to Q_A\)

The argument is an object \(A\). The output is the distinguished morphism \(q_A:A \to Q_A\) where \(Q_A=\mathrm{ColiftingObject}(A)\).

2.3-4 MorphismToColiftingObjectWithGivenColiftingObject
‣ MorphismToColiftingObjectWithGivenColiftingObject( A, Q_A )( operation )

Returns: a morphism \(A \to Q_A\)

The arguments are two objects \(A\) and \(Q_A=\mathrm{ColiftingObject}(A)\). The output is the distinguished morphism \(q_A:A \to Q_A\).

2.3-5 RetractionOfMorphismToColiftingObjectWithGivenColiftingObject
‣ RetractionOfMorphismToColiftingObjectWithGivenColiftingObject( A, Q_A )( operation )

Returns: a morphism \(Q_A \to A\)

The argument is a colifting object \(A\) in \(\QQ\) and \(Q_A=\mathrm{ColiftingObject}(A)\). The output is a retraction morphism \(r_A:Q_A \to A\) of \(q_A = \mathrm{MorphismToColiftingObjectWithGivenColiftingObject}(A,Q_A)\).

2.3-6 RetractionOfMorphismToColiftingObject
‣ RetractionOfMorphismToColiftingObject( A )( attribute )

Returns: a morphism \(Q_A \to A\)

The argument is a colifting object \(A\) in \(\QQ\). The output is a retraction morphism \(r_A:Q_A \to A\) of \(q_A = \mathrm{MorphismToColiftingObject}(A)\).

2.3-7 ColiftingMorphismWithGivenColiftingObjects
‣ ColiftingMorphismWithGivenColiftingObjects( Q_A, alpha, Q_B )( operation )

Returns: a morphism \(Q_A \to Q_B\)

The arguments are an object \(Q_A=\mathrm{ColiftingObject}(A)\), a morphism \(\alpha:A \to B\) and an object \(Q_B=\mathrm{ColiftingObject}(B)\). The output is a morphism \(Q_{\alpha}:Q_A \to Q_B\) with \(\comp{q_A}{Q_\alpha} \sim \comp{\alpha}{q_B}\) where \(q_A=\mathrm{MorphismToColiftingObject}(A)\) and \(q_B=\mathrm{MorphismToColiftingObject}(B)\).

2.3-8 ColiftingMorphism
‣ ColiftingMorphism( alpha )( attribute )

Returns: a morphism \(Q_A \to Q_B\)

The argument is a morphism \(\alpha : A \to B\). The output is a morphism \(Q_{\alpha}:Q_A \to Q_B\) with \(\comp{q_A}{Q_\alpha} \sim \comp{\alpha}{q_B}\) where \(Q_A=\mathrm{ColiftingObject}(A)\), \(Q_B=\mathrm{ColiftingObject}(B)\), \(q_A=\mathrm{MorphismToColiftingObject}(A)\) and \(q_B=\mathrm{MorphismToColiftingObject}(B)\).

2.3-9 IsColiftableAlongMorphismToColiftingObject
‣ IsColiftableAlongMorphismToColiftingObject( alpha )( property )

Returns: true or false

The argument is a morphism \(\alpha:A \to B\). The output is whether or not \(\alpha\) colifts along \(q_A: A \to Q_A\) where \(q_A=\mathrm{MorphismToColiftingObject}(A)\).

2.3-10 WitnessForBeingColiftableAlongMorphismToColiftingObject
‣ WitnessForBeingColiftableAlongMorphismToColiftingObject( alpha )( attribute )

Returns: a morphism \(\lambda:A \to L_B\)

The argument is a morphism \(\alpha:A \to B\) which colifts along \(q_A:A \to Q_A\), where \(q_A=\mathrm{MorphismToColiftingObject}(A)\). The output is a colift morphism \(\lambda:Q_A \to B\) of \(\alpha\) along \(q_A\), i.e., \(\comp{q_A}{\lambda} \sim \alpha\).

2.4 Examples for systems of colifting objects

2.4-1 The class of E-injective objects in exact categories with enough E-injectives

Let \((\CC,\EE)\) is an exact category with enough \(\EE\)-injective objects. That is, for any object \(A\), there exists an inflation \(\iota_A:A \to I_A\) into some \(\EE\)-injective object \(I_A\). We define \(\QQ\) by the class of all \(\EE\)-injective objects in \(\CC\). For an object \(A\) in \(\CC\), we define the the distinguished object \(Q_A\) by \(I_A\) and the distinguished morphism \(q_A:A\to Q_A\) by \(\iota_A:A \to I_A\). If \(A\) happens to be an \(\EE\)-injective object, then \(q_A\) is a split-monomorphism and its retraction morphism \(r_A:Q_A \to A\) is given by the \(\EE\)-injective colift of \(\id_A\) along the inflation \(q_A\). For a morphism \(\alpha: A \to B\), we define \(Q_\alpha:Q_A\to Q_B\) by the \(\EE\)-injective colift of \(\comp{\alpha}{q_B}\) along the inflation \(q_A\).

For instance, the class of all injective objects in an abelian category with enough injective objects defines a system of colifting objects.

gap> alpha := mu;
<A morphism in Category of f.p. graded left modules over Q{e0,e1}
(with weights [ -1, -1 ])>
gap> A := Source( alpha );
<An object in Category of f.p. graded left modules over Q{e0,e1}
(with weights [ -1, -1 ])>
gap> B := Range( alpha );
<An object in Category of f.p. graded left modules over Q{e0,e1}
(with weights [ -1, -1 ])>
gap> q_A := MorphismToColiftingObject( A );
<A morphism in Category of f.p. graded left modules over Q{e0,e1}
(with weights [ -1, -1 ])>
gap> q_B := MorphismToColiftingObject( B );
<A morphism in Category of f.p. graded left modules over Q{e0,e1}
(with weights [ -1, -1 ])>
gap> Q_alpha := ColiftingMorphism( alpha );
<A morphism in Category of f.p. graded left modules over Q{e0,e1}
(with weights [ -1, -1 ])>
gap> IsCongruentForMorphisms(
>       PreCompose( q_A, Q_alpha ), PreCompose( alpha, q_B )
>     );
true
gap> IsColiftableAlongMorphismToColiftingObject( alpha );
true
gap> lambda := WitnessForBeingColiftableAlongMorphismToColiftingObject( alpha );
<A morphism in Category of f.p. graded left modules over Q{e0,e1}
(with weights [ -1, -1 ])>
gap> IsCongruentForMorphisms( PreCompose( q_A, lambda ), alpha );
true

2.4-2 The class of all objects in arrows categories represented by split-epimorphisms

Let \(\CC\) be an additive category and \(\mathrm{Arr}(\CC)\) its category of arrows, i.e., its objects are morphisms in \(\CC\) and its morphisms are commutative squars in \(\CC\). The class \(\QQ\) of all objects in \(\mathrm{Arr}(\CC)\) that are represented by split-epimorphisms defines a system of colifting objects in \(\mathrm{Arr}(\CC)\). For an object \(A=(\alpha:A_1 \to A_2)\) in \(\mathrm{Arr}(\CC)\), we define \(Q_A\) by and \(q_A: A \to Q_A\) by the commutative square whose legs are and \(\id_{A_2}:A_2 \to A_2\).

If \(A\) belong to \(\QQ\), then \(\alpha:A_1 \to A_2\) is a split-epimorphism and it has a section morphism is \(\gamma: A_2 \to A_1\). In this case \(q_A\) is a split-monomorphism and its retraction morphism is given by the commutative square Let \(B=(\beta:B_1 \to B_2)\) be an object in \(\mathrm{Arr}(\CC)\) and \(\varphi: A \to B\) be a morphism defined by a commutative square We define \(Q_{\varphi}: Q_A \to Q_B\) by the commutative square

The arrows category \(\mathrm{Arr}(\CC)\) is isomorphic to the category of functors \(\mathrm{Hom}(1\to 2,\CC)\), where \(1 \to 2\) is the interval category which is the \(\mathbb{Z}\)-linear closure of the quiver consisting of two vertices \(v_1,v_2\) and an arrow \(m:v_1\to v_2\).

The following operation takes and additive category \(\CC\) and constructs its arrows category \(\mathrm{Arr}(\CC)\) and equipps it with the above system of colifting objects. It requires the GAP package

2.4-3 Code example 1

In the next chapter we will see that the associated stable category is equivalent to the Freyd category of \(\CC\).

gap> ReadPackage( "StableCategories", "examples/doc/CategoryOfArrows-0.g" );
true
gap> MAKE_READ_WRITE_GLOBAL( "REREADING" );
gap> REREADING := true;;
gap> SetInfoLevel( InfoWarning, 0 );
gap> vertices := [ "A_1", "A_2", "B_1", "B_2" ];;
gap> sources := [ 1, 1, 1, 1, 1, 2, 2, 2, 2, 3 ];;
gap> targets := [ 2, 2, 3, 3, 3, 1, 3, 4, 4, 4 ];;
gap> arrows :=  [ "u", "alpha",   "tau", "phi_1", "psi_1",
>              "v", "w", "phi_2", "psi_2", "beta" ];;
gap> quiver := RightQuiver( "quiver", vertices, arrows, sources, targets );
quiver(A_1,A_2,B_1,B_2)[u:A_1->A_2,alpha:A_1->A_2,tau:A_1->B_1,phi_1:A_1->B_1,
psi_1:A_1->B_1,v:A_2->A_1,w:A_2->B_1,phi_2:A_2->B_2,psi_2:A_2->B_2,beta:B_1->B_2]
gap> QQ := HomalgFieldOfRationals( );
Q
gap> oid := Algebroid( QQ, quiver : range_of_HomStructure := MatrixCategory( QQ ) );;
gap> AssignSetOfObjects( oid );
gap> AssignSetOfGeneratingMorphisms( oid );
gap> rels := [
>               PreCompose( v, alpha ),
>               PreCompose( v, tau ),
>               PreCompose( v, phi_1 ),
>               PreCompose( v, psi_1 ),
>               PreCompose( v, u ) - IdentityMorphism( A_2 ),
>               PreCompose( alpha, phi_2 ) - PreCompose( phi_1, beta ),
>               PreCompose( alpha, phi_2 ) - PreCompose( tau, beta ),
>               PreCompose( alpha, psi_2 ) - PreCompose( psi_1, beta ),
>               PreCompose( w, beta ) - psi_2
>            ];
[ (A_2)-[1*(v*alpha)]->(A_2), (A_2)-[1*(v*tau)]->(B_1),
  (A_2)-[1*(v*phi_1)]->(B_1), (A_2)-[1*(v*psi_1)]->(B_1), 
  (A_2)-[1*(v*u) - 1*(A_2)]->(A_2),
  (A_1)-[-1*(phi_1*beta) + 1*(alpha*phi_2)]->(B_2), 
  (A_1)-[-1*(tau*beta) + 1*(alpha*phi_2)]->(B_2),
  (A_1)-[-1*(psi_1*beta) + 1*(alpha*psi_2)]->(B_2), 
  (A_2)-[1*(w*beta) - 1*(psi_2)]->(B_2) ]
gap> oid := oid / rels;;
gap> oid!.Name := "Algebroid( V=4, E=10, Rel=7 )";;
gap> AssignSetOfObjects( oid );
gap> AssignSetOfGeneratingMorphisms( oid );
gap> Aoid := AdditiveClosure( oid );
Additive closure( Algebroid( V=4, E=10, Rel=7 ) )
gap> AAoid := CategoryOfArrows( Aoid );
FunctorCategory( Algebroid( q(2)[m:1->2] ), Additive closure( Algebroid( V=4\
, E=10, Rel=7 ) ) )
gap> 1_m_2 := Source( AAoid );
Algebroid( q(2)[m:1->2] )
gap> Aoid = Range( AAoid );
true
gap> A := CategoryOfArrowsObject( AAoid, [ [ alpha ] ] / Aoid );
<An object in FunctorCategory( Algebroid( q(2)[m:1->2] ), Additive closure( \
Algebroid( V=4, E=10, Rel=7 ) ) )>
gap> IsZeroForObjects( A );
false
gap> B := CategoryOfArrowsObject( AAoid, [ [ beta ] ] / Aoid );
<An object in FunctorCategory( Algebroid( q(2)[m:1->2] ), Additive closure( \
Algebroid( V=4, E=10, Rel=7 ) ) )>
gap> IsZeroForObjects( B );
false
gap> phi := CategoryOfArrowsMorphism(
>             A,
>             [ [ phi_1 ] ] / Aoid,
>             [ [ phi_2 ] ] / Aoid,
>             B
>         );
<A morphism in FunctorCategory( Algebroid( q(2)[m:1->2] ), Additive closure(\
 Algebroid( V=4, E=10, Rel=7 ) ) )>
gap> psi := CategoryOfArrowsMorphism(
>             A,
>             [ [ psi_1 ] ] / Aoid,
>             [ [ psi_2 ] ] / Aoid,
>             B
>         );
<A morphism in FunctorCategory( Algebroid( q(2)[m:1->2] ), Additive closure(\
 Algebroid( V=4, E=10, Rel=7 ) ) )>
gap> IsWellDefined( phi );
true
gap> IsWellDefined( psi );
true
gap> Q_A := ColiftingObject( A );
<An object in FunctorCategory( Algebroid( q(2)[m:1->2] ), Additive closure( \
Algebroid( V=4, E=10, Rel=7 ) ) )>
gap> Q_B := ColiftingObject( B );
<An object in FunctorCategory( Algebroid( q(2)[m:1->2] ), Additive closure( \
Algebroid( V=4, E=10, Rel=7 ) ) )>
gap> q_A := MorphismToColiftingObjectWithGivenColiftingObject( A, Q_A );
<A morphism in FunctorCategory( Algebroid( q(2)[m:1->2] ), Additive closure(\
 Algebroid( V=4, E=10, Rel=7 ) ) )>
gap> q_B := MorphismToColiftingObjectWithGivenColiftingObject( B, Q_B );
<A morphism in FunctorCategory( Algebroid( q(2)[m:1->2] ), Additive closure(\
 Algebroid( V=4, E=10, Rel=7 ) ) )>
gap> Q_phi := ColiftingMorphismWithGivenColiftingObjects( Q_A, phi, Q_B );
<A morphism in FunctorCategory( Algebroid( q(2)[m:1->2] ), Additive closure(\
 Algebroid( V=4, E=10, Rel=7 ) ) )>
gap> IsCongruentForMorphisms( PreCompose( q_A, Q_phi ), PreCompose( phi, q_B ) );
true
gap> Q_psi := ColiftingMorphismWithGivenColiftingObjects( Q_A, psi, Q_B );
<A morphism in FunctorCategory( Algebroid( q(2)[m:1->2] ), Additive closure(\
 Algebroid( V=4, E=10, Rel=7 ) ) )>
gap> IsCongruentForMorphisms( PreCompose( q_A, Q_psi ), PreCompose( psi, q_B ) );
true
gap> IsSplitEpimorphism( [ [ u ] ] / Aoid );
true
gap> U := CategoryOfArrowsObject( AAoid, [ [ u ] ] / Aoid );
<An object in FunctorCategory( Algebroid( q(2)[m:1->2] ), Additive closure( \
Algebroid( V=4, E=10, Rel=7 ) ) )>
gap> IsZeroForObjects( U );
false
gap> Q_U := ColiftingObject( U );
<An object in FunctorCategory( Algebroid( q(2)[m:1->2] ), Additive closure( \
Algebroid( V=4, E=10, Rel=7 ) ) )>
gap> q_U := MorphismToColiftingObjectWithGivenColiftingObject( U, Q_U );
<A morphism in FunctorCategory( Algebroid( q(2)[m:1->2] ), Additive closure(\
 Algebroid( V=4, E=10, Rel=7 ) ) )>
gap> IsSplitMonomorphism( q_U );
true
gap> r_U := RetractionOfMorphismToColiftingObject( U );
<A morphism in FunctorCategory( Algebroid( q(2)[m:1->2] ), Additive closure(\
 Algebroid( V=4, E=10, Rel=7 ) ) )>
gap> IsWellDefined( r_U );
true
gap> IsCongruentForMorphisms( PreCompose( q_U, r_U ), IdentityMorphism( U ) );
true

2.4-4 The class of all contractible objects in complexes categories

Let \(\CC\) be an additive category and \(\Ch{\CC}\) be its cochain complexes category. An object \(A\) in \(\Ch{\CC}\) is called contractible if the identity morphism \(\id_{A}\) is null-homotopic. That is, there exists a family of morphisms \((\lambda^i:A^i\to A^{i-1})_{i\in\mathbb{Z}}\) such that \(\comp{\partial_{A}^i}{\lambda^{i+1}}+\comp{\lambda^i}{\partial_{A}^{i-1}}\sim \id_{A^i}\) for all \(i\in\mathbb{Z}\). An easy verification shows that \(\comp{\alpha}{q_B}\sim\comp{q_A}{Q_\alpha}\).

2.4-5 Code example 2

The following example is an illustration for the system of colifting objects on \(\Ch{\CC}\) where \(\CC\) be additive closure category of the \(\mathbb{Q}\)-algebroid \(\Lambda_{\mathrm{oid}}\) defined by the following quiver

gap> LoadPackage( "StableCategories" );;
gap> LoadPackage( "FunctorCategories" );;
gap> LoadPackage( "FreydCategories" );;
gap> vertices := [ "A_0", "A_1", "A_2", "B_0", "B_1", "B_2" ];;
gap> sources := [ 1, 2, 4, 5, 2, 3, 1, 2, 3, 1, 2, 3 ];;
gap> targets := [ 2, 3, 5, 6, 4, 5, 4, 5, 6, 4, 5, 6 ];;
gap> arrows :=  [
>               "a_0", "a_1", "b_0", "b_1", "h_1", "h_2",
>               "alpha_0", "alpha_1", "alpha_2",
>               "beta_0", "beta_1", "beta_2"
>             ];;
gap> quiver := RightQuiver( "quiver", vertices, arrows, sources, targets );
quiver(A_0,A_1,A_2,B_0,B_1,B_2)[a_0:A_0->A_1,a_1:A_1->A_2,b_0:B_0->B_1,
b_1:B_1->B_2,h_1:A_1->B_0,h_2:A_2->B_1,alpha_0:A_0->B_0,alpha_1:A_1->B_1,
alpha_2:A_2->B_2,beta_0:A_0->B_0,beta_1:A_1->B_1,beta_2:A_2->B_2]
gap> QQ := HomalgFieldOfRationals( );
Q
gap> oid := Algebroid( QQ, quiver );;
gap> AssignSetOfObjects( oid );
gap> AssignSetOfGeneratingMorphisms( oid );
gap> rels := [
>            PreCompose( a_0, a_1 ), PreCompose( b_0, b_1 ),
>            PreCompose( a_0, alpha_1 ) - PreCompose( alpha_0, b_0),
>            PreCompose( a_1, alpha_2 ) - PreCompose( alpha_1, b_1 ),
>            PreCompose( a_0, beta_1 ) - PreCompose( beta_0, b_0 ),
>            PreCompose( a_1, beta_2 ) - PreCompose( beta_1, b_1 ),
>            alpha_0 - beta_0 - PreCompose( a_0, h_1 ),
>            alpha_1 - beta_1 - PreCompose( a_1, h_2 ) - PreCompose( h_1, b_0 ), 
>            alpha_2 - beta_2 - PreCompose( h_2, b_1 )
>         ];
[ (A_0)-[1*(a_0*a_1)]->(A_2), (B_0)-[1*(b_0*b_1)]->(B_2), 
  (A_0)-[-1*(alpha_0*b_0) + 1*(a_0*alpha_1)]->(B_1), 
  (A_1)-[-1*(alpha_1*b_1) + 1*(a_1*alpha_2)]->(B_2),
  (A_0)-[-1*(beta_0*b_0) + 1*(a_0*beta_1)]->(B_1), 
  (A_1)-[-1*(beta_1*b_1) + 1*(a_1*beta_2)]->(B_2),
  (A_0)-[-1*(a_0*h_1) - 1*(beta_0) + 1*(alpha_0)]->(B_0), 
  (A_1)-[-1*(h_1*b_0) - 1*(a_1*h_2) - 1*(beta_1) + 1*(alpha_1)]->(B_1), 
  (A_2)-[-1*(h_2*b_1) - 1*(beta_2) + 1*(alpha_2)]->(B_2) ]
gap> oid := oid / rels;;
gap> oid!.Name := "Algebroid( V=6, E=12, Rel=9 )";;
gap> AssignSetOfObjects( oid );
gap> AssignSetOfGeneratingMorphisms( oid );
gap> Aoid := AdditiveClosure( oid );
Additive closure( Algebroid( V=6, E=12, Rel=9 ) )
gap> Ch_Aoid := CochainComplexCategory( Aoid );
Cochain complexes( Additive closure( Algebroid( V=6, E=12, Rel=9 ) ) )
gap> A := CochainComplex( [ [[a_0]]/Aoid, [[a_1]]/Aoid ], 0 );
<An object in Cochain complexes( Additive closure( Algebroid( V=6, E=12, Rel=9 )
 ) ) with active lower bound 0 and active upper bound 2>
gap> Q_A := ColiftingObject( A );
<An object in Cochain complexes( Additive closure( Algebroid( V=6, E=12, Rel=9 )
 ) ) with active lower bound -1 and active upper bound 2>
gap> q_A := MorphismToColiftingObjectWithGivenColiftingObject( A, Q_A );
<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> IsColiftingObject( Q_A );
true
gap> Q_Q_A := ColiftingObject( Q_A );
<An object in Cochain complexes( Additive closure( Algebroid( V=6, E=12, Rel=9 )
 ) ) with active lower bound -2 and active upper bound 2>
gap> q_Q_A := MorphismToColiftingObject( Q_A );
<A morphism in Cochain complexes( Additive closure( Algebroid( V=6, E=12, Rel=9 )
 ) ) with active lower bound -1 and active upper bound 2>
gap> r_Q_A := RetractionOfMorphismToColiftingObject( Q_A );
<A morphism in Cochain complexes( Additive closure( Algebroid( V=6, E=12, Rel=9 )
 ) ) with active lower bound -1 and active upper bound 2>
gap> IsCongruentForMorphisms(
>         PreCompose( q_Q_A, r_Q_A ), IdentityMorphism( Q_A )
>       );
true
gap> B := CochainComplex( [ [[b_0]]/Aoid, [[b_1]]/Aoid ], 0 );
<An object in Cochain complexes( Additive closure( Algebroid( V=6, E=12, Rel=9 )
 ) ) with active lower bound 0 and active upper bound 2>
gap> Q_B := ColiftingObject( B );
<An object in Cochain complexes( Additive closure( Algebroid( V=6, E=12, Rel=9 )
 ) ) with active lower bound -1 and active upper bound 2>
gap> q_B := MorphismToColiftingObjectWithGivenColiftingObject( B, Q_B );
<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> alpha := CochainMorphism(
>              A, B,
>              [ [[alpha_0]]/Aoid, [[alpha_1]]/Aoid, [[alpha_2]]/Aoid ],
>              0
>          );
<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> IsWellDefined( alpha );
true
gap> Q_alpha := ColiftingMorphismWithGivenColiftingObjects( Q_A, alpha, Q_B );
<A morphism in Cochain complexes( Additive closure( Algebroid( V=6, E=12, Rel=9 )
 ) ) with active lower bound -1 and active upper bound 2>
gap> IsCongruentForMorphisms(
>       PreCompose( alpha, q_B ), PreCompose( q_A, Q_alpha )
>     );
true
gap> beta :=  CochainMorphism(
>              A, B,
>              [ [[beta_0]]/Aoid, [[beta_1]]/Aoid, [[beta_2]]/Aoid ],
>              0
>          );
<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> IsWellDefined( 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
 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 
Goto Chapter: Top 1 2 3 4 Ind

generated by GAPDoc2HTML