2018-03-22 10:59:27 +01:00
|
|
|
module SpecialAutomorphisms
|
2017-11-06 01:58:16 +01:00
|
|
|
|
2018-07-31 12:42:58 +02:00
|
|
|
using AbstractAlgebra
|
2017-11-06 01:58:16 +01:00
|
|
|
using Groups
|
|
|
|
|
2018-07-31 12:42:58 +02:00
|
|
|
import AbstractAlgebra.perm
|
2017-11-06 14:25:54 +01:00
|
|
|
|
2017-11-06 01:58:16 +01:00
|
|
|
###############################################################################
|
|
|
|
#
|
|
|
|
# Generating set
|
|
|
|
#
|
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
function generatingset(N::Int)
|
|
|
|
|
|
|
|
SAutFN = AutGroup(FreeGroup(N), special=true)
|
|
|
|
S = gens(SAutFN);
|
|
|
|
|
2018-03-22 10:59:27 +01:00
|
|
|
return SAutFN, unique([S; inv.(S)])
|
2017-11-06 01:58:16 +01:00
|
|
|
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
|
|
|
|
|
2018-07-31 12:42:58 +02:00
|
|
|
function (g::WreathProductElem)(a::Groups.Automorphism)
|
2017-11-06 01:58:16 +01:00
|
|
|
g = AutFG_emb(parent(a),g)
|
|
|
|
return g*a*g^-1
|
|
|
|
end
|
|
|
|
|
2018-07-31 12:42:58 +02:00
|
|
|
function (p::perm)(a::Groups.Automorphism)
|
2017-11-06 01:58:16 +01:00
|
|
|
g = AutFG_emb(parent(a),p)
|
|
|
|
return g*a*g^-1
|
|
|
|
end
|
|
|
|
|
2017-11-08 11:55:34 +01:00
|
|
|
autS(N::Int) = WreathProduct(PermutationGroup(2), PermutationGroup(N))
|
|
|
|
|
2017-11-06 01:58:16 +01:00
|
|
|
function autS(parsed_args)
|
2017-11-08 11:55:34 +01:00
|
|
|
return autS(parsed_args["N"])
|
2017-11-06 01:58:16 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
#
|
|
|
|
# Misc
|
|
|
|
#
|
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
function groupname(parsed_args)
|
|
|
|
N = parsed_args["N"]
|
2017-12-21 13:02:00 +01:00
|
|
|
return groupname(N), N
|
2017-11-06 01:58:16 +01:00
|
|
|
end
|
|
|
|
|
2018-01-04 10:48:54 +01:00
|
|
|
groupname(N::Int) = "SAutF$(N)"
|
2017-12-21 13:02:00 +01:00
|
|
|
|
2018-03-22 10:59:27 +01:00
|
|
|
end # of module SpecialAutomorphisms
|