# Virasoro Verma module Basis

Hi I am starting to look at the implementation of the Virasoro algebra and some of its modules in

https://doc.sagemath.org/html/en/refe...

I have a question regarding the method basis() that returns a basis of the module. As the following example shows this particular linear combination of basis elements is zero so I wander in which sense are we getting a basis or a generating set, or even better how to actually get sage to recognize that the combination is actually zero?

sage: g = lie_algebras.VirasoroAlgebra(QQ)
sage: V = g.verma_module(1/2,0)
sage: d = g.basis()
sage: B = V.basis()
sage: v = V.highest_weight_vector()
sage: B[-2,-1] - B[-1,-2] + B[-3] == V.zero()
False
sage: B[-2,-1] - B[-1,-2] + B[-3]
d[-3]*v + d[-2]*d[-1]*v - d[-1]*d[-2]*v
sage: d[-3]*v + d[-2]*(d[-1]*v) - d[-1]*(d[-2]*v) == V.zero()
True

edit retag close merge delete

Sort by » oldest newest most voted

The answer to that question is garbage in, garbage out. B[-1,-2] is not a basis element, but the basis does not check that the input is bad (which is true of nearly all CombinatorialFreeModule bases):

sage: sB = SymmetricFunctions(QQ).s().basis()
sage: sB[1,2]  # Yes, that is a tuple
s(1, 2)
sage: sB[1,2] * sB[2,1]  # This will crash Sage


This is done for speed reasons I believe, and maybe also for the cases where containment checking is hard to impossible. Anyways, the Virosoro Verma module implementation is not perfect, and there probably should be a better way to construct basis elements to make sure this does not happen. However, that this is not a basis element is spelled out in the documentation (the indices have to be weakly increasing in the basis).

more