# freeDGAlgebra -- Constructs a DGAlgebra

## Synopsis

• Usage:
A = freeDGAlgebra(R,degreeList)
• Inputs:
• R, a ring, The ring over which the DGAlgebra is defined
• degreeList, a list, A list of degrees of the algebra generators of R.
• Optional inputs:
• Variable => ..., default value T
• Outputs:

## Description

This function returns a DGAlgebra A whose underlying algebra is a graded commutative polynomial ring in a number of variables equal to the number of the degrees input. The current version of this package does not handle algebras A whose underlying algebra is not a polynomial ring.

 i1 : R = ZZ/101[x,y,z] o1 = R o1 : PolynomialRing i2 : A = freeDGAlgebra(R,{{1},{1},{1},{3}}) o2 = {Ring => R } Underlying algebra => R[T ..T ] 1 4 Differential => null o2 : DGAlgebra i3 : A.natural o3 = R[T ..T ] 1 4 o3 : PolynomialRing, 4 skew commutative variables i4 : setDiff(A,{x,y,z,x*T_2*T_3-y*T_1*T_3+z*T_1*T_2}) o4 = {Ring => R } Underlying algebra => R[T ..T ] 1 4 Differential => {x, y, z, z*T T - y*T T + x*T T } 1 2 1 3 2 3 o4 : DGAlgebra

The resulting DGAlgebra will not be graded since the differential given does not respect the grading due to the degrees assigned in the definition.

 i5 : isHomogeneous(A) o5 = false i6 : Add = toComplex A 1 3 3 2 3 3 1 o6 = R <-- R <-- R <-- R <-- R <-- R <-- R 0 1 2 3 4 5 6 o6 : ChainComplex i7 : B = freeDGAlgebra(R,{{1,1},{1,1},{1,1},{3,3}}) o7 = {Ring => R } Underlying algebra => R[T ..T ] 1 4 Differential => null o7 : DGAlgebra i8 : B.natural o8 = R[T ..T ] 1 4 o8 : PolynomialRing, 4 skew commutative variables i9 : setDiff(B,{x,y,z,x*T_2*T_3-y*T_1*T_3+z*T_1*T_2}) o9 = {Ring => R } Underlying algebra => R[T ..T ] 1 4 Differential => {x, y, z, z*T T - y*T T + x*T T } 1 2 1 3 2 3 o9 : DGAlgebra

The result of the above declaration will be graded.

 i10 : isHomogeneous(B) o10 = true i11 : Bdd = toComplex B 1 3 3 2 3 3 1 o11 = R <-- R <-- R <-- R <-- R <-- R <-- R 0 1 2 3 4 5 6 o11 : ChainComplex

Note that the differential is not passed into the constructor. The reason for this (at the moment) is that Macaulay2 does not know what ring the differentials are defined over until after the underlying algebra is constructed, so the differential is set later with setDiff. Many DG algebras that one encounters in commutative algebra have been implemented, however, and do not need to be defined 'by hand'. For example, if one wants to work with the Koszul complex as a DG algebra, then one should see the command koszulComplexDGA. Also, if one wishes to specify the name of the variables used, specify the Variable option; see the example in dgAlgebraMap.

## Caveat

There is currently a bug handling DG algebras that have no monomials in some degree, but some monomials in a later degree; for example if one replaces the 3 in the above example with a 5.

## Ways to use freeDGAlgebra :

• "freeDGAlgebra(Ring,List)"

## For the programmer

The object freeDGAlgebra is .