>
> I had that confusion about the pbw_basis method, as well. From my (non 
> expert) point of view I would have expected the following:
>
> What is now your L.pbw_basis() I expected to be 
> L.universal_enveloping_algebra(). This would match what the 
> representation string is telling you:
>
> sage: L.pbw_basis()
> Universal enveloping algebra of Lie algebra of ['A', 2] in the Chevalley 
> basis in the Poincare-Birkhoff-Witt basis
>
>
>
> What is now your L.universal_enveloping_algebra() is just another 
> (isomorphic) realization. Therefore it could be accessed in this way:
>
> L.universal_enveloping_algebra().as_nc_polynomial_ring()
>
> matching what the representation string is telling you:
>
> sage: L.universal_enveloping_algebra()
> Noncommutative
>  Multivariate Polynomial Ring in b0, b1, b2, b3, b4, b5, b6, b7 over 
> Rational Field, nc-relations: {b5*b0: b0*b5 - b4, b6*b3: b3*b6 + 2*b6, 
> .................
>
> Furthermore, conversion maps between these two realization (in both 
> directions) are desirable. The access to the PBW-basis would be
>
> L.universal_enveloping_algebra().basis()
>
> for which a shorthand L.pbw_basis() maybe be implemented (or not).
>
> That is both horrible to work with and practically impossible to do. You 
require *every* implementation returned of UEA to know how to go to a PBW 
basis (and in principle, from). There is no reasonable way to expect the 
Lie algebra to know how to do this, and you would have to (IMO needlessly) 
subclass, e.g., NC poly ring, which is generally not a UEA. Also, while NC 
poly ring is generic, it would only work for finite-dimensional Lie 
algebras. We could do this with a category for UEAs, but I do not see any 
benefit to having this overhead and complications. Also, what about the 
cases where the only reasonable implementation of the UEA is the PBW basis? 
What about when there are multiple realizations*? Why should the UEA 
require anything special about the implementation? For the places where I 
do need the specialized things, that is why there is the separate 
pbw_basis().

Also, by being in the category of ModulesWithBasis(), the .basis() must 
return the distinguished basis object, not an isomorphic algebra (since we 
consider categories to be like abstract classes and defining the API).

Also, think about it this way, say we have a global function PBWBasis. It 
would naturally take in a Lie algebra (and optional ordering of the basis) 
as input. Now in many ways L.pbw_basis() is equivalent to pbw_basis(L) and 
the PBW basis is strongly correlated to the Lie algebra. So it is natural 
IMO to have such a method and as a primary entry point.

Best,
Travis

* - Although to be fair, this is currently something that will need to be 
addressed with the current framework. However, there is a possible 
approaches by returning an algebra that has multiple realizations.

-- 
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 sage-devel+unsubscr...@googlegroups.com.
To post to this group, send email to sage-devel@googlegroups.com.
Visit this group at https://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.

Reply via email to