Hey Vit,
Some of these issues are probably related to bad input. Let us start
with *.algebras_generators(). It is useful to look at the output:
sage: PBW.algebra_generators()
Finite family {-alpha[1]: PBW[-alpha[1]], alpha[1]: PBW[alpha[1]],
alphacheck[1]: PBW[alphacheck[1]]}
So it is expecting a simple root as input. Similarly, for your tensor
product:
sage: UC = PBW.tensor(C)
Lazy family (Term map from Image of Cartesian product of Free abelian
monoid indexed by {alpha[1], alphacheck[1], -alpha[1]}, Subsets of {0, 1} by
<type 'tuple'> to Universal enveloping algebra of Lie algebra of ['A', 1] in
the Chevalley basis in the Poincare-Birkhoff-Witt basis # The Clifford
algebra of the Quadratic form in 2 variables over Rational Field with
coefficients:
[ 1 0 ]
[ * 1 ](i))_{i in Image of Cartesian product of Free abelian monoid indexed
by {alpha[1], alphacheck[1], -alpha[1]}, Subsets of {0, 1} by <type 'tuple'
>}
The tensor product as QQ-modules knows that it is a QQ-algebra, but it
plays it safe and uses its basis as the generating set, which in turn, is a
Cartesian product of the bases of its factors. Subsequently, the keys for
the basis is the Cartesian product of the keys of the factors. So in this
case, the (1,1) corresponds to the keys for the Clifford algebra basis
(more of a by-product of the implementation, but the subsets are natural):
sage: C.basis()
Lazy family (Term map from Subsets of {0, 1} to The Clifford algebra of the
Quadratic form in 2 variables over Rational Field with coefficients:
[ 1 0 ]
[ * 1 ](i))_{i in Subsets of {0, 1}}
So it is expecting subsets and that the user will not input bad data. There
is no reason for it to simplify and not a bug. Granted, we could put a
check on the user input here, but there is a speed penalty as this can be a
well-used code path internally. Moreover, ducktyping can also be useful. So
we are fairly permissive here, but not without due cause IMO.
Do not confuse a bug with a not-yet-implemented feature: (noncommutative)
polynomial rings are not in AlgebrasWithBasis, so it is not expected that
they work with something like tensor(). However, it would be a good feature
to add. :)
if you want to access the basis, use the .basis() method.
Also, how is pbw_basis not an intuitive name for obtaining the PBW basis
(there is also the fully spelled out version too)? If you want to change
the ordering, RTM of "PBW?" to pass in an ordering function to
L.pbw_basis().
Now the fact that you sometimes obtaining random attribute errors when
running that code block is a definite bug. Please submit a trac ticket.
In general, I think it is difficult to determine the tensor product of two
(non commutative, non PBW) algebras over an arbitrary subalgebra. There is
some code for doing smash products somewhere on #15874, but it has
bitrotted and IDK if that will give you what you want. I did write some
code to compute Verma modules via the PBW basis. I had to work somewhat
hard to make it work, and it wasn't apparent to me how to extend that to
more general framework.
Best,
Travis
--
You received this message because you are subscribed to the Google Groups
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.