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

Document setcongruence #26

Closed
fingolfin opened this issue Feb 29, 2024 · 13 comments · Fixed by #146
Closed

Document setcongruence #26

fingolfin opened this issue Feb 29, 2024 · 13 comments · Fixed by #146
Labels
documentation Improvements or additions to documentation

Comments

@fingolfin
Copy link
Member

No description provided.

@fingolfin
Copy link
Member Author

I also really wonder how it can be used. I'd like to take e.g. handle the case where q is even. In CHEVIE one can substitute q by 2*q to do that.

Or to tell the program that (q-1)/3 is an integer one can substitute 3q+1 for q.

To quote the CHEVIE paper:

> nr:=‘SL3.1‘[-2,0];
nr := A2204
> print(setCongruence.nr);
proc() global qQ,q; qQ := ’qQ’; q := 3*qQ+1; NULL end
> print(unsetCongruence.nr);
proc() global q,qQ; q := ’q’; qQ := 1/3*q-1/3; NULL end

Note that it has these two substitution rules so that it can apply and then unapply the change as needed; my understanding this is because some code needs the "original" q (after all, 3q+1 in general won't be a prime power (and even if, it would be coprime to q, so ....)

Maybe in this package I don't even need setcongruence for this and should just substitute q? But

@SoongNoonien
Copy link
Member

Maybe in this package I don't even need setcongruence for this and should just substitute q?

But isn't that just exactly what we currently do? Or is there a better way to substitute q than to evaluate the polynomials?

@fingolfin
Copy link
Member Author

OK, so how do I do it? I am trying to reproduce examples from the CHEVIE paper. E.g.:

julia> T = genchartab("SL3.n1");

julia> tensor!(T,2,2)
9

I would now like to specialize the table or the new character or whatever to "even q". In the paper this is done via setcongruence which substitutes 2q (or rather 2Q for a new variable Q) for q. But I couldn't figure out how to do that here:

"Our" setcongruence is not called anywhere (well only in one simplify function but that doesn't make it clearer to me) and there are no examples. It seems from its signature that it is mostly intended for use on values, not on a whole table or a table row (aka a "character type")?

The other option I found is speccharparam! but I couldn't get it to do this either:

julia> q, (a, b, m, n) = params(T)
(q, (a, b, m, n))

julia> speccharparam!(T, 9, q, 2*q)
ERROR: MethodError: no method matching speccharparam!(::GenericCharacterTables.CharTable{…}, ::Int64, ::Nemo.QQPolyRingElem, ::Nemo.QQPolyRingElem)

Closest candidates are:
  speccharparam!(::GenericCharacterTables.CharTable{T}, ::Int64, ::AbstractAlgebra.Generic.UnivPoly{AbstractAlgebra.Generic.FracFieldElem{T}, AbstractAlgebra.Generic.MPoly{AbstractAlgebra.Generic.FracFieldElem{T}}}, ::AbstractAlgebra.RingElement) where T<:Union{AbstractAlgebra.PolyRingElem{Nemo.AbsSimpleNumFieldElem}, AbstractAlgebra.PolyRingElem{Nemo.QQFieldElem}}
   @ GenericCharacterTables ~/Projekte/OSCAR/GenericCharacterTables.jl/src/ModifyTable.jl:227

So how else can I reproduce what's been done on page 201ff of the CHEVIE paper?

@SoongNoonien
Copy link
Member

"Our" setcongruence is not called anywhere (well only in one simplify function but that doesn't make it clearer to me) and there are no examples. It seems from its signature that it is mostly intended for use on values, not on a whole table or a table row (aka a "character type")?

We only use setcongruence in the simplification methods to be able to simplify a bit further if for excaple q is even and thus q over 2 an integer.

The other option I found is speccharparam! but I couldn't get it to do this either

We only implemented speccharparam! and specclassparam! to replace the class and character parameters, in your example a, b, m and n. We didn't know it was needed for q as well.

So how else can I reproduce what's been done on page 201ff of the CHEVIE paper?

I'm not sure which paper you mean. I have two CHEVIE papers. One is called "CHEVIE—A SYSTEM FOR COMPUTING AND PROCESSING GENERIC CHARACTER TABLES" and has only 35 pages and the other one is called "CHEVIE—Generic Character Tables of Finite Groups of Lie Type, Hecke Algebras and Weyl Groups" and has only 51 pages.

@fingolfin
Copy link
Member Author

fingolfin commented Mar 1, 2024

The page number refers to the number in the journal (i.e. what is printed on the pages), not in a specific PDF (that's the usual standard for citations). I am referring to "CHEVIE - A system for computing and processing generic character tables" from 1996, which for me has 36 pages.

There is also a freely accessible preprint version of the paper at http://www.math.rwth-aachen.de/~Frank.Luebeck/preprints/CHEVIE_AAECC.pdf which actually is nicer for use on a computer (I think it has been typeset with a newer TeX toolchain). There the relevant bits are around page 26, starting with

We therefore distinguish the cases of even and odd q. Let us demonstrate the calculations in the case that q is even.

@SoongNoonien
Copy link
Member

There is also a freely accessible preprint version of the paper at http://www.math.rwth-aachen.de/~Frank.Luebeck/preprints/CHEVIE_AAECC.pdf

This is what I had.

@SoongNoonien
Copy link
Member

SoongNoonien commented Mar 1, 2024

As far as I understand it they are altering the congruences of the whole table. This effectively converts the table of SL3.n1 to a table which would be called SL3.n1.0 in the not so well defined CHEVIE nomenclature, similar to SL2.0 and SL2.1.

So in the Julia implementation this would translate to changing T.congruence from nothing to R.((0,2)) where R,_ = polynomial_ring(QQ, "q"). This (0,2) simply means q is congruent to 0 modulo 2.

Edit: Of course this is currently not possible since T is immutable.

@fingolfin
Copy link
Member Author

OK but then maybe we could add a setcongruence(T::Table, new_congruence) method which does not modify T but rather returns a new table with all data copied and the congruence modified, right?

@SoongNoonien
Copy link
Member

Yes, this would be possible and could be used to reproduce the steps in the paper.

@fingolfin
Copy link
Member Author

I am implementing this for now

@fingolfin
Copy link
Member Author

Is it intentional that SimpleCharTable does not provide a congruence field? Presumably they are just valid for any "congruence class"?

@SoongNoonien
Copy link
Member

Yes, I think so. The original implementation didn't have a setCongruence function either. These SimpleCharTable are mostly used for the green functions.

@SoongNoonien
Copy link
Member

Oh, yes, now I remember... The character values of these SimpleCharTables are just polynomials and not generic cyclotomic numbers, hence they can't be simplified any further even if we are given a fixed congruence class. In the original implementation this was called "NurPolynom".

Presumably they are just valid for any "congruence class"?

So, yes this is implied by the above.

@SoongNoonien SoongNoonien added the documentation Improvements or additions to documentation label Apr 16, 2024
@SoongNoonien SoongNoonien linked a pull request Sep 17, 2024 that will close this issue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants