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

words, syllables, letters and their inverse for fpgroup and pc group elems in all variations #4150

Open
6 tasks
fingolfin opened this issue Sep 26, 2024 · 8 comments
Assignees

Comments

@fingolfin
Copy link
Member

Just talked with @fieker: we have syllables(g::Union{FPGroupElem, SubFPGroupElem}) and letters(g::FPGroupElem)

  1. both of these should be available for FPGroupElem and SubFPGroupElem
  2. but ideally also both for PcGroupElem and SubPcGroupElem (as a subcase of the old issue PcGroups as FPGroups #952)
  3. I just noticed there is also a nice WeylGroup type with a word method (cc @lgoettgens) -- it would make sense to have syllables and letters for those, too
  4. conversely, there is a word method for WeylGroup which looks similar to letters (except it returns a Vector{UInt8} -- of course if the generators are involutions one doesn't need inverses. Anyway: perhaps there should also be a word method for fp and pc (sub) group elems (to be decided what it should return
  5. in all these case, we also want a "reverse" function that takes the output of one of these function, plus a parent (sub)group, and re-constructs a group element.
  6. ... and the docstrings for these functions should always also mention their "inverse" (and ideally include an example showing a roundtrip)

@ThomasBreuer perhaps you can have a look?

@ThomasBreuer
Copy link
Member

Yes.

@thofma
Copy link
Collaborator

thofma commented Sep 26, 2024

(There is already a word method for fp groups, which seems to do the same as letters.)

Edit: Isn't the reverse function just map_word?

@fingolfin
Copy link
Member Author

It seems syllables can be inverted by passing its output to the group, like so:

julia> F = @free_group(2)
Free group of rank 2
julia> w = f1^2 * f2
f1^2*f2

julia> syllables(w)
2-element Vector{Pair{Int64, Int64}}:
 1 => 2
 2 => 1

julia> F(syllables(w))
f1^2*f2

But the same doesn't work for letters because while there is a constructor taking a vector of integers (which strikes me as a potential source of errors)

@ThomasBreuer
Copy link
Member

Isn't the reverse function just map_word?

The question refers to the (undocumented) method of map_word that takes a description of the word in question as its first argument (the format of this description could be defined as an "external representation" format in the sense of #4151).
This map_word method is intended for evaluating the word in some generators (for example some matrices), and it computes the result by powering and multiplying. For creating a word-like object, one does not want to do this.

Yes, we can try to install special map_word methods for the case that the images of the generators are (arbitrary?) words, but is this the right point of view?

@fieker
Copy link
Contributor

fieker commented Sep 27, 2024 via email

@ThomasBreuer
Copy link
Member

@fieker What I wanted to say in the last sentence of my comment: For the case that the generator images are words, one can in principle provide a method that creates the result without group arithmetics; this approach would still require the handling of cancellation etc. in order to get a valid result. Thus I think the idea from #4151 is more suitable than (mis)using map_word.

@fieker
Copy link
Contributor

fieker commented Sep 27, 2024 via email

@thofma
Copy link
Collaborator

thofma commented Sep 27, 2024

I agree with @fieker. It is the same reason we want a fast evaluate for polynomials in specific situations.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants