fractions of symmetric functions

66 views
Skip to first unread message

Martin R

unread,
Aug 9, 2022, 4:59:50 AM8/9/22
to sage-devel
I may be missing something, but sage doesn't let me do

sage: R = SymmetricFunctions(QQ).e()
sage: FractionField(R)

Naively, I would have thought that this makes sense.  Doesn't it?

Martin

Martin R

unread,
Aug 9, 2022, 3:14:01 PM8/9/22
to sage-devel
I am guessing that part of the problem is

sage: SymmetricFunctions(ZZ) in IntegralDomains()
False

The other problem is that fraction_field is not a parent method of IntegralDomains.

I'd be grateful for input / corrections.

Martin

Trevor Karn

unread,
Aug 10, 2022, 11:22:04 AM8/10/22
to sage-devel
As a workaround, does

R.<e> = InfinitePolynomialRing(ZZ)
K = FractionField(R)
e[1]*e[7]^2/e[2] in K

where e[i] is the ith elementary symmetric function work? (Using the fundamental theorem of symmetric functions.) If you need to convert into a different basis you could then do that manually.

Vincent Delecroix

unread,
Aug 10, 2022, 2:46:26 PM8/10/22
to sage-devel
On Tue, 9 Aug 2022 at 21:14, 'Martin R' via sage-devel
<sage-...@googlegroups.com> wrote:
>
> I am guessing that part of the problem is
>
> sage: SymmetricFunctions(ZZ) in IntegralDomains()
> False

Though the following looks fine

sage: SymmetricFunctions(ZZ).e() in IntegralDomains()
True

> The other problem is that fraction_field is not a parent method of IntegralDomains.

Indeed, it is only implemented in sage/rings/ring.pyx which is a
historic left over. Moreover, the implementation uses a custom cache
with double underscore where cached_method would do the job. I think
it would be a good time to try to move the implementation to
categories.

Could you open a ticket and cc me?

> I'd be grateful for input / corrections.

As Trevor implicitly suggested, I think you want a custom fraction
field here so that you can change basis. Typically, you would like a
coherent interface as follows

sage: S = SymmetricFunctions(ZZ)
sage: S.fraction_field().e() is S.e().fraction_field()
True
sage: Ke = S.fraction_field().e()
sage: Kp = S.fraction_field().p()
sage: Kp(Ke([3,2,1]) / Ke([2,1])) == Kp(Ke([3,2,1])) / Kp(Ke([2,1]))
True

But to my mind this is another layer of complexity and would require
an other iteration of tickets.

Vincent
Reply all
Reply to author
Forward
0 new messages