# getBoundaryPreimage -- Attempt to find a preimage of a boundary under the differential of a DGAlgebra.

## Synopsis

• Usage:
(lifted,myLift) = getBoundaryPreimage(A,z)
• Inputs:
• Outputs:
• seq, ,

## Description

The first element in the return value is a boolean value indicating whether the lift was possible. If true, the second coordinate of the return value is the lift. If false, then the second coordinate of the return value is the reduction of the input modulo the image.

 i1 : Q = QQ[x_1,x_2,y_1,y_2,z] o1 = Q o1 : PolynomialRing i2 : I = ideal (x_1*x_2^2,y_1*y_2^2,z^3,x_1*x_2*y_1*y_2,y_2^2*z^2,x_2^2*z^2,x_1*y_1*z,x_2^2*y_2^2*z) 2 2 3 2 2 2 2 2 2 o2 = ideal (x x , y y , z , x x y y , y z , x z , x y z, x y z) 1 2 1 2 1 2 1 2 2 2 1 1 2 2 o2 : Ideal of Q i3 : R = Q/I o3 = R o3 : QuotientRing i4 : KR = koszulComplexDGA R o4 = {Ring => R } Underlying algebra => R[T ..T ] 1 5 Differential => {x , x , y , y , z} 1 2 1 2 o4 : DGAlgebra

The following are cycles:

 i5 : z1 = z^2*T_5 2 o5 = z T 5 o5 : R[T ..T ] 1 5 i6 : z2 = y_2^2*T_3 2 o6 = y T 2 3 o6 : R[T ..T ] 1 5 i7 : z3 = x_2^2*T_1 2 o7 = x T 2 1 o7 : R[T ..T ] 1 5 i8 : {diff(KR,z1),diff(KR,z1),diff(KR,z1)} o8 = {0, 0, 0} o8 : List

and z1*z2, z2*z3 vanish in homology:

 i9 : (lifted12,lift12) = getBoundaryPreimage(KR,z1*z2) o9 = (true, 0) o9 : Sequence i10 : (lifted23,lift23) = getBoundaryPreimage(KR,z2*z3) 2 o10 = (true, x y T T T - x x y T T T ) 2 2 1 2 3 1 2 2 2 3 4 o10 : Sequence

We can check that the differential of the lift is the supposed boundary:

 i11 : diff(KR,lift23) == z2*z3 o11 = true

## Ways to use getBoundaryPreimage :

• "getBoundaryPreimage(DGAlgebra,List)"
• "getBoundaryPreimage(DGAlgebra,RingElement)"

## For the programmer

The object getBoundaryPreimage is .