Given an abelian group A and a collection G which is an abelian group with the operation op, this functions returns isomorphisms G→A and A→G encoded as dictionaries.
Assuming that the non-empty array s contains elements of an abelian group G, this functions returns the subgroup H of G generated by the elements in s together with the injection ι:H→G.
sub(F::FreeMod{T}, V::Vector{<:FreeModElem{T}}; cache_morphism::Bool=false) where {T}
Given a vector V of (homogeneous) elements of F, return a pair (I, inc) consisting of the (graded) submodule I of F generated by these elements and its inclusion map inc : I ↪ F.
When cache_morphism is set to true, then inc will be cached and available for transport and friends.
If only the submodule itself is desired, use sub_object instead.
sub(F::FreeMod{T}, A::MatElem{T}; cache_morphism::Bool=false) where {T}
Given a (homogeneous) matrix A interpret the rows of A as elements of the free module F and return a pair (I, inc) consisting of the (graded) submodule I of F generated by these row vectors, together with its inclusion map inc : I ↪ F.
When cache_morphism is set to true, then inc will be cached and available for transport and friends.
If only the submodule itself is desired, use sub_object instead.
sub(F::FreeMod{T}, O::Vector{<:SubquoModuleElem{T}}; cache_morphism::Bool=false) where T
Suppose the ambient_free_module of the parentM of the elements v_i in O is F and M is a submodule (i.e. no relations are present). Then this returns a pair (I, inc) consisting of the submodule I generated by the elements in O in F, together with its inclusion morphism inc : I ↪ F.
When cache_morphism is set to true, then inc will be cached and available for transport and friends.
If only the submodule itself is desired, use sub_object instead.
sub(M::SubquoModule{T}, V::Vector{<:SubquoModuleElem{T}}; cache_morphism::Bool=false) where T
Given a vector V of (homogeneous) elements of M, return the (graded) submodule I of M generated by these elements together with its inclusion map `inc : I ↪ M.
When cache_morphism is set to true, then inc will be cached and available for transport and friends.
If only the submodule itself is desired, use sub_object instead.
sub(M::ModuleFP{T}, V::Vector{<:ModuleFPElem{T}}; cache_morphism::Bool=false) where T
Given a vector V of (homogeneous) elements of M, return the (graded) submodule I of M generated by these elements together with its inclusion map `inc : I ↪ M.
When cache_morphism is set to true, then inc will be cached and available for transport and friends.
If only the submodule itself is desired, use sub_object instead.
Examples
julia> R, (x, y, z) = polynomial_ring(QQ, [:x, :y, :z]);
julia> F = free_module(R, 1);
julia> V = [x^2*F[1]; y^3*F[1]; z^4*F[1]];
julia> N, incl = sub(F, V);
julia> N
Submodule with 3 generators
1: x^2*e[1]
2: y^3*e[1]
3: z^4*e[1]
represented as subquotient with no relations
julia> incl
Module homomorphism
from N
to F
Return the Sylow p−subgroup of the finitely generated abelian group G, for a prime p. This is the subgroup of p-power order in G whose index in G is coprime to p.
Examples
julia> A = abelian_group(ZZRingElem[2, 6, 30])
Z/2 x Z/6 x Z/30
julia> H, j = sylow_subgroup(A, 2);
julia> H
(Z/2)^3
julia> divexact(order(A), order(H))
45
A subgroup U of G is called pure if for all n an element in U that is in the image of the multiplication by n map of G is also a multiple of an element in U.
For finite abelian groups this is equivalent to U having a complement in G. They are also know as isolated subgroups and serving subgroups.
A subgroup U of G is called neat if for all primes p an element in U that is in the image of the multiplication by p map of G is also a multiple of an element in U.
For 2 subgroups U and V of the same group G, U+V returns the smallest subgroup of G containing both. Similarly, U∩V computes the intersection and U⊂V tests for inclusion. The difference between issubset =⊂ and is_subgroup is that the inclusion map is also returned in the 2nd call.
Return the direct product D of the (finitely many) abelian groups Gi, together with the projections D→Gi.
For finite abelian groups, finite direct sums and finite direct products agree and they are therefore called biproducts. If one wants to obtain D as a direct sum together with the injections D→Gi, one should call direct_sum(G...). If one wants to obtain D as a biproduct together with the projections and the injections, one should call biproduct(G...).
Otherwise, one could also call canonical_injections(D) or canonical_projections(D) later on.
Given a group G that is created using (iterated) direct products, or (iterated) tensor products, return a group isomorphism into a flat product: for G:=(A⊕B)⊕C, it returns the isomorphism G→A⊕B⊕C (resp. ⊗).
Given groups Gi, compute the tensor product G1⊗⋯⊗Gn. If task is set to ":map", a map ϕ is returned that maps tuples in G1×⋯×Gn to pure tensors g1⊗⋯⊗gn. The map admits a preimage as well.
Computes the group of all homomorpisms from G to H as an abstract group. If task is ":map", then a map ϕ is computed that can be used to obtain actual homomorphisms. This map also allows preimages. Set task to ":none" to not compute the map.