Groups.jl/test/AutSigma_41.jl

197 lines
5.7 KiB
Julia
Raw Normal View History

2021-06-10 12:55:21 +02:00
using PermutationGroups
2021-07-07 10:41:34 +02:00
using Groups.KnuthBendix
2021-06-10 12:55:21 +02:00
@testset "Wajnryb presentation for Σ₄₁" begin
genus = 4
2021-08-13 16:20:31 +02:00
Fn = FreeGroup(2genus)
G = SpecialAutomorphismGroup(Fn)
2021-06-10 12:55:21 +02:00
2021-08-13 16:20:31 +02:00
T = Groups.mcg_twists(G)
2021-07-21 16:26:22 +02:00
2021-07-12 11:11:39 +02:00
# symplectic pairing in the free Group goes like this:
2021-07-07 10:41:34 +02:00
# f1 ↔ f5
# f2 ↔ f6
# f3 ↔ f7
# f4 ↔ f8
T = let G = G
(Tas, Tαs, Tes) = Groups.mcg_twists(G)
2021-06-10 12:55:21 +02:00
Ta = G.(Tas)
Tα = G.(Tαs)
Tes = G.(Tes)
[Ta; Tα; Tes]
end
a1 = T[1]^-1 # Ta₁
a2 = T[5]^-1 # Tα
a3 = T[9]^-1 # Te₁₂
a4 = T[6]^-1 # Tα
a5 = T[12]^-1 # Te₂₃
a6 = T[7]^-1 # Tα
a7 = T[14]^-1 # Te₃₄
a8 = T[8]^-1 # Tα
b0 = T[2]^-1 # Ta₂
2021-07-07 10:41:34 +02:00
a0 = (a1 * a2 * a3)^4 * b0^-1 # from the 3-chain relation
X = a4 * a5 * a3 * a4 # auxillary, not present in the Primer
b1 = X^-1 * a0 * X
2021-06-10 12:55:21 +02:00
b2 = T[10]^-1 # Te₁₃
2021-07-07 10:41:34 +02:00
As = T[[1, 5, 9, 6, 12, 7, 14, 8]] # the inverses of the elements a
@testset "preserving relator" begin
F = Groups.object(G)
2021-07-21 16:26:22 +02:00
R = prod(commutator(gens(F,2i+1), gens(F,2i+2)) for i in 0:genus-1)
2021-07-07 10:41:34 +02:00
for g in T
@test g(R) == R
2021-07-07 10:41:34 +02:00
end
end
2021-06-10 12:55:21 +02:00
@testset "commutation relations" begin
for (i, ai) in enumerate(As) #the element ai here is actually the inverse of ai before. It does not matter for commutativity. Also, a0 is as defined before.
for (j, aj) in enumerate(As)
2021-07-07 10:41:34 +02:00
if abs(i - j) > 1
@test ai * aj == aj * ai
2021-06-10 12:55:21 +02:00
elseif i j
2021-07-07 10:41:34 +02:00
@test ai * aj != aj * ai
2021-06-10 12:55:21 +02:00
end
end
if i != 4
2021-07-07 10:41:34 +02:00
@test a0 * ai == ai * a0
2021-06-10 12:55:21 +02:00
end
end
end
@testset "braid relations" begin
for (i, ai) in enumerate(As) #the element ai here is actually the inverse of ai before. It does not matter for braid relations.
for (j, aj) in enumerate(As)
2021-07-07 10:41:34 +02:00
if abs(i - j) == 1
@test ai * aj * ai == aj * ai * aj
2021-06-10 12:55:21 +02:00
end
end
end
2021-07-07 10:41:34 +02:00
@test a0 * a4 * a0 == a4 * a0 * a4 # here, a0 and a4 are as before
2021-06-10 12:55:21 +02:00
end
@testset "3-chain relation" begin
x = a4*a3*a2*a1*a1*a2*a3*a4 # auxillary; does not have a name in the Primer
@test b0 == x*a0*x^-1
end
2021-06-10 12:55:21 +02:00
@testset "Lantern relation" begin
@testset "b2 definition" begin
2021-07-07 10:41:34 +02:00
@test b2 == (a2 * a3 * a1 * a2)^-1 * b1 * (a2 * a3 * a1 * a2)
2021-06-10 12:55:21 +02:00
# some additional tests, checking what explicitly happens to the generators of the π₁ under b2
2021-07-07 10:41:34 +02:00
d = Groups.domain(b2)
2021-07-21 16:26:22 +02:00
img = evaluate(b2)
z = img[3] * d[3]^-1
@test img[1] == d[1]
@test img[2] == d[2]
@test img[3] == z * d[3]
@test img[4] == z * d[4] * z^-1
@test img[5] == z * d[5] * z^-1
@test img[6] == z * d[6] * z^-1
@test img[7] == d[7] * z^-1
@test img[8] == d[8]
2021-06-10 12:55:21 +02:00
end
@testset "b2: commutation relations" begin
2021-07-07 10:41:34 +02:00
@test b2 * a1 == a1 * b2
@test b2 * a2 != a2 * b2
@test b2 * a3 == a3 * b2
@test b2 * a4 == a4 * b2
@test b2 * a5 == a5 * b2
@test b2 * a6 != a6 * b2
2021-06-10 12:55:21 +02:00
end
@testset "b2: braid relations" begin
2021-07-07 10:41:34 +02:00
@test a2 * b2 * a2 == b2 * a2 * b2
@test a6 * b2 * a6 == b2 * a6 * b2
2021-06-10 12:55:21 +02:00
end
@testset "lantern" begin
2021-07-07 10:41:34 +02:00
u = (a6 * a5)^-1 * b1 * (a6 * a5)
x = (a6 * a5 * a4 * a3 * a2 * u * a1^-1 * a2^-1 * a3^-1 * a4^-1) # yet another auxillary
2021-06-10 12:55:21 +02:00
# x = (a4^-1*a3^-1*a2^-1*a1^-1*u*a2*a3*a4*a5*a6)
2022-04-02 15:53:55 +02:00
2021-07-07 10:41:34 +02:00
b3 = x * a0 * x^-1
2022-04-02 15:53:55 +02:00
b3im = evaluate(b3)
b3cim = let g = b3
2021-08-13 16:20:31 +02:00
f = Groups.compiled(g)
f(Groups.domain(g))
end
@test b3im == b3cim
2021-07-07 10:41:34 +02:00
@test a0 * b2 * b1 == a1 * a3 * a5 * b3
2022-04-02 15:53:55 +02:00
@time evaluate(x)
let g = b3
f = Groups.compiled(g)
f(Groups.domain(g))
@time f(Groups.domain(g))
end
2021-06-10 12:55:21 +02:00
end
end
2021-07-07 10:41:34 +02:00
Base.conj(t::Groups.Transvection, p::Perm) =
Groups.Transvection(t.id, t.i^p, t.j^p, t.inv)
2021-06-10 12:55:21 +02:00
2021-07-07 10:41:34 +02:00
function Base.conj(elt::FPGroupElement, p::Perm)
2021-06-10 12:55:21 +02:00
G = parent(elt)
2021-07-07 10:41:34 +02:00
A = alphabet(elt)
return G([A[conj(A[idx], p)] for idx in word(elt)])
2021-06-10 12:55:21 +02:00
end
@testset "Te₂₃ definition" begin
Te₁₂, Te₂₃ = T[9], T[12]
G = parent(Te₁₂)
2021-07-07 10:41:34 +02:00
F₈ = Groups.object(G)
2021-07-21 16:26:22 +02:00
(δ, d, γ, c, β, b, α, a) = Groups.gens(F₈)
Groups.domain(Te₁₂)
2021-06-10 12:55:21 +02:00
2021-07-07 10:41:34 +02:00
img_Te₂₃ = evaluate(Te₂₃)
y = c * β^-1 * b^-1 * β
2021-07-21 16:26:22 +02:00
@test img_Te₂₃ == (δ, d, y * γ, y * c * y^-1, β * y^-1, b, α, a)
2021-06-10 12:55:21 +02:00
2021-07-21 16:26:22 +02:00
σ = perm"(7,5,3)(8,6,4)"
2021-06-10 12:55:21 +02:00
Te₂₃_σ = conj(Te₁₂, σ)
2021-07-07 10:41:34 +02:00
# @test word(Te₂₃_σ) == word(Te₂₃)
2021-06-10 12:55:21 +02:00
2021-07-07 10:41:34 +02:00
@test evaluate(Te₂₃_σ) == evaluate(Te₂₃)
2021-06-10 12:55:21 +02:00
@test Te₂₃ == Te₂₃_σ
end
@testset "Te₃₄ definition" begin
Te₁₂, Te₃₄ = T[9], T[14]
G = parent(Te₁₂)
2021-07-07 10:41:34 +02:00
F₈ = Groups.object(G)
2021-07-21 16:26:22 +02:00
(δ, d, γ, c, β, b, α, a) = Groups.gens(F₈)
2021-06-10 12:55:21 +02:00
2021-07-21 16:26:22 +02:00
σ = perm"(7,3)(8,4)(5,1)(6,2)"
2021-06-10 12:55:21 +02:00
Te₃₄_σ = conj(Te₁₂, σ)
@test Te₃₄ == Te₃₄_σ
end
2021-07-07 10:41:34 +02:00
@testset "hyperelliptic τ is central" begin
2021-08-13 16:20:31 +02:00
τ = Groups.rotation_element(G)
2021-07-07 10:41:34 +02:00
τᵍ = τ^genus
symplectic_gens = let genus = genus, G = G
π₁Σ = Groups.SurfaceGroup(genus, 0)
2021-08-13 16:20:31 +02:00
s_twists = Groups.symplectic_twists(π₁Σ)
G.(word(t.autFn_word) for t in s_twists)
end
@test all(sg * τᵍ == τᵍ * sg for sg in symplectic_gens)
2021-07-07 10:41:34 +02:00
end
2021-06-10 12:55:21 +02:00
end