PropertyT.jl/src/actions/alphabet_permutation.jl

45 lines
1.1 KiB
Julia
Raw Normal View History

2022-11-07 16:21:58 +01:00
## action induced from permuting letters of an alphabet
2022-11-07 17:01:06 +01:00
import Groups: Constructions
2022-11-07 16:21:58 +01:00
struct AlphabetPermutation{GEl,I} <: SymbolicWedderburn.ByPermutations
2022-11-07 17:01:06 +01:00
perms::Dict{GEl,PermutationGroups.Perm{I}}
2022-11-07 16:21:58 +01:00
end
function AlphabetPermutation(
A::Alphabet,
Γ::PermutationGroups.AbstractPermutationGroup,
op,
)
return AlphabetPermutation(
2022-11-07 17:01:06 +01:00
Dict(γ => inv(PermutationGroups.Perm([A[op(l, γ)] for l in A])) for γ in Γ),
2022-11-07 16:21:58 +01:00
)
end
function AlphabetPermutation(A::Alphabet, W::Constructions.WreathProduct, op)
return AlphabetPermutation(
Dict(
2022-11-07 17:01:06 +01:00
w => inv(PermutationGroups.Perm([A[op(op(l, w.p), w.n)] for l in A])) for
2022-11-07 16:21:58 +01:00
w in W
),
)
end
function SymbolicWedderburn.action(
act::AlphabetPermutation,
2022-11-07 17:01:06 +01:00
γ::Groups.GroupElement,
g::Groups.AbstractFPGroupElement,
2022-11-07 16:21:58 +01:00
)
G = parent(g)
w = SymbolicWedderburn.action(act, γ, word(g))
return G(w)
2022-11-07 16:21:58 +01:00
end
function SymbolicWedderburn.action(
act::AlphabetPermutation,
2022-11-07 17:01:06 +01:00
γ::Groups.GroupElement,
w::Groups.AbstractWord,
2022-11-07 16:21:58 +01:00
)
return w^(act.perms[γ])
2022-11-07 16:21:58 +01:00
end