-
Notifications
You must be signed in to change notification settings - Fork 128
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
Add letters
function for PcGroupElem
#4202
base: master
Are you sure you want to change the base?
Changes from 3 commits
e9a4ac4
b910923
d362f67
27c24e7
89b8fe6
94cd03e
416fd8b
c350414
b552be6
11bdb25
1b80584
2d0bfb8
e7f4da0
5cfffd0
43532ba
a80667b
30a5a62
2cd5cb9
5dd04b8
c07db31
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -365,3 +365,57 @@ function pc_group(c::GAP_Collector) | |
end | ||
end | ||
|
||
""" | ||
letters(g::PcGroupElem) | ||
|
||
Return the letters of `g` as a list of integers, each entry corresponding to | ||
a group generator. | ||
|
||
# Examples | ||
```jldoctest | ||
julia> c = collector(2, Int); | ||
|
||
julia> Oscar.set_relative_orders!(c, [2, 3]) | ||
|
||
julia> Oscar.set_conjugate!(c, 2, 1, [2 => 2]) | ||
|
||
julia> gg = pc_group(c) | ||
fingolfin marked this conversation as resolved.
Show resolved
Hide resolved
|
||
Pc group of order 6 | ||
|
||
julia> letters(gg[1]^5*gg[2]^-4) | ||
fingolfin marked this conversation as resolved.
Show resolved
Hide resolved
|
||
3-element Vector{Int64}: | ||
1 | ||
2 | ||
2 | ||
``` | ||
""" | ||
function letters(g::PcGroupElem) | ||
w = GAPWrap.UnderlyingElement(GapObj(g)) | ||
return Vector{Int}(GAPWrap.LetterRepAssocWord(w)) | ||
end | ||
|
||
function Oscar.syllables(g::Union{PcGroupElem, SubPcGroupElem}) | ||
lgoettgens marked this conversation as resolved.
Show resolved
Hide resolved
|
||
l = GAPWrap.ExtRepOfObj(GapObj(g)) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. For infinite groups, GAp uses a completely different internal representation. You'll need something like this: if GAP.Globals.IsPcpElement(GapObj(g))
expvec = GAP.Globals.Exponents(GapObj(g))
... do something with it....
else
... current code
end |
||
@assert iseven(length(l)) | ||
return Pair{Int, ZZRingElem}[l[i-1] => l[i] for i = 2:2:length(l)] | ||
end | ||
|
||
# Convert syllables in canonical form into exponent vector | ||
#Thomas | ||
fingolfin marked this conversation as resolved.
Show resolved
Hide resolved
|
||
function exponent_vector(sylls::Vector{Pair{Int64, ZZRingElem}}, n) | ||
lgoettgens marked this conversation as resolved.
Show resolved
Hide resolved
|
||
res = zeros(ZZRingElem, n) | ||
for pair in sylls | ||
@assert res[pair.first] == 0 #just to make sure | ||
res[pair.first] = pair.second | ||
end | ||
return res | ||
end | ||
|
||
# Convert syllables in canonical form into group element | ||
fingolfin marked this conversation as resolved.
Show resolved
Hide resolved
|
||
#Thomas | ||
fingolfin marked this conversation as resolved.
Show resolved
Hide resolved
|
||
function (G::PcGroup)(sylls::Vector{Pair{Int64, ZZRingElem}}) | ||
e = exponent_vector(sylls, ngens(G)) | ||
pcgs = Oscar.GAPWrap.FamilyPcgs(GapObj(G)) | ||
x = Oscar.GAPWrap.PcElementByExponentsNC(pcgs, GapObj(e, true)) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Here you also need to check for You'll need the function Also |
||
return Oscar.group_element(G, x) | ||
end | ||
lgoettgens marked this conversation as resolved.
Show resolved
Hide resolved
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Note that we can also produce negative numbers: e.g. -3 means "inverse of 3rd generator". This should be explained, and perhaps an example added showing that. E.g. based on this:
Perhaps also add something like this (and then mirror it in the other function)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have added a small example with some brief explanation to
letters
for this. However I am unsure if the example is good as I was not able to get elements with negative exponents and test.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For that you need an infinite group. E.g.
or