Introduction
The central objetct here are $G$-modules: Let $G$ be a finite group and $M$ be any abelian group. A $G$-module $C$ is given by specifying automorphisms of $M$ for each generator of $G$, thus as a $G$-action on $M$. Here $M$ can have a wide range of types, including
- abelian groups
- fp-modules (over fields/ the integers)
In fact, as long as the homomorphisms are sufficiently powerful, the $G$-module code may work.
julia> k, a = cyclotomic_field(11);
julia> u, mu = unit_group(maximal_order(k));
julia> C = gmodule(automorphism_group(PermGroup, k)[1], mu)
G-module for permutation group of degree 10 acting on u
julia> G = group(C)
Permutation group of degree 10
julia> C = natural_gmodule(G, QQ)
G-module for G acting on vector space of dimension 10 over QQ
The aim here is to model and work with
- compute (Galois-) cohomology
- group extensions
- representations
Creation
gmodule — Function
gmodule(H::PermGroup, mR::MapRayClassGrp, mG = automorphism_group(PermGroup, Hecke.nf(order(codomain((mR)))))[2])The natural ZZ[H] module where H, a subgroup of the automorphism group acts on the ray class group.
This function is part of the experimental code in Oscar. Please read here for more details.
gmodule(R::ClassField, mG = automorphism_group(PermGroup, base_field(R))[2]; check::Bool = true)The natural ZZ[G] module where G, the automorphism group, acts on the ideal group defining the class field.
This function is part of the experimental code in Oscar. Please read here for more details.
gmodule(H::PermGroup, R::ClassField, mG = automorphism_group(PermGroup, k))The natural ZZ[H] module where H, a subgroup of the automorphism group, acts on the ideal group defining the class field.
This function is part of the experimental code in Oscar. Please read here for more details.
gmodule(K::Hecke.LocalField, k::Union{Hecke.LocalField, PadicField, QadicField} = base_field(K); Sylow::Int = 0, full::Bool = false)For a local field extension K/k, return the multiplicative group of K as a Gal(K/k) module. Strictly, it returns a quotient of K^* that is cohomologically equivalent. For unramified fields, the quotient is just ZZ, for tame fields, it will be isomorphic to ZZ times F_q^* for the residue field F_q. In the wild case a suitable induced module is factored out.
Returns:
- the gmodule
- the map from G = Gal(K/k) -> Set of actual automorphisms
- the map from the module into K
This function is part of the experimental code in Oscar. Please read here for more details.
gmodule(k::Field, C::GModule)Rewrite the module over the field k.
This function is part of the experimental code in Oscar. Please read here for more details.
gmodule(H::Union{Nothing, Oscar.GAPGroup}, ac::Vector{<:Map})Given an automorphism of some module for each generator of the group H, return the ZZ[H] module.
Note: we do not check that this defined indeed a ZZ[H] module.
This function is part of the experimental code in Oscar. Please read here for more details.
action — Function
action(C::GModule, g, v::T) where T <: ArrayFor an array of objects in the module, compute the image under the action of g, ie. an array where each entry is mapped.
This function is part of the experimental code in Oscar. Please read here for more details.
induce — Method
induce(C::GModule{GT, MT}, h::Map, D = nothing, mDC = nothing) where GT <: GAPGroup where MTFor a Z[U]-Module C and a map U->G, compute the induced module: ind_U^G(C) = C otimes Z[G] where the tensor product is over Z[U]. The induced module is returned as a product of copies of C. it also returns
- the transversal used
- the projections
- the injections
If D and mDC are given then mDC: D -> C.M has to be a Z[U] linear homomorphism. I this case a Z[G] linear map to the induced module is returned.
This function is part of the experimental code in Oscar. Please read here for more details.
cohomology_group — Function
cohomology_group(C::GModule, i::Int; Tate::Bool = false)For a gmodule C compute the i-th cohomology group where i can be 0, 1 or 2. (or 3 ...) Together with the abstract module, a map is provided that will produce explicit cochains.
This function is part of the experimental code in Oscar. Please read here for more details.
extension — Function
extension(::Type{FPGroup}, c::CoChain{2,<:Oscar.GAPGroupElem})Given a 2-cocycle, return the corresponding group extension, ie. the large group, the injection of the abelian group and the quotient as well as a map that given a tuple of elements in the group and the abelian group returns the corresponding elt in the extension.
If the gmodule is defined via a pc-group and the 1st argument is the Type{PcGroup}, the resulting group is also pc.
This function is part of the experimental code in Oscar. Please read here for more details.
extension_with_abelian_kernel — Function
is_central — Method
restriction_of_scalars — Function
restriction_of_scalars(M::GModule, phi::Map)Return the S-module obtained by restricting the scalars of M from R to S, where phi is an embedding of S into R.
If R has S-rank d and M has rank n then the returned module has rank d*n.
Examples
julia> G = dihedral_group(20);
julia> T = character_table(G);
julia> C = gmodule(T[8]);
julia> C = gmodule(CyclotomicField, C);
julia> h = subfields(base_ring(C), degree = 2)[1][2];
julia> restriction_of_scalars(C, h)
(G-module for G acting on vector space of dimension 4 over number field, Map: C -> g-module for G acting on vector space of dimension 4 over number field)
julia> restriction_of_scalars(C, QQ)
G-module for G acting on vector space of dimension 8 over QQ
This function is part of the experimental code in Oscar. Please read here for more details.
trivial_gmodule — Function
trivial_gmodule(G::Group, M::FinGenAbGroup)
trivial_gmodule(G::Group, M::AbstractAlgebra.FPModule)Return the G-module over the underlying set M with trivial G-action, i.e., g(m) == m for all $g\in G$ and $m\in M$.
This function is part of the experimental code in Oscar. Please read here for more details.
regular_gmodule — Function
regular_gmodule(G::GAPGroup, R::Ring)Return (R[G], f, g), where
R[G]is the group ring ofGoverR, as a G-module object,fis a function that, when applied to aG-moduleMoverR, will return a functionFrepresenting the action ofR[G]onMin the sense that for a vectorxof lengthorder(G)overR,F(x)is the module homomorphism onMinduced by the action of the element ofR[G]with coefficient vectorx, andgis a bijective map between the elements ofGand the indices of the corresponding module generators.
This function is part of the experimental code in Oscar. Please read here for more details.
natural_gmodule — Function
gmodule_minimal_field — Function
gmodule_over — Function
factor_set — Function
factor_set(C::GModule{<:Any, <:AbstractAlgebra.FPModule{AbsSimpleNumFieldElem}}, mA::Union{Map, Nothing} = nothing)Compute the factor set or 2-cochain defined by C as a Galois module of the automorphism group over the character field. If mA is given, it needs to map the automorphism group over the character field into the the automorphisms of the base ring.
This function is part of the experimental code in Oscar. Please read here for more details.
indecomposition — Function
indecomposition(C::GModule{<:Any, <:AbstractAlgebra.FPModule{<:FinFieldElem}})Return a decomposition of the module C into indecomposable summands as a list of pairs:
- a direct indecomposable summand
- a homomorphism (embedding) of the underlying free modules
This function is part of the experimental code in Oscar. Please read here for more details.
units_mod_ideal — Function
units_mod_ideal(I::AbsSimpleNumFieldOrderIdeal; n_quo::Int = 0) -> FinGenAbGroup, Map{Grp, AbsSimpleNumFieldOrder}Compute the unit group of the order modulo I. If n_quo is non-zero, the quotient modulo n_quo is computed.
This function is part of the experimental code in Oscar. Please read here for more details.
is_coboundary — Function
is_coboundary(c::CoChain{2,PermGroupElem,MultGrpElem{AbsSimpleNumFieldElem}})For a 2-cochain with values in the multiplicative group of a number field, decide if it is a coboundary (trivial in the Brauer group). If so also return a splitting 1-cochain.
This function is part of the experimental code in Oscar. Please read here for more details.
decomposition_group — Function
decomposition_group(K::AbsSimpleNumField, mK::Map, mG::Map, mGp; _sub::Bool = false)For a completion C of a number field K, implicitly given as the map mK: K -> C And the automorphism group G of K given via mG: G -> Aut(K) mG defaults to the full automorphism group of K as a permutation group. And the automorphism group Gp of Kp, given via mGp: Gp -> Aut(Kp) defaulting to the full automorphism group over the prime field.
Find the embedding of Gp -> G, realizing the local automorphism group as a subgroup of the global one.
This function is part of the experimental code in Oscar. Please read here for more details.
decomposition_group — Function
decomposition_group(K::AbsSimpleNumField, emb::Hecke.NumFieldEmb, mG::Map)For a real or complex embedding emb, find the unique automorphism that acts on this embedding as complex conjugation. mG, when given, should be the map from the automorphism group. Otherwise it will be automatically supplied.
This function is part of the experimental code in Oscar. Please read here for more details.
idele_class_gmodule — Function
idele_class_gmodule(k::AbsSimpleNumField, s::Vector{Int} = Int[])Following Debeerst: Algorithms for Tamagawa Number Conjectures. Dissertation, University of Kassel, June 2011. or Ali,
Find a gmodule C s.th. C is cohomology-equivalent to the cohomology of the idele class group. The primes in s will always be used.
This function is part of the experimental code in Oscar. Please read here for more details.
galois_group — Method
galois_group(A::ClassField, ::QQField; idele_parent::IdeleParent = idele_class_gmodule(base_field(A)))Determine the Galois group (over QQ) of the extension parametrized by A. A needs to be normal over QQ.
Examples
julia> QQx, x = QQ[:x];
julia> k, a = number_field(x^4 - 12*x^3 + 36*x^2 - 36*x + 9);
julia> a = ray_class_field(8*3*maximal_order(k), n_quo = 2);
julia> a = filter(is_normal, subfields(a, degree = 2));
julia> I = idele_class_gmodule(k);
julia> b = [galois_group(x, QQ, idele_parent = I) for x = a];
julia> [describe(x[1]) for x = b]
3-element Vector{String}:
"C4 x C2"
"Q8"
"D8"
This function is part of the experimental code in Oscar. Please read here for more details.
relative_brauer_group — Function
relative_brauer_group(K::AbsSimpleNumField, k)For k a subfield or QQ, create the relative Brauer group as an infinite direct sum of the local Brauer groups.
The second return value is a map translating between the local data and explicit 2-cochains.
julia> G = SL(2,5)
SL(2,5)
julia> T = character_table(G);
julia> R = gmodule(T[9])
G-module for G acting on vector space of dimension 6 over abelian closure of QQ
julia> S = gmodule(CyclotomicField, R)
G-module for G acting on vector space of dimension 6 over cyclotomic field of order 5
julia> B, mB = relative_brauer_group(base_ring(S), character_field(S));
julia> B
Relative Brauer group for cyclotomic field of order 5 over number field of degree 1 over QQ
julia> b = B(S)
Element of relative Brauer group of number field of degree 1 over QQ
<2> -> 1//2 + Z
<5> -> 0 + Z
Real embedding of number field -> 1//2 + ZThis function is part of the experimental code in Oscar. Please read here for more details.
brauer_group — Function
brauer_group(K::AbsSimpleNumField)The Brauer group as an infinite direct sum of the local Brauer groups.
The second return value is a map translating between the local data and explicit 2-cochains.
EXAMPLES
julia> k = rationals_as_number_field()[1];
julia> lp = collect(keys(factor(30*maximal_order(k))));
julia> qz = Hecke.QmodnZ();
julia> B, mB = brauer_group(k);
julia> b = B(Dict(lp[1]=>qz(1//3), lp[2]=>qz(2//3)));
julia> c = mB(b);
julia> C = structure_constant_algebra(c);
julia> Hecke.local_schur_indices(C);
julia> c = mB(b+b);
This function is part of the experimental code in Oscar. Please read here for more details.
structure_constant_algebra — Method
structure_constant_algebra — Function
structure_constant_algebra(CC::GrpCoh.CoChain{2, PermGroupElem, GrpCoh.MultGrpElem{AbsSimpleNumFieldElem}}, mG::Map = automorphism_group(PermGroup, CC.C.M.data)[2], mkK::Union{<:Map, Nothing} = nothing)Return the cross-product algebra defined by the factor system given as a 2-cochain.
This function is part of the experimental code in Oscar. Please read here for more details.
Tutorials
We encourage you to take a look at the tutorials on intersection theory in OSCAR, which can be found here.
Contact
Please direct questions about this part of OSCAR to the following people:
You can ask questions in the OSCAR Slack.
Alternatively, you can raise an issue on github.