1
0
mirror of https://github.com/kalmarek/Groups.jl.git synced 2024-12-26 02:20:30 +01:00

fix FPGroups and add basic tests

This commit is contained in:
kalmarek 2019-11-15 23:32:04 +01:00
parent dd4ed1497c
commit 4bcd851031
No known key found for this signature in database
GPG Key ID: 8BF1A3855328FC15
3 changed files with 22 additions and 5 deletions

View File

@ -42,6 +42,7 @@ elem_type(::FPGroup) = FPGroupElem
FPSymbol(s::Symbol) = FPSymbol(s, 1) FPSymbol(s::Symbol) = FPSymbol(s, 1)
FPSymbol(s::String) = FPSymbol(Symbol(s)) FPSymbol(s::String) = FPSymbol(Symbol(s))
FPSymbol(s::GSymbol) = FPSymbol(s.id, s.pow)
convert(::Type{FPSymbol}, s::FreeSymbol) = FPSymbol(s.id, s.pow) convert(::Type{FPSymbol}, s::FreeSymbol) = FPSymbol(s.id, s.pow)
@ -70,7 +71,7 @@ function (G::FPGroup)(w::GWord)
end end
if eltype(w.symbols) == FreeSymbol if eltype(w.symbols) == FreeSymbol
w = FPGroupElem(w.symbols) w = FPGroupElem(FPSymbol.(w.symbols))
end end
if eltype(w.symbols) == FPSymbol if eltype(w.symbols) == FPSymbol
@ -169,8 +170,8 @@ function add_rels!(G::FPGroup, newrels::Dict{FPGroupElem,FPGroupElem})
end end
end end
function /(G::FPGroup, newrels::Vector{FPGroupElem}) function Base.:/(G::FPGroup, newrels::Vector{FPGroupElem})
for r in rels for r in newrels
parent(r) == G || throw(DomainError( parent(r) == G || throw(DomainError(
"Can not form quotient group: $r is not an element of $G")) "Can not form quotient group: $r is not an element of $G"))
end end
@ -180,12 +181,12 @@ function /(G::FPGroup, newrels::Vector{FPGroupElem})
return H return H
end end
function /(G::FreeGroup, rels::Vector{FreeGroupElem}) function Base.:/(G::FreeGroup, rels::Vector{FreeGroupElem})
for r in rels for r in rels
parent(r) == G || throw(DomainError( parent(r) == G || throw(DomainError(
"Can not form quotient group: $r is not an element of $G")) "Can not form quotient group: $r is not an element of $G"))
end end
H = FPGroup(G) H = FPGroup(deepcopy(G))
H.rels = Dict(H(rel) => one(H) for rel in unique(rels)) H.rels = Dict(H(rel) => one(H) for rel in unique(rels))
return H return H
end end

15
test/FPGroup-tests.jl Normal file
View File

@ -0,0 +1,15 @@
@testset "FPGroups definitions" begin
F = FreeGroup(["a", "b", "c"])
a,b,c = gens(F)
R = [a^2, a*b*a, c*b*a]
@test F/R isa FPGroup
@test F isa FreeGroup
G = F/R
A,B,C = gens(G)
@test A^2 == one(G)
@test A*B*A*A == A
@test A*A*B*A == B*A
@test G/[B^2, C*B*C] isa FPGroup
end

View File

@ -21,4 +21,5 @@ using LinearAlgebra
include("AutGroup-tests.jl") include("AutGroup-tests.jl")
include("DirectPower-tests.jl") include("DirectPower-tests.jl")
include("WreathProd-tests.jl") include("WreathProd-tests.jl")
include("FPGroup-tests.jl")
end end