Let \(\CC\) be an additive category. A system of lifting objects in \(\CC\) consists of the following data:
A distinguished class \(\LL\) of objects.
Every object \(A\) is equipped with a distinguished object \(L_A\) in \(\LL\) and a distinguished morphism \(\ell_A:L_A \to A\). Furthermore, if \(A\) belongs to \(\LL\), then \(\ell_A\) is a split-epimorphism.
For every morphism \(\alpha:A\to B\), there exists a morphism \(L_{\alpha}\) with \(\comp{L_\alpha}{\ell_B} \sim \comp{\ell_A}{\alpha}\), i.e., we get a commutative diagram:
‣ IsLiftingObject ( A ) | ( property ) |
Returns: true
or false
The argument is an object \(A\). The output is whether or not \(A\) belongs to \(\LL\).
‣ LiftingObject ( A ) | ( attribute ) |
Returns: an object in \(\LL\)
The argument is an object \(A\). The output is an object \(L_A\) in \(\LL\).
‣ 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)\).
‣ 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\).
‣ 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)\).
‣ 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)\).
‣ 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)\).
‣ 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)\).
‣ 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)\).
‣ 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\).
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
Let \(\CC\) be an additive category. A system of colifting objects in \(\CC\) consists of the following data:
A distinguished class \(\QQ\) of objects.
Every object \(A\) is equipped with a distinguished object \(Q_A\) in \(\QQ\) and a distinguished morphism \(q_A:A \to Q_A\). Furthermore, if \(A\) belongs to \(\QQ\), then \(q_A\) is a split-monomorphism.
For every morphism \(\alpha:A\to B\), there exists a morphism \(Q_{\alpha}\) with \(\comp{q_A}{Q_\alpha} \sim \comp{\alpha}{q_B}\), i.e., we get a commutative diagram:
‣ IsColiftingObject ( A ) | ( property ) |
Returns: true
or false
The argument is an object \(A\). The output is whether or not \(A\) belongs to \(\QQ\).
‣ ColiftingObject ( A ) | ( attribute ) |
Returns: an object in \(\QQ\)
The argument is an object \(A\). The output is an object \(Q_A\) in \(\QQ\).
‣ 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)\).
‣ 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\).
‣ 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)\).
‣ 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)\).
‣ 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)\).
‣ 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)\).
‣ 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)\).
‣ 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\).
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
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
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
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}\).
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
generated by GAPDoc2HTML