PropertyT.jl/src/sqadjop.jl

99 lines
2.8 KiB
Julia
Raw Normal View History

2019-10-30 23:58:10 +01:00
isopposite(σ::Generic.Perm, τ::Generic.Perm, i=1, j=2) =
2019-06-30 13:19:24 +02:00
σ[i] τ[i] && σ[i] τ[j] &&
σ[j] τ[i] && σ[j] τ[j]
2019-10-30 23:58:10 +01:00
isadjacent(σ::Generic.Perm, τ::Generic.Perm, i=1, j=2) =
2019-06-30 13:19:24 +02:00
(σ[i] == τ[i] && σ[j] τ[j]) || # first equal, second differ
2020-04-19 21:37:09 +02:00
(σ[j] == τ[j] && σ[i] τ[i]) || # second equal, first differ
2019-06-30 13:19:24 +02:00
(σ[i] == τ[j] && σ[j] τ[i]) || # first σ equal to second τ
(σ[j] == τ[i] && σ[i] τ[j]) # second σ equal to first τ
Base.div(X::GroupRingElem, x::Number) = parent(X)(X.coeffsx)
function Sq(RG::GroupRing, N::Integer)
S₂ = generating_set(RG.group, 2)
= Int64
Δ₂ = length(S₂)*one(RG, ) - RG(S₂, );
2020-06-23 16:15:01 +02:00
Alt_N = [g for g in SymmetricGroup(N) if parity(g) == 0]
2019-06-30 13:19:24 +02:00
sq = RG()
for σ in Alt_N
GroupRings.addeq!(sq, *(Δ₂^σ, Δ₂^σ, false))
2019-06-30 13:19:24 +02:00
end
return sq÷factorial(N-2)
end
function Adj(RG::GroupRing, N::Integer)
S₂ = generating_set(RG.group, 2)
= Int64
Δ₂ = length(S₂)*one(RG, ) - RG(S₂, );
2020-06-23 16:15:01 +02:00
Alt_N = [g for g in SymmetricGroup(N) if parity(g) == 0]
Δ₂s = Dict(σ=>Δ₂^σ for σ in Alt_N)
2019-06-30 13:19:24 +02:00
adj = RG()
for σ in Alt_N
for τ in Alt_N
if isadjacent(σ, τ)
GroupRings.addeq!(adj, *(Δ₂s[σ], Δ₂s[τ], false))
end
end
end
return adj÷factorial(N-2)^2
end
function Op(RG::GroupRing, N::Integer)
if N < 4
return RG()
end
S₂ = generating_set(RG.group, 2)
= Int64
Δ₂ = length(S₂)*one(RG, ) - RG(S₂, );
2020-06-23 16:15:01 +02:00
Alt_N = [g for g in SymmetricGroup(N) if parity(g) == 0]
Δ₂s = Dict(σ=>Δ₂^σ for σ in Alt_N)
2019-06-30 13:19:24 +02:00
op = RG()
for σ in Alt_N
for τ in Alt_N
if isopposite(σ, τ)
GroupRings.addeq!(op, *(Δ₂s[σ], Δ₂s[τ], false))
end
end
end
return op÷factorial(N-2)^2
end
for Elt in [:Sq, :Adj, :Op]
@eval begin
$Elt(RG::GroupRing{AutGroup{N}}) where N = $Elt(RG, N)
$Elt(RG::GroupRing{<:MatAlgebra}) = $Elt(RG, nrows(RG.group))
2019-06-30 13:19:24 +02:00
end
end
function SqAdjOp(RG::GroupRing, N::Integer)
S₂ = generating_set(RG.group, 2)
= Int64
Δ₂ = length(S₂)*one(RG, ) - RG(S₂, );
2020-06-23 16:15:01 +02:00
Alt_N = [σ for σ in SymmetricGroup(N) if parity(σ) == 0]
2019-06-30 13:19:24 +02:00
sq, adj, op = RG(), RG(), RG()
2020-10-17 02:13:59 +02:00
Δ₂s = Dict(σ=>Δ₂^σ for σ in Alt_N)
2019-06-30 13:19:24 +02:00
for σ in Alt_N
GroupRings.addeq!(sq, *(Δ₂s[σ], Δ₂s[σ], false))
for τ in Alt_N
if isopposite(σ, τ)
GroupRings.addeq!(op, *(Δ₂s[σ], Δ₂s[τ], false))
elseif isadjacent(σ, τ)
GroupRings.addeq!(adj, *(Δ₂s[σ], Δ₂s[τ], false))
end
end
end
k = factorial(N-2)
return sq÷k, adj÷k^2, op÷k^2
end