PropertyT.jl/src/actions/spn_conjugation.jl

48 lines
1.3 KiB
Julia
Raw Normal View History

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},
σ::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
function action_by_conjugation(
sln::Groups.MatrixGroups.SymplecticGroup,
Σ::Groups.Group,
)
return AlphabetPermutation(alphabet(sln), Σ, _conj)
end