mirror of
https://github.com/kalmarek/PropertyT.jl.git
synced 2024-11-13 05:55:27 +01:00
309 lines
12 KiB
Julia
309 lines
12 KiB
Julia
#= GAP code to generate matrices
|
||
alg := SimpleLieAlgebra("G", 2, Rationals);
|
||
root_sys := RootSystem(alg);
|
||
pos_gens := PositiveRootVectors(root_sys);
|
||
pos_rts := PositiveRoots(root_sys);
|
||
|
||
neg_gens := NegativeRootVectors(root_sys);
|
||
neg_rts := NegativeRoots(root_sys);
|
||
|
||
alg_gens := ShallowCopy(pos_gens);;
|
||
Append(alg_gens, neg_gens);
|
||
grading := ShallowCopy(pos_rts);
|
||
Append(grading, neg_rts);
|
||
|
||
mats := List(alg_gens, x->AdjointMatrix(Basis(alg), x));
|
||
|
||
W := WeylGroup(root_sys);
|
||
PW := Action(W, grading, OnRight);
|
||
=#
|
||
|
||
using LinearAlgebra
|
||
|
||
function matrix_exp(M::AbstractMatrix{<:Integer})
|
||
res = zeros(Rational{eltype(M)}, size(M))
|
||
res += I
|
||
k = 0
|
||
expM = one(M)
|
||
while !iszero(expM)
|
||
k += 1
|
||
expM *= M
|
||
@. res += 1 // factorial(k) * expM
|
||
if k == 20
|
||
@warn "matrix exponential did not converge" norm(expM - exp(M))
|
||
break
|
||
end
|
||
end
|
||
@debug "matrix_exp converged after $k iterations"
|
||
return res
|
||
end
|
||
|
||
const gap_adj_mats = [
|
||
[
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 1],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
],
|
||
[
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, -2],
|
||
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
|
||
],
|
||
[
|
||
[0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -1],
|
||
[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0],
|
||
],
|
||
[
|
||
[0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0],
|
||
[3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0],
|
||
],
|
||
[
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 1],
|
||
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
|
||
],
|
||
[
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0],
|
||
],
|
||
[
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, -1],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
],
|
||
[
|
||
[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 2],
|
||
[0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
],
|
||
[
|
||
[0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[-3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 1],
|
||
[0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0],
|
||
[0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
],
|
||
[
|
||
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
|
||
[0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
],
|
||
[
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, -1],
|
||
[0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
],
|
||
[
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
|
||
[0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
[0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0],
|
||
],
|
||
]
|
||
|
||
function G₂_matrices_roots()
|
||
adj_mats = map(gap_adj_mats) do m
|
||
return hcat(m...)
|
||
end
|
||
adj_mats = filter!(!isdiag, adj_mats) # remove the ones from center
|
||
|
||
gens_mats = [convert(Matrix{Int}, matrix_exp(m')) for m in adj_mats]
|
||
|
||
#=
|
||
The roots from
|
||
|
||
G₂roots_gap = [
|
||
[2, -1], # α = e₁ - e₂
|
||
[-3, 2], # A = -α + β = -e₁ + 2e₂ - e₃
|
||
[-1, 1], # β = e₂ - e₃
|
||
[1, 0], # α + β = e₁ - e₃
|
||
[3, -1], # B = 2α + β = 2e₁ - e₂ - e₃
|
||
[0, 1], # A + B = α + 2β = e₁ + e₂ - 2e₃
|
||
[-2, 1], # -α
|
||
[3, -2], # -A
|
||
[1, -1], # -β
|
||
[-1, 0], # -α - β
|
||
[-3, 1], # -B
|
||
[0, -1], # -A - B
|
||
]
|
||
|
||
G₂roots_gap are the ones from cartan matrix. To obtain the standard
|
||
(hexagonal) picture map them by `T` defined as follows:
|
||
```julia
|
||
cartan = hcat(G₂roots_gap[1:2]...)
|
||
rot(α) = [cos(α) -sin(α); sin(α) cos(α)]
|
||
|
||
c₁ = [√2, 0]
|
||
c₂ = rot(5π / 6) * [√2, 0] * √3 # (= 1/2[√6, 1])
|
||
|
||
T = hcat(c₁, c₂) * inv(cartan)
|
||
```
|
||
By plotting one against the others (or by blind calculation) one can see
|
||
the following assignment. Here `⟨α, β⟩_ℤ = A₂` and `⟨A, B⟩_ℤ ≅ √3/√2 A₂`.
|
||
=#
|
||
e₁ = PropertyT.Roots.𝕖(3, 1)
|
||
e₂ = PropertyT.Roots.𝕖(3, 2)
|
||
e₃ = PropertyT.Roots.𝕖(3, 3)
|
||
|
||
α = e₁ - e₂
|
||
β = e₂ - e₃
|
||
A = -α + β
|
||
B = α + (α + β)
|
||
|
||
roots = [α, A, β, α + β, B, A + B, -α, -A, -β, -α - β, -B, -A - B]
|
||
|
||
return gens_mats, roots
|
||
end
|
||
|
||
function G₂_roots_weyl()
|
||
(mats, roots) = G₂_matrices_roots()
|
||
d = size(first(mats), 1)
|
||
G₂ = Groups.MatrixGroup{d}(mats)
|
||
|
||
m = Groups.gens(G₂)
|
||
|
||
σ = let w = m[1] * inv(m[7]) * m[1], m = union(m, inv.(m))
|
||
PermutationGroups.Perm([findfirst(==(inv(w) * x * w), m) for x in m])
|
||
end
|
||
|
||
τ = let w = m[2] * inv(m[8]) * m[2], m = union(m, inv.(m))
|
||
PermutationGroups.Perm([findfirst(==(inv(w) * x * w), m) for x in m])
|
||
end
|
||
|
||
W = PermGroup(σ, τ)
|
||
|
||
return G₂, roots, W
|
||
end
|