module SAutFNs using Nemo using Groups if VERSION >= v"0.6.0" import Nemo.Generic.perm end ############################################################################### # # Generating set # ############################################################################### function generatingset(N::Int) SAutFN = AutGroup(FreeGroup(N), special=true) S = gens(SAutFN); S = [S; [inv(s) for s in S]] return SAutFN, unique(S) end function generatingset(parsed_args) N = parsed_args["N"] return generatingset(N) end ############################################################################### # # Action of WreathProductElems on AutGroupElem # ############################################################################### function AutFG_emb(A::AutGroup, g::WreathProductElem) isa(A.objectGroup, FreeGroup) || throw("Not an Aut(Fₙ)") parent(g).P.n == length(A.objectGroup.gens) || throw("No natural embedding of $(parent(g)) into $A") powers = [(elt == parent(elt)() ? 0: 1) for elt in g.n.elts] elt = reduce(*, [A(Groups.flip_autsymbol(i))^pow for (i,pow) in enumerate(powers)]) Groups.r_multiply!(elt, [Groups.perm_autsymbol(g.p)]) return elt end function AutFG_emb(A::AutGroup, p::perm) isa(A.objectGroup, FreeGroup) || throw("Not an Aut(Fₙ)") parent(p).n == length(A.objectGroup.gens) || throw("No natural embedding of $(parent(g)) into $A") return A(Groups.perm_autsymbol(p)) end function (g::WreathProductElem)(a::AutGroupElem) g = AutFG_emb(parent(a),g) return g*a*g^-1 end function (p::perm)(a::AutGroupElem) g = AutFG_emb(parent(a),p) return g*a*g^-1 end autS(N::Int) = WreathProduct(PermutationGroup(2), PermutationGroup(N)) function autS(parsed_args) return autS(parsed_args["N"]) end ############################################################################### # # Misc # ############################################################################### function groupname(parsed_args) N = parsed_args["N"] return groupname(N), N end groupname(N::Int) = "SAutF$(N)" end # of module SAutFNs