-
Notifications
You must be signed in to change notification settings - Fork 63
/
Submodule.jl
47 lines (35 loc) · 1.39 KB
/
Submodule.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
###############################################################################
#
# Submodule.jl : Submodules of modules
#
###############################################################################
###############################################################################
#
# Reduced form
#
###############################################################################
reduced_form(mat::MatElem{T}) where T <: RingElement = hnf(mat)
function reduced_form(mat::MatElem{T}) where T <: FieldElement
r, m = rref(mat)
return m
end
isreduced_form(mat::MatElem{T}) where T <: RingElement = is_hnf(mat)
isreduced_form(mat::MatElem{T}) where T <: FieldElement = is_rref(mat)
###############################################################################
#
# Submodule constructor
#
###############################################################################
@doc raw"""
sub(m::FPModule{T}, gens::Vector{<:FPModuleElem{T}}) where T <: RingElement
Return the submodule of the module `m` generated by the given generators,
given as elements of `m`.
"""
function sub(m::FPModule{T}, gens::Vector{S}) where {T <: RingElement, S <: FPModuleElem{T}}
return Generic.sub(m, gens)
end
# Handles empty vector of elements
function sub(m::FPModule{T}, gens::Vector{Any}) where T <: RingElement
return Generic.sub(m, gens)
end
# Also see sub in AbstractAlgebra.jl (must be defined after Generic)