Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

some more docu for invariant theory #599

Merged
merged 4 commits into from
Aug 8, 2021
Merged

some more docu for invariant theory #599

merged 4 commits into from
Aug 8, 2021

Conversation

wdecker
Copy link
Collaborator

@wdecker wdecker commented Aug 5, 2021

This is very much WIP, but can be merged so that @joschmitt can add more of the Singular functionality: Please implement the following functions:

reynolds_operator(f::MPolyElem)
molien_series(IR::InvRing) as rational function
hilbert_series(IR::InvRing) = molien_series(IR)
invariant_basis(d::Int)

Do we have an expand function for rational functions?

@wdecker
Copy link
Collaborator Author

wdecker commented Aug 5, 2021

@joschmitt: I am not awake yet. Of course I mean

reynolds_operator(IR::InvRing, f::MPolyElem)
molien_series(IR::InvRing) as rational function
hilbert_series(IR::InvRing) = molien_series(IR)
invariant_basis(IR::InvRing, d::Int)

@tthsqe12
Copy link
Contributor

tthsqe12 commented Aug 5, 2021

Hello. Could explain more what you mean by expand?

@wdecker
Copy link
Collaborator Author

wdecker commented Aug 5, 2021

@tthsqe12: See for example the docu for hilbert_series_expanded under Affine Algebras

@tthsqe12
Copy link
Contributor

tthsqe12 commented Aug 5, 2021

It looks like you mean power series. I think we have power series.

@fingolfin
Copy link
Member

Yeah I think what @decker wants is to have a way to compute the first N coefficients of the power series expansion of a rational function (i.e., the N-th Taylor polynomial)

Looking at the documentation for hilbert_series, right now it returns a pair of polynomials. Wouldn't it be better if it either returned a genuine rational function; and/or an object which retains the factorization of the denominator (which here often has a nice form like (x-1)^5 * (x-2)^7 that one really doesn't want to expand unless it is explicitly requested; and the user may even want this information). Do we have something already? @thofma ?

@tthsqe12
Copy link
Contributor

tthsqe12 commented Aug 5, 2021

We have my FactoredField https://gist.github.com/tthsqe12/73a17c5bb2182df8e9ff112e96d29606 which supports everything up to partial fractions and addition/subtraction. But I think this is overkill here, as we do not need to add/subtract these things?

I think there is already something in hecke for representing factored elements and multplying them together.

@wdecker
Copy link
Collaborator Author

wdecker commented Aug 5, 2021

@fingolfin: we have three functions for affine algebras, hilbert_series, hilbert_series_reduced and hilbert_series_expanded. For different applications, it is crucial to have all three functions in its current form. In particular, depending on the application, we need to know the numerator polynomial returned by hilbert_series and/or that one returned by hilbert_series_reduced, whereas for other applications we may wish to expand the series.

@wdecker
Copy link
Collaborator Author

wdecker commented Aug 5, 2021

@fingolfin, @ThomasBreuer: Do we have or do we plan to have a concept of group actions in Oscar?

@ThomasBreuer
Copy link
Member

@wdecker The objects for describing group actions are G-sets. This is work in progress.


The *invariants* of $G$ are the fixed points of this action, its *ring of invariants* is the graded subalgebra

$K[x]^G\cong K[V]^G=\{f\in K[V] \mid \pi f=f {\text { for any }} \pi\in G\}\subset K[V].$
$K[x]^G = K[x_1, \dots, x_n]^G\cong K[V]^G=\{f\in K[V] \mid \pi f=f {\text { for any }} \pi\in G\}\subset K[V].$
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The notation K[x]^G to me always indicates a right action, i.e. a map SET x GROUP -> SET. That would suggest writing \pi ^ f = f. This would be consistent with our plan to do everything in Oscar based on right actions, like it is done in GAP and in MAGMA. Indeed, MAGMA even does this in invariant theory, see:

This is in contrast to the action described above in line 22/23, which is a left action (and has to invert or transpose the acting matrix to achieve that).

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, the action Magma describes is a left action after all... Now I am confused what they do, I will check with actual code.

Copy link
Member

@joschmitt joschmitt Aug 6, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For what it's worth, I think finvar.lib in Singular does right actions. So the matrix M =
( a b )
( c d )
acts on K[x, y] by mapping x to ax + by and y to cx + dy. At least I would call this a right action because I would identify x with the vector (1 0) and then (1 0)*M is (a b), so the matrix acts "from the right".

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The hallmark of a right action is it must satisfy (f^a)^b = f^{a*b} while for a left action it is a*(b*f) = (a*b)*f (or, if one uses the notation for right actions to write down a left action, one gets (f^a)^b = f^{b*a}. So, just take two matrices a,b that do not commute and compare (f^a)^bandf^{ab}`.

So that's what one should check for the Singular computations.

As to Magma, I verified they do implement a right action on polynomials via the above rules:

> K := QuadraticField(2);
> Aq := [ x / K.1 : x in [1, 1, -1, 1]];
> Bq := [ x * One(K) : x in [0, 1, 1, 0]];
> G := MatrixGroup<2, K | Aq, Bq>;
> P<x, y> := PolynomialRing(K, 2);
> f := x^2 + x * y + y^2;

# equal:
> f^(G.1*G.2);
3/2*x^2 + 1/2*y^2
> (f^G.1)^G.2;
3/2*x^2 + 1/2*y^2

# different
> (f^G.2)^G.1;
1/2*x^2 + 3/2*y^2

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's not quite as easy to reproduce this in Singular / finvar.lib, because the action of a matrix on a polynomial is just not implemented. Doing the action by hand as in evaluate_reynolds() for example the results are exactly as in Magma.

@wdecker
Copy link
Collaborator Author

wdecker commented Aug 7, 2021

@fingolfin, @joschmitt, @thofma, @fieker: I suggest that we discuss next week on how to proceed

@fingolfin fingolfin merged commit 25cf462 into master Aug 8, 2021
@fingolfin fingolfin deleted the Wolfram branch August 8, 2021 22:28
@joschmitt joschmitt mentioned this pull request Aug 25, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants