mirror of
https://github.com/kalmarek/Groups.jl.git
synced 2024-12-25 18:15:29 +01:00
re-parametrize WreathProducts
This commit is contained in:
parent
d579dd8f35
commit
883b85a7dc
@ -19,28 +19,27 @@ export WreathProduct, WreathProductElem
|
||||
* `N::Group` : the single factor of the group $N$
|
||||
* `P::Generic.PermGroup` : full `PermutationGroup`
|
||||
"""
|
||||
struct WreathProduct{N, T<:Group, I<:Integer} <: Group
|
||||
struct WreathProduct{N, T<:Group, PG<:Generic.PermGroup} <: Group
|
||||
N::DirectPowerGroup{N, T}
|
||||
P::Generic.PermGroup{I}
|
||||
P::PG
|
||||
|
||||
function WreathProduct(Gr::T, P::Generic.PermGroup{I}) where {T, I}
|
||||
function WreathProduct(Gr::T, P::PG) where {T, PG<:Generic.PermGroup}
|
||||
N = DirectPowerGroup(Gr, Int(P.n))
|
||||
return new{Int(P.n), T, I}(N, P)
|
||||
return new{Int(P.n), T, PG}(N, P)
|
||||
end
|
||||
end
|
||||
|
||||
struct WreathProductElem{N, T<:GroupElem, I<:Integer} <: GroupElem
|
||||
struct WreathProductElem{N, T<:GroupElem, P<:Generic.perm} <: GroupElem
|
||||
n::DirectPowerGroupElem{N, T}
|
||||
p::Generic.perm{I}
|
||||
# parent::WreathProduct
|
||||
p::P
|
||||
|
||||
function WreathProductElem(n::DirectPowerGroupElem{N,T}, p::Generic.perm{I},
|
||||
check::Bool=true) where {N, T, I}
|
||||
function WreathProductElem(n::DirectPowerGroupElem{N,T}, p::P,
|
||||
check::Bool=true) where {N, T, P<:Generic.perm}
|
||||
if check
|
||||
length(n.elts) == length(p.d) || throw(DomainError(
|
||||
N == length(p.d) || throw(DomainError(
|
||||
"Can't form WreathProductElem: lengths differ"))
|
||||
end
|
||||
return new{N, T, I}(n, p)
|
||||
return new{N, T, P}(n, p)
|
||||
end
|
||||
end
|
||||
|
||||
@ -50,10 +49,10 @@ end
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
elem_type(::Type{WreathProduct{N, T, I}}) where {N, T, I} = WreathProductElem{N, elem_type(T), I}
|
||||
elem_type(::Type{WreathProduct{N, T, PG}}) where {N, T, PG} = WreathProductElem{N, elem_type(T), elem_type(PG)}
|
||||
|
||||
parent_type(::Type{WreathProductElem{N, T, I}}) where {N, T, I} =
|
||||
WreathProduct{N, parent_type(T), I}
|
||||
parent_type(::Type{WreathProductElem{N, T, P}}) where {N, T, P} =
|
||||
WreathProduct{N, parent_type(T), parent_type(P)}
|
||||
|
||||
parent(g::WreathProductElem) = WreathProduct(parent(g.n[1]), parent(g.p))
|
||||
|
||||
@ -205,7 +204,7 @@ function iterate(G::WreathProduct, state)
|
||||
return G(n,p), (state_N, p, state_P)
|
||||
end
|
||||
|
||||
eltype(::Type{WreathProduct{N,G,I}}) where {N,G,I} = WreathProductElem{N, elem_type(G), I}
|
||||
eltype(::Type{WreathProduct{N,G,PG}}) where {N,G,PG} = WreathProductElem{N, elem_type(G), elem_type(PG)}
|
||||
|
||||
order(G::WreathProduct) = order(G.P)*order(G.N)
|
||||
length(G::WreathProduct) = order(G)
|
||||
|
@ -8,7 +8,7 @@
|
||||
@test Groups.WreathProduct(S_2, S_3) isa AbstractAlgebra.Group
|
||||
B3 = Groups.WreathProduct(S_2, S_3)
|
||||
@test B3 isa Groups.WreathProduct
|
||||
@test B3 isa WreathProduct{3, AbstractAlgebra.Generic.PermGroup{Int}, Int}
|
||||
@test B3 isa WreathProduct{3, Generic.PermGroup{Int}, Generic.PermGroup{Int}}
|
||||
|
||||
aa = Groups.DirectPowerGroupElem((a^0 ,a, a^2))
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
x = Groups.WreathProductElem(aa, b)
|
||||
@test x isa Groups.WreathProductElem
|
||||
@test x isa
|
||||
Groups.WreathProductElem{3, AbstractAlgebra.Generic.perm{Int}, Int}
|
||||
Groups.WreathProductElem{3, perm{Int}, perm{Int}}
|
||||
|
||||
@test B3.N == Groups.DirectPowerGroup(S_2, 3)
|
||||
@test B3.P == S_3
|
||||
@ -35,9 +35,9 @@
|
||||
@testset "Types" begin
|
||||
B3 = Groups.WreathProduct(S_2, S_3)
|
||||
|
||||
@test elem_type(B3) == Groups.WreathProductElem{3, perm{Int}, Int}
|
||||
@test elem_type(B3) == Groups.WreathProductElem{3, perm{Int}, perm{Int}}
|
||||
|
||||
@test parent_type(typeof(B3())) == Groups.WreathProduct{3, parent_type(typeof(B3.N.group())), Int}
|
||||
@test parent_type(typeof(B3())) == Groups.WreathProduct{3, parent_type(typeof(B3.N.group())), Generic.PermGroup{Int}}
|
||||
|
||||
@test parent(B3()) == Groups.WreathProduct(S_2,S_3)
|
||||
@test parent(B3()) == B3
|
||||
@ -89,19 +89,19 @@
|
||||
B3_a = Groups.WreathProduct(AdditiveGroup(GF(3)), S_3)
|
||||
@test order(B3_a) == 3^3*6
|
||||
@test collect(B3_a) isa Vector{
|
||||
WreathProductElem{3, AddGrpElem{AbstractAlgebra.gfelem{Int}}, Int}}
|
||||
WreathProductElem{3, AddGrpElem{AbstractAlgebra.gfelem{Int}}, perm{Int}}}
|
||||
|
||||
B3_m = Groups.WreathProduct(MultiplicativeGroup(GF(3)), S_3)
|
||||
@test order(B3_m) == 2^3*6
|
||||
@test collect(B3_m) isa Vector{
|
||||
WreathProductElem{3, MltGrpElem{AbstractAlgebra.gfelem{Int}}, Int}}
|
||||
WreathProductElem{3, MltGrpElem{AbstractAlgebra.gfelem{Int}}, perm{Int}}}
|
||||
|
||||
@test length(Set([B3_a, B3_m, B3_a])) == 2
|
||||
|
||||
Wr = WreathProduct(PermutationGroup(2),PermutationGroup(4))
|
||||
|
||||
elts = collect(Wr)
|
||||
@test elts isa Vector{Groups.WreathProductElem{4, Generic.perm{Int}, Int}}
|
||||
@test elts isa Vector{Groups.WreathProductElem{4, perm{Int}, perm{Int}}}
|
||||
@test order(Wr) == 2^4*factorial(4)
|
||||
|
||||
@test length(elts) == order(Wr)
|
||||
|
Loading…
Reference in New Issue
Block a user