2022-11-07 16:21:58 +01:00
|
|
|
|
## Particular definitions for actions on Sp(n,ℤ)
|
|
|
|
|
|
|
|
|
|
function _conj(
|
2022-11-14 19:50:27 +01:00
|
|
|
|
s::MatrixGroups.ElementarySymplectic{N,T},
|
2024-02-15 22:42:17 +01:00
|
|
|
|
σ::PG.AbstractPermutation,
|
2022-11-07 16:21:58 +01:00
|
|
|
|
) where {N,T}
|
|
|
|
|
@assert iseven(N)
|
2022-11-14 19:50:27 +01:00
|
|
|
|
n = N ÷ 2
|
|
|
|
|
@assert 1 ≤ s.i ≤ N
|
|
|
|
|
@assert 1 ≤ s.j ≤ N
|
|
|
|
|
if s.symbol == :A
|
|
|
|
|
@assert 1 ≤ s.i ≤ n
|
|
|
|
|
@assert 1 ≤ s.j ≤ n
|
|
|
|
|
i = s.i^inv(σ)
|
|
|
|
|
j = s.j^inv(σ)
|
|
|
|
|
else
|
|
|
|
|
@assert s.symbol == :B
|
|
|
|
|
@assert xor(s.i > n, s.j > n)
|
|
|
|
|
if s.i > n
|
|
|
|
|
i = (s.i - n)^inv(σ) + n
|
|
|
|
|
j = s.j^inv(σ)
|
|
|
|
|
elseif s.j > n
|
|
|
|
|
i = s.i^inv(σ)
|
|
|
|
|
j = (s.j - n)^inv(σ) + n
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return MatrixGroups.ElementarySymplectic{N}(s.symbol, i, j, s.val)
|
2022-11-07 16:21:58 +01:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function _conj(
|
2022-11-14 19:50:27 +01:00
|
|
|
|
s::MatrixGroups.ElementarySymplectic{N,T},
|
2022-11-07 16:21:58 +01:00
|
|
|
|
x::Groups.Constructions.DirectPowerElement,
|
|
|
|
|
) where {N,T}
|
|
|
|
|
@assert Groups.order(Int, parent(x).group) == 2
|
|
|
|
|
@assert iseven(N)
|
2022-11-14 19:50:27 +01:00
|
|
|
|
n = N ÷ 2
|
|
|
|
|
i, j = ifelse(s.i <= n, s.i, s.i - n), ifelse(s.j <= n, s.j, s.j - n)
|
|
|
|
|
just_one_flips = xor(isone(x.elts[i]), isone(x.elts[j]))
|
|
|
|
|
return ifelse(just_one_flips, inv(s), s)
|
2022-11-07 16:21:58 +01:00
|
|
|
|
end
|
|
|
|
|
|
2024-02-15 22:42:17 +01:00
|
|
|
|
function action_by_conjugation(
|
|
|
|
|
sln::Groups.MatrixGroups.SymplecticGroup,
|
|
|
|
|
Σ::Groups.Group,
|
|
|
|
|
)
|
|
|
|
|
return AlphabetPermutation(alphabet(sln), Σ, _conj)
|
|
|
|
|
end
|