1
0
mirror of https://github.com/kalmarek/PropertyT.jl.git synced 2024-11-26 00:55:27 +01:00

fix actions on SpNs

This commit is contained in:
Marek Kaluba 2022-11-14 19:50:27 +01:00
parent 971e07b819
commit 703e69fc62
No known key found for this signature in database
GPG Key ID: 8BF1A3855328FC15
2 changed files with 28 additions and 10 deletions

View File

@ -4,6 +4,7 @@ StarAlgebras.star(g::Groups.GroupElement) = inv(g)
include("alphabet_permutation.jl") include("alphabet_permutation.jl")
include("sln_conjugation.jl") include("sln_conjugation.jl")
include("spn_conjugation.jl")
include("autfn_conjugation.jl") include("autfn_conjugation.jl")
function SymbolicWedderburn.action( function SymbolicWedderburn.action(

View File

@ -1,26 +1,43 @@
## Particular definitions for actions on Sp(n,) ## Particular definitions for actions on Sp(n,)
function _conj( function _conj(
t::MatrixGroups.ElementarySymplectic{N,T}, s::MatrixGroups.ElementarySymplectic{N,T},
σ::PermutationGroups.AbstractPerm, σ::PermutationGroups.AbstractPerm,
) where {N,T} ) where {N,T}
@assert iseven(N) @assert iseven(N)
@assert degree(σ) == N ÷ 2 "Got degree = $(degree(σ)); N = $N" @assert PermutationGroups.degree(σ) == N ÷ 2 "Got degree = $(PermutationGroups.degree(σ)); N = $N"
i = mod1(t.i, N ÷ 2) n = N ÷ 2
ib = i == t.i ? 0 : N ÷ 2 @assert 1 s.i N
j = mod1(t.j, N ÷ 2) @assert 1 s.j N
jb = j == t.j ? 0 : N ÷ 2 if s.symbol == :A
return MatrixGroups.ElementarySymplectic{N}(t.symbol, i^inv(σ) + ib, j^inv(σ) + jb, t.val) @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)
end end
function _conj( function _conj(
t::MatrixGroups.ElementarySymplectic{N,T}, s::MatrixGroups.ElementarySymplectic{N,T},
x::Groups.Constructions.DirectPowerElement, x::Groups.Constructions.DirectPowerElement,
) where {N,T} ) where {N,T}
@assert Groups.order(Int, parent(x).group) == 2 @assert Groups.order(Int, parent(x).group) == 2
@assert iseven(N) @assert iseven(N)
just_one_flips = xor(isone(x.elts[mod1(t.i, N ÷ 2)]), isone(x.elts[mod1(t.j, N ÷ 2)])) n = N ÷ 2
return ifelse(just_one_flips, inv(t), t) 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)
end end
action_by_conjugation(sln::Groups.MatrixGroups.SymplecticGroup, Σ::Groups.Group) = action_by_conjugation(sln::Groups.MatrixGroups.SymplecticGroup, Σ::Groups.Group) =