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