-
Notifications
You must be signed in to change notification settings - Fork 125
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
Groups: G-sets #108
Comments
We need to make progress on this. Perhaps @ThomasBreuer can also help out. It would be very nice if one could write this (but careful, there is already julia> G = symmetric_group(4)
Sym( [ 1 .. 4 ] )
julia> orbit(G, [1,2,3,4])
...
julia> orbit(G, [1,2,3,4], on_tuples) # GAP style order
...
julia> orbit(G, on_tuples, [1,2,3,4]) # hecke style order?!? I think?
...
What should the return values? It could be the orbit as a vector; but better would be a GSet, which also knows the acting group and action. it could compute the orbit lazily or not, and should ideally be easy to convert to a vector or allow iteration... |
I don't think we have a strong opinion on the order of the arguments. But maybe there was a specific reason @fieker? I like the idea of doing |
On Sat, Feb 13, 2021 at 03:27:49AM -0800, thofma wrote:
I don't think we have a strong opinion on the order of the arguments. But maybe there was a specific reason @fieker?
No reason...
I like the idea of doing `X = GSet(G, f)` and then letting `orbit(X, a)` be an iterator on which one call `collect` etc. For convenience we could define `orbit(G, a, f) = orbit(GSet(G, f), a)`?
OK, then lets try that
…
--
You are receiving this because you were mentioned.
Reply to this email directly or view it on GitHub:
#108 (comment)
|
Here is a first proposal for the setup (in
If this is reasonable then I will provide an analogous variant for matrix groups. |
On Mon, Mar 01, 2021 at 07:32:43AM -0800, ThomasBreuer wrote:
Here is a first proposal for the setup (in `Groups/gsets.jl`).
```
mutable struct PermGroup_GSet_on_points <: GSet{PermGroup}
group::PermGroup
seeds::Set{<:Base.Integer}
***@***.***_other # we want to store the orbits, the set of elements etc. if known
function PermGroup_GSet_on_points(G::PermGroup, seeds::Set{<:Base.Integer})
gset = new(G, seeds, Dict{Symbol,Any}())
@Assert length(seeds) > 0
return gset
end
end
gset(G::PermGroup, Omega::Set{T}) where T<:Base.Integer = PermGroup_GSet_on_points(G, Omega)
function gset(G::PermGroup)
omega = gset(G, Set(1:G.deg))
AbstractAlgebra.set_special(omega, :elements => omega.seeds)
return omega
end
function orbits(Omega::PermGroup_GSet_on_points)
orbits = AbstractAlgebra.get_special(Omega, :orbits)
if orbits == nothing
G = Omega.group
orbits = Set{Set{Int}}(GAP.Globals.Orbits(G.X, GAP.GapObj(collect(Omega.seeds))))
AbstractAlgebra.set_special(Omega, :orbits => orbits)
end
return orbits
end
function elements(Omega::PermGroup_GSet_on_points)
elements = AbstractAlgebra.get_special(Omega, :elements)
if elements == nothing
orbits = orbits(Omega)
elements = union(orbits...)
AbstractAlgebra.set_special(Omega, :elements => elements)
end
return elements
end
orbit(G::PermGroup, pt::T) where {T<:Base.Integer} = PermGroup_GSet_on_points(G, Set(pt))
Base.length(C::GSet) = length(elements(C))
representative(C::GSet) = first(C.seeds)
```
If this is reasonable then I will provide an analogous variant for matrix groups.
I'd automatically always also supplement this for T = fmpz, or, where
this makes sense, RingElem
… --
You are receiving this because you were mentioned.
Reply to this email directly or view it on GitHub:
#108 (comment)
|
@fieker |
On Mon, Mar 01, 2021 at 08:06:26AM -0800, ThomasBreuer wrote:
@fieker
O.k., if `fmpz` shall be supported as points on which permutation groups act then we have to start one layer below, and define `fmpz(1)^perm` for a permutation `perm`.
The next question is then what the default shall be: Which type shall the points in `gset(symmetric_group(5))` have?
Small Int I'd say (or UInt if you can tolerate hex printing), but
Integer goes up to BigInt, thus my call for fmpz...
… --
You are receiving this because you were mentioned.
Reply to this email directly or view it on GitHub:
#108 (comment)
|
For the next iteration (general case of G-sets), I will create a pull request. From my point of view, the current situation is as follows.
|
This still needs a lot of work. Let's work on it today. To make it concrete:
But let's not get lost in details and fancy options! For today, really, the application in the Galois groups code should work, and perhaps also matrix group stabilizers (@thofma had a concrete question about that recently). |
Another candidate for a g-set is the return value of |
In order to properly support thing like
stabilizer
,orbit
,orbit_stabilizer
,all_blocks
,maximal_blocks
,isregular
,istransitive
etc. for arbitrary group actions (see also Chapter 41 "Group Actions in the GAP reference manual). To this end, I suggest introduce an abstraction somewhat similar to Magma's G-sets resp. GAP's external sets.Unlike Magma
GSet
, I do not think we should restrict this to permutation groups either.Also, I explicitly do not want use GAP's
ExternalSet
to implement this, as it has too much overhead (and perhaps also other baggage). Rather, I'd implement this as a Julia type with ideally little overhead in the general situation.That is, a type
GSet
which represents a set together with an action by a groupG
, and multiple constructors for it. The functions listed above can then be applied to such G-sets. The code could be insrc/Groups/GSets.jl
.I'd imagine that we'd use (subtypes of)
GSet
to represent all kinds of things, potentially including conjugacy classes, cosets (xH
is the orbit ofx
underH
), and more...I need to fill in more details later but I keep not getting to this, so I'd rather file this as an incomplete issue than forget it.
Ping @GDeFranceschi
The text was updated successfully, but these errors were encountered: