module PropertyTGroups using PropertyT using AbstractAlgebra using Nemo using Groups using GroupRings export PropertyTGroup, SymmetrizedGroup, GAPGroup, SpecialLinearGroup, SpecialAutomorphismGroup, HigmanGroup, CapraceGroup, MappingClassGroup export PropertyTGroup abstract type PropertyTGroup end abstract type SymmetrizedGroup <: PropertyTGroup end abstract type GAPGroup <: PropertyTGroup end function PropertyTGroup(args) if haskey(args, "SL") G = PropertyTGroups.SpecialLinearGroup(args) elseif haskey(args, "SAut") G = PropertyTGroups.SpecialAutomorphismGroup(args) elseif haskey(args, "MCG") G = PropertyTGroups.MappingClassGroup(args) elseif haskey(args, "Higman") G = PropertyTGroups.HigmanGroup(args) elseif haskey(args, "Caprace") G = PropertyTGroups.CapraceGroup(args) else throw("You must provide one of --SL, --SAut, --MCG, --Higman, --Caprace") end return G end include("autfreegroup.jl") include("speciallinear.jl") Comm(x,y) = x*y*x^-1*y^-1 function generatingset(G::GAPGroup) S = gens(group(G)) return unique([S; inv.(S)]) end include("mappingclassgroup.jl") include("higman.jl") include("caprace.jl") include("actions.jl") end # of module PropertyTGroups