> > 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.