From 68e5e8e3ea22bff6a43507c08d339eca41123d67 Mon Sep 17 00:00:00 2001 From: kalmar Date: Tue, 9 May 2017 17:46:52 +0200 Subject: [PATCH] add FPGroups.jl --- src/FPGroups.jl | 52 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/FPGroups.jl diff --git a/src/FPGroups.jl b/src/FPGroups.jl new file mode 100644 index 0000000..aa7285f --- /dev/null +++ b/src/FPGroups.jl @@ -0,0 +1,52 @@ +module FinitelyPresentedGroups + +using Groups + +abstract Group + +immutable FPSymbol{T<:Group} <: GSymbol + gen::String + pow::Integer + parent::T +end + +# FPSymbol(x::String, G::Group) = FPSymbol(x,1,G) +# FPSymbol(s::GSymbol, G::Group) = FPSymbol(s.gen, s.pow, G) + +typealias FPGroupElem GWord{FPSymbol} + +immutable FPGroup <: Group + gens::Vector{FPSymbol} + rels::Vector{FPGroupElem} +# order::Vector{T} +# fast_multable::Array{Int,2} + function FPGroup{T<:GSymbol}(gens::Vector{T}, rels::GWord{T}) + G = new() + gens = [FPSymbol{G}(g.gen, G) for g in gens] + rels = [] + end +end + +FPGroup() = FPGroup(Vector{FPSymbol}(), Vector{GWord{FPSymbol}}()) + +function show(io::IO, G::FPGroup) + print(io, "Finitely presented group on $(length(G.gens)) gens and $(length(G.rels)) relations:\n") + print(io, "gens:\t", join([g.gen for g in G.gens], ","),"\n") + print(io, "rels:\t", join([rel for rel in G.rels], ","),"\n") +end + +function add_gen!{T<:GSymbol}(G::FPGroup, g::T) + if !(g in G.gens) + push!(G.gens, g) + end + return G +end + +function add_rel!{T<:FPSymbol}(G::FPGroup, w::GWord{T}) + if !(w in G.rels) + push!(G.rels, w) + end + return G +end + +end #of module FinitelyPresentedGroups