Skip to content

Commit

Permalink
Remove unnecessary set_name! calls in resolutions and presentations (
Browse files Browse the repository at this point in the history
…#3815)

* Comment out some unreachable code

* Remove unnecessary `set_name!` calls in resolutions and presentations

* Add missing parentheses
  • Loading branch information
lgoettgens committed Jun 5, 2024
1 parent e5d99cd commit c2a1463
Show file tree
Hide file tree
Showing 4 changed files with 8 additions and 62 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -296,7 +296,7 @@ function _free_show(io::IO, C::AbsHyperComplex)
R = Nemo.base_ring(C[first(rng)])
R_name = AbstractAlgebra.get_name(R)
if isnothing(R_name)
R_name = "$R"
R_name = "($R)"
end

for i=reverse(rng)
Expand Down
3 changes: 3 additions & 0 deletions src/Modules/UngradedModules/FreeMod.jl
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,9 @@ end
# un-named free module over a named ring X will acquire the name
# X^r
function AbstractAlgebra.extra_name(F::FreeMod)
if rank(F) == 0
return "0"
end
s = AbstractAlgebra.get_name(base_ring(F))
if s !== nothing
return "$s^$(rank(F))"
Expand Down
21 changes: 1 addition & 20 deletions src/Modules/UngradedModules/FreeResolutions.jl
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ function free_show(io::IO, C::ComplexOfMorphisms)
R = Nemo.base_ring(C[first(rng)])
R_name = AbstractAlgebra.get_name(R)
if isnothing(R_name)
R_name = "$R"
R_name = "($R)"
end

for i=reverse(rng)
Expand Down Expand Up @@ -199,12 +199,6 @@ function _extend_free_resolution(cc::Hecke.ComplexOfMorphisms, idx::Int)
#= adjust length for extension length in Oscar =#
slen = slen > len ? len : slen

br_name = AbstractAlgebra.get_name(base_ring(kernel_entry))
if br_name === nothing
br_name = "R"
end


while j <= slen
rk = Singular.ngens(res[j])
if is_graded(dom)
Expand All @@ -214,12 +208,10 @@ function _extend_free_resolution(cc::Hecke.ComplexOfMorphisms, idx::Int)
#map = graded_map(codom, SM.matrix) # going via matrices does a lot of unnecessary allocation and copying!
map = graded_map(codom, gens(SM); check=false)
dom = domain(map)
AbstractAlgebra.set_name!(dom, "$br_name^$rk")
else
codom = dom
dom = free_module(br, Singular.ngens(res[j]))
SM = SubModuleOfFreeModule(codom, res[j])
AbstractAlgebra.set_name!(dom, "$br_name^$rk")
#generator_matrix(SM)
map = hom(dom, codom, gens(SM); check=false)
end
Expand All @@ -229,7 +221,6 @@ function _extend_free_resolution(cc::Hecke.ComplexOfMorphisms, idx::Int)
# Finalize maps.
if slen < len
Z = FreeMod(br, 0)
AbstractAlgebra.set_name!(Z, "0")
pushfirst!(cc, hom(Z, domain(cc.maps[1]), Vector{elem_type(domain(cc.maps[1]))}(); check=false))
cc.complete = true
end
Expand Down Expand Up @@ -457,11 +448,6 @@ function free_resolution(M::SubquoModule{<:MPolyRingElem};
slen = slen > length ? length : slen
end

br_name = AbstractAlgebra.get_name(base_ring(M))
if br_name === nothing
br_name = "R"
end

#= Add maps from free resolution computation, start with second entry
= due to inclusion of presentation(M) at the beginning. =#
j = 1
Expand All @@ -474,7 +460,6 @@ function free_resolution(M::SubquoModule{<:MPolyRingElem};
#ff = graded_map(codom, SM.matrix)
ff = graded_map(codom, gens(SM); check=false)
dom = domain(ff)
AbstractAlgebra.set_name!(dom, "$br_name^$rk")
insert!(maps, 1, ff)
j += 1
else
Expand All @@ -483,7 +468,6 @@ function free_resolution(M::SubquoModule{<:MPolyRingElem};
dom = free_module(br, rk)
SM = SubModuleOfFreeModule(codom, res[j])
#generator_matrix(SM)
AbstractAlgebra.set_name!(dom, "$br_name^$rk")
insert!(maps, 1, hom(dom, codom, gens(SM); check=false))
j += 1
end
Expand All @@ -495,7 +479,6 @@ function free_resolution(M::SubquoModule{<:MPolyRingElem};
else
Z = FreeMod(br, 0)
end
AbstractAlgebra.set_name!(Z, "0")
insert!(maps, 1, hom(Z, domain(maps[1]), Vector{elem_type(domain(maps[1]))}(); check=false))
end

Expand Down Expand Up @@ -531,7 +514,6 @@ function free_resolution(M::SubquoModule{T}) where {T<:RingElem}
K, inc = kernel(map(C, i))
nz = findall(x->!iszero(x), gens(K))
F = FreeMod(R, length(nz))
iszero(length(nz)) && AbstractAlgebra.set_name!(F, "0")
phi = hom(F, C[i], iszero(length(nz)) ? elem_type(C[i])[] : inc.(gens(K)[nz]); check=false)
pushfirst!(C.maps, phi)
end
Expand Down Expand Up @@ -562,7 +544,6 @@ function free_resolution_via_kernels(M::SubquoModule, limit::Int = -1)
h = graded_map(domain(mp[1]), Vector{elem_type(domain(mp[1]))}(); check=false)
else
Z = FreeMod(base_ring(M), 0)
AbstractAlgebra.set_name!(Z, "0")
h = hom(Z, domain(mp[1]), Vector{elem_type(domain(mp[1]))}(); check=false)
end
insert!(mp, 1, h)
Expand Down
44 changes: 3 additions & 41 deletions src/Modules/UngradedModules/Presentation.jl
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ function presentation(SQ::SubquoModule;
end

# Old code left for debugging
#=
#A+B/B is generated by A and B
#the relations are A meet B? written wrt to A
R = base_ring(SQ)
Expand All @@ -30,11 +31,6 @@ function presentation(SQ::SubquoModule;
F = FreeMod(R, ngens(SQ.sub))
h_F_SQ = hom(F, SQ, gens(SQ)) # DO NOT CHANGE THIS LINE, see present_as_cokernel and preimage
end
br_name = AbstractAlgebra.get_name(R)
if br_name === nothing
br_name = "br"
end
AbstractAlgebra.set_name!(F, "$br_name^$(ngens(SQ.sub))")
q = elem_type(F)[]
if is_generated_by_standard_unit_vectors(SQ.sub)
if isdefined(SQ, :quo)
Expand Down Expand Up @@ -86,32 +82,21 @@ function presentation(SQ::SubquoModule;
G = FreeMod(R, length(q))
h_G_F = hom(G, F, q)
end
br_name = AbstractAlgebra.get_name(F.R)
if br_name === nothing
br_name = "br"
end
AbstractAlgebra.set_name!(G, "$br_name^$(length(q))")
if is_graded(SQ)
Z = graded_free_module(F.R, 0)
else
Z = FreeMod(F.R, 0)
end
AbstractAlgebra.set_name!(Z, "0")
h_SQ_Z = hom(SQ, Z, Vector{elem_type(Z)}([zero(Z) for i=1:ngens(SQ)]))
M = Hecke.ComplexOfMorphisms(ModuleFP, ModuleFPHom[h_G_F, h_F_SQ, h_SQ_Z], check = false, seed = -2)
set_attribute!(M, :show => Hecke.pres_show)
return M
=#
end

function _presentation_graded(SQ::SubquoModule)
R = base_ring(SQ)

# Prepare to set some names
br_name = AbstractAlgebra.get_name(R)
if br_name === nothing
br_name = "br"
end

# Create the free module for the presentation
#
# We have to take representatives of the simplified
Expand All @@ -124,14 +109,12 @@ function _presentation_graded(SQ::SubquoModule)
F0_to_SQ = graded_map(SQ, gens(SQ); check=false)
F0_to_SQ.generators_map_to_generators = true
F0 = domain(F0_to_SQ)
AbstractAlgebra.set_name!(F0, "$br_name^$(ngens(SQ.sub))")

K, inc_K = kernel(F0_to_SQ)
F1_to_F0 = graded_map(F0, images_of_generators(inc_K))
F1 = domain(F1_to_F0)
#F1 = graded_free_module(R, [degree(x; check=false) for x in images_of_generators(inc_K)])
#F1_to_F0 = hom(F1, F0, images_of_generators(inc_K), check=false)
AbstractAlgebra.set_name!(F1, "$br_name^$(ngens(F1))")

# When there is no kernel, clean things up
if is_zero(F1)
Expand All @@ -141,7 +124,6 @@ function _presentation_graded(SQ::SubquoModule)

# prepare the end of the presentation
Z = graded_free_module(R, elem_type(grading_group(R))[])
AbstractAlgebra.set_name!(Z, "0")
SQ_to_Z = hom(SQ, Z, elem_type(Z)[zero(Z) for i in 1:ngens(SQ)]; check=false)

# compile the presentation complex
Expand All @@ -155,24 +137,16 @@ end
function _presentation_simple(SQ::SubquoModule)
R = base_ring(SQ)

# Prepare to set some names
br_name = AbstractAlgebra.get_name(R)
if br_name === nothing
br_name = "br"
end

# Create the free module for the presentation
F0 = FreeMod(R, length(gens(SQ)))
F0_to_SQ = hom(F0, SQ, gens(SQ); check=false)
F0_to_SQ.generators_map_to_generators = true
AbstractAlgebra.set_name!(F0, "$br_name^$(ngens(SQ.sub))")

K, inc_K = kernel(F0_to_SQ)
@assert codomain(inc_K) === F0
@assert all(x->parent(x) === F0, images_of_generators(inc_K))
F1 = FreeMod(R, ngens(K))
F1_to_F0 = hom(F1, F0, images_of_generators(inc_K), check=false)
AbstractAlgebra.set_name!(F1, "$br_name^$(ngens(F1))")

# When there is no kernel, clean things up
if is_zero(F1)
Expand All @@ -182,7 +156,6 @@ function _presentation_simple(SQ::SubquoModule)

# prepare the end of the presentation
Z = FreeMod(R, 0)
AbstractAlgebra.set_name!(Z, "0")
SQ_to_Z = hom(SQ, Z, elem_type(Z)[zero(Z) for i in 1:ngens(SQ)]; check=false)

# compile the presentation complex
Expand All @@ -202,7 +175,6 @@ function presentation(F::FreeMod; minimal = false)
else
Z = FreeMod(F.R, 0)
end
AbstractAlgebra.set_name!(Z, "0")
M = Hecke.ComplexOfMorphisms(ModuleFP, ModuleFPHom[hom(Z, F, Vector{elem_type(F)}()), hom(F, F, gens(F)), hom(F, Z, Vector{elem_type(Z)}([zero(Z) for i=1:ngens(F)]))], check = false, seed = -2)
set_attribute!(M, :show => Hecke.pres_show)
return M
Expand Down Expand Up @@ -608,21 +580,14 @@ function _presentation_minimal(SQ::ModuleFP{T};
minimal_kernel::Bool=true) where {T<:MPolyRingElem{<:FieldElem}}

R = base_ring(SQ)

# Prepare to set some names
br_name = AbstractAlgebra.get_name(R)
if br_name === nothing
br_name = "br"
end


SQ_new, phi = prune_with_map(SQ)
F0 = ambient_free_module(SQ_new)

# M_new is a quotient of a free module
proj_map = hom(F0, SQ_new, gens(SQ_new), check=false)
F0_to_SQ = compose(proj_map, phi)
F0_to_SQ.generators_map_to_generators = true
AbstractAlgebra.set_name!(F0, "$br_name^$(ngens(F0))")

is_sq_graded = is_graded(SQ)

Expand All @@ -638,7 +603,6 @@ function _presentation_minimal(SQ::ModuleFP{T};
free_module(R, ngens(K))
end
F1_to_F0 = compose(hom(F1, K, gens(K), check=false), inc)
AbstractAlgebra.set_name!(F1, "$br_name^$(ngens(F1))")

# When there is no kernel, clean things up
if is_zero(F1)
Expand All @@ -647,7 +611,6 @@ function _presentation_minimal(SQ::ModuleFP{T};
else
F1 = FreeMod(R, 0)
end
AbstractAlgebra.set_name!(F1, "$br_name^$(ngens(F1))")
F1_to_F0 = hom(F1, F0, elem_type(F0)[]; check=false)
end

Expand All @@ -657,7 +620,6 @@ function _presentation_minimal(SQ::ModuleFP{T};
else
Z = FreeMod(R, 0)
end
AbstractAlgebra.set_name!(Z, "0")
SQ_to_Z = hom(SQ, Z, elem_type(Z)[zero(Z) for i in 1:ngens(SQ)]; check=false)

# compile the presentation complex
Expand Down

0 comments on commit c2a1463

Please sign in to comment.