How to treat a vector space as a group?

I need to use a module as a group, so that I can define a group algebra over this module.

Essentially, I want to take the group of 2-dimensional complex vector space and define a group algebra over this. I cannot find appropriate direction on the internet and sage gives me the ridiculous "False" as below.

sage: V=FreeModule(CC,2)
sage: V in Groups()
False

edit retag close merge delete

Sort by » oldest newest most voted

The following is the answer due to @Nicolas-M-Thiéry

sage: Groups?
The category of (multiplicative) groups, i.e. monoids with
inverses.


Mind the multiplicative!

What you want is:

sage: V = FreeModule(CC,2)
sage: V in CommutativeAdditiveGroups()
True


or (better, but not imported by default):

sage: from sage.categories.additive_groups import AdditiveGroups
sage: V in AdditiveGroups()
True


Now you can construct the group algebra:

sage: C = V.algebra(QQ)
sage: C.category()
Category of commutative additive group algebras over Rational Field

sage: x = C.an_element()
sage: x
B[(1.00000000000000, 0.000000000000000)]

sage: 3 * x + 1
B[(0.000000000000000, 0.000000000000000)] + 3*B[(1.00000000000000, 0.000000000000000)]


Ah, but this is disappointing::

sage: (x+1)^2
TypeError: mutable vectors are unhashable


One would need to have a variant of FreeModule that would guarantee that vectors remain immutable upon arithmetic.

In the mean time, you can use:

sage: V = CombinatorialFreeModule(CC, [0,1])
sage: C = V.algebra(QQ)
sage: x = C.an_element()
sage: x
B[2.00000000000000*B[0] + 2.00000000000000*B[1]]
sage: (x+1)^2
B[0] + 2*B[2.00000000000000*B[0] + 2.00000000000000*B[1]] + B[4.00000000000000*B[0] + 4.00000000000000*B[1]]

more