oscar-system / Oscar.jl

A comprehensive open source computer algebra system for computations in algebra, geometry, and number theory.
https://www.oscar-system.org
Other
343 stars 125 forks source link

Inconsistent stabilizers of group action #4195

Closed lgoettgens closed 1 week ago

lgoettgens commented 1 week ago

Consider the action of $GL_2(3) \times GL_3(3)$ on $\mathbb{F}_3^{2 \times 3}$ via $(g,h) \times m \mapsto g \cdot m \cdot h^{-1}$. Repeatedly asking for the order of the stabilizer of some rank 1 matrix results in different results (most of which are wrong).

F3, _ = finite_field(3)
G = general_linear_group(2, F3)
M = matrix_space(F3, 2, 3)
H = general_linear_group(3, F3)
for _ in 1:10
    G_times_H = direct_product(G, H)
    (proj_G, proj_H) = canonical_projections(G_times_H)
    rep = M([1 0 0;0 0 0])
    ord = order(stabilizer(G_times_H, rep, (m,gh) -> proj_G(gh)*m*inv(proj_H(gh)))[1])
    println(ord)
end

results in

539136
134784
134784
539136
539136
134784
539136
41472
539136
5184

The correct result is 5184.

If one moves the definition of G_times_H in front of the loop, the result stays consistent (but in most cases still wrong).

Expected behavior Everytime the same, correct result 5184.

System (please complete the following information): Please paste the output of Oscar.versioninfo(full=true) below. If this does not work, please paste the output of Julia's versioninfo() and your Oscar version.

julia> Oscar.versioninfo(full=true)
OSCAR version 1.2.0-DEV - #master, 5c9a47eef0e8
  combining:
    AbstractAlgebra.jl   v0.43.5
    GAP.jl               v0.12.0
    Hecke.jl             v0.34.4
    Nemo.jl              v0.47.1
    Polymake.jl          v0.11.22
    Singular.jl          v0.23.8
  building on:
    FLINT_jll               v300.100.300+0
    GAP_jll                 v400.1300.102+2
    Singular_jll            v404.0.606+0
    libpolymake_julia_jll   v0.12.1+0
    libsingular_julia_jll   v0.45.5+0
    polymake_jll            v400.1200.1+0
See `]st -m` for a full list of dependencies.

Julia Version 1.11.0
Commit 501a4f25c2b (2024-10-07 11:40 UTC)
Build Info:
  Official https://julialang.org/ release
Platform Info:
  OS: Linux (x86_64-linux-gnu)
  CPU: 8 × Intel(R) Core(TM) i7-10510U CPU @ 1.80GHz
  WORD_SIZE: 64
  LLVM: libLLVM-16.0.6 (ORCJIT, skylake)
Threads: 1 default, 0 interactive, 1 GC (on 8 virtual cores)
Official https://julialang.org/ release
...

Thanks to @flyingapfopenguin for finding this.

ping @ThomasBreuer @fingolfin

ThomasBreuer commented 1 week ago

The map $(g,h) \times m \mapsto g \cdot m \cdot h^{-1}$ does not define a group operation, $(g,h) \times m \mapsto g^{-1} \cdot m \cdot h$ would work:

julia> for _ in 1:10
           G_times_H = direct_product(G, H)
           (proj_G, proj_H) = canonical_projections(G_times_H)
           rep = M([1 0 0;0 0 0])
           ord = order(stabilizer(G_times_H, rep, (m,gh) -> inv(proj_G(gh))*m*proj_H(gh))[1])
           println(ord)
       end
5184
5184
5184
5184
5184
5184
5184
5184
5184
5184
lgoettgens commented 1 week ago

ahh, I think we got confused with right vs left operations. Thanks for your answer.