# Tensor product of elements of non-free algebras

In SageMath 9.1 I am unable to execute the code

a = SteenrodAlgebra(2).an_element()
M = CombinatorialFreeModule(GF(2), 's,t,u')
s = M.basis()['s']
T = tensor([a,s])


which is copied verbatim from this answer posted back in 2012. Instead, I get AttributeError on the tensor command. Is there some ingredient I'm missing?

More to the point, I am unable to run

N = 2
k.<w> = CyclotomicField(N)

A.<X,Z> = FreeAlgebra(k, 2)
F = A.monoid()
X, Z = F.gens()

monomials = [X^i*Z^j for j in range(0,N) for i in range(0,N)]

MS = MatrixSpace(k, len(monomials))
matrices = [
# matrix showing the action of the first generator, X, on the monomials
MS([0, 1, 0, 0,    # 1*X = X
1, 0, 0, 0,    # X*X = 1
0, 0, 0, -1,   # Z*X = -XZ
0, 0, -1, 0    # XZ*X = -Z
]),
# matrix showing the action of the second generator, Z, on the monomials
MS([0, 0, 1, 0,     # 1*Z = Z
0, 0, 0, 1,    # X*Z = XZ
1, 0, 0, 0,    # Z*Z = 1
0, 1, 0, 0     # XZ*Z = X
]),
]
B.<X,Z> = A.quotient(monomials, matrices)

tensor( (X*Z,X) )


which is the code I'm actually interested in. In this instance I get AssertionError on the tensor command. Is there some restriction on using tensor on non-free algebras? The code below executes fine:

N = 3
k.<w> = CyclotomicField(N)

A.<X,Z> = FreeAlgebra(k, 2)

tensor( (X*Z,X) )

edit retag close merge delete

2

The code

a = SteenrodAlgebra(2).an_element()
M = CombinatorialFreeModule(GF(2), ['s', 't', 'u'])
s = M.basis()['s']
T = tensor([a, s])


works fine in Sage 8.8 but fails in Sage 8.9.

This might have to do with the changes in Sage Trac ticket 25603.

1

Thanks. I've been trying (with difficulty) to follow the discussion there, and there seems to be some question about whether tensor() is even supposed to be defined on elements. I did find examples in the documentation here and here. But maybe it's not defined for every type of algebra? If not, is this something that is feasible for a user to define themselves?