# freeDGAlgebra(Ring,List) -- Constructs a DGAlgebra

## Synopsis

• Usage:
A = freeDGAlgebra(R,degreeList)
• Function: freeDGAlgebra
• 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.
• 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 , T , T ] 1 2 3 4 Differential => null isHomogeneous => false o2 : DGAlgebra``` ```i3 : A.natural o3 = R[T , T , T , T ] 1 2 3 4 o3 : PolynomialRing``` ```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 , T , T ] 1 2 3 4 Differential => {x, y, z, z*T T - y*T T + x*T T } 1 2 1 3 2 3 isHomogeneous => false 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 , T , T ] 1 2 3 4 Differential => null isHomogeneous => false o7 : DGAlgebra``` ```i8 : B.natural o8 = R[T , T , T , T ] 1 2 3 4 o8 : PolynomialRing``` ```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 , T , T ] 1 2 3 4 Differential => {x, y, z, z*T T - y*T T + x*T T } 1 2 1 3 2 3 isHomogeneous => true 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.

## 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.