Skip to content

Commit 7650083

Browse files
committed
Compute strict transform, not total transform
Fixes a bug in FTheoryTools instroduced by oscar-system#4484 Namely, it previously computed the total transform, not the strict transform. Even with the speed improvements of oscar-system#4485 computing the strict transform with ideals is slower than operating on polynomials. Therefore, I added a strict transform function on polynomials.
1 parent a5038e9 commit 7650083

2 files changed

Lines changed: 24 additions & 5 deletions

File tree

experimental/FTheoryTools/src/AbstractFTheoryModels/methods.jl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,8 @@ function blow_up(m::AbstractFTheoryModel, I::AbsIdealSheaf; coordinate_name::Str
157157
# Construct the new model
158158
if m isa GlobalTateModel
159159
if isdefined(m, :tate_polynomial) && new_ambient_space isa NormalToricVariety
160-
new_tate_polynomial = cox_ring_module_homomorphism(bd, tate_polynomial(m))
160+
f = tate_polynomial(m)
161+
new_tate_polynomial = strict_transform(bd, f)
161162
model = GlobalTateModel(explicit_model_sections(m), defining_section_parametrization(m), new_tate_polynomial, base_space(m), new_ambient_space)
162163
else
163164
if bd isa ToricBlowupMorphism
@@ -169,7 +170,8 @@ function blow_up(m::AbstractFTheoryModel, I::AbsIdealSheaf; coordinate_name::Str
169170
end
170171
else
171172
if isdefined(m, :weierstrass_polynomial) && new_ambient_space isa NormalToricVariety
172-
new_weierstrass_polynomial = cox_ring_module_homomorphism(bd, weierstrass_polynomial(m))
173+
f = weierstrass_polynomial(m)
174+
new_weierstrass_polynomial = strict_transform(bd, f)
173175
model = WeierstrassModel(explicit_model_sections(m), defining_section_parametrization(m), new_weierstrass_polynomial, base_space(m), new_ambient_space)
174176
else
175177
if bd isa ToricBlowupMorphism

experimental/Schemes/src/ToricBlowups/methods.jl

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,26 @@
11
@doc raw"""
22
strict_transform(f::ToricBlowupMorphism, I::MPolyIdeal) -> MPolyIdeal
3+
strict_transform(f::ToricBlowupMorphism, g::MPolyDecRingElem) -> MPolyDecRingElem
34
45
Let $f\colon Y \to X$ be the toric blowup corresponding to a star
56
subdivision along a ray. Let $R$ and $S$ be the Cox rings of $X$ and
67
$Y$, respectively.
78
Here "strict transform" means the "scheme-theoretic closure of the
89
complement of the exceptional divisor in the scheme-theoretic inverse
910
image".
10-
This function returns a homogeneous ideal in $S$ corresponding to the
11-
strict transform under $f$ of the closed subscheme of $X$ defined by the
12-
homogeneous ideal $I$ in $R$.
11+
This function returns a homogeneous ideal (or a polynomial generating a
12+
principal ideal) in $S$ corresponding to the strict transform under $f$
13+
of the closed subscheme of $X$ defined by the homogeneous ideal $I$ (or
14+
by the homogeneous principal ideal generated by $g$) in $R$.
1315
1416
This is implemented under the following assumptions:
1517
* the variety $X$ has no torus factors (meaning the rays span
1618
$N_{\mathbb{R}}$).
1719
20+
!!! note
21+
Computing `strict_transform(f, g)` is faster than computing
22+
`strict_transform(f, ideal(g))[1]`.
23+
1824
# Examples
1925
```jldoctest
2026
julia> X = affine_space(NormalToricVariety, 2)
@@ -40,6 +46,8 @@ Ideal generated by
4046
x1 + x2*e
4147
```
4248
"""
49+
strict_transform(f::ToricBlowupMorphism, I::Union{MPolyIdeal, MPolyDecRingElem})
50+
4351
function strict_transform(f::ToricBlowupMorphism, I::MPolyIdeal)
4452
X = codomain(f)
4553
@req !has_torusfactor(X) "Only implemented when there are no torus factors"
@@ -49,6 +57,15 @@ function strict_transform(f::ToricBlowupMorphism, I::MPolyIdeal)
4957
return saturation(J, ideal(S, exceptional_var))
5058
end
5159

60+
function strict_transform(f::ToricBlowupMorphism, g::MPolyDecRingElem)
61+
X = codomain(f)
62+
@req !has_torusfactor(X) "Only implemented when there are no torus factors"
63+
S = cox_ring(domain(f))
64+
exceptional_var = S[index_of_exceptional_ray(f)]
65+
h = cox_ring_module_homomorphism(f, g)
66+
return remove(h, exceptional_var)[2]
67+
end
68+
5269
@doc raw"""
5370
total_transform(f::ToricBlowupMorphism, I::MPolyIdeal) -> MPolyIdeal
5471

0 commit comments

Comments
 (0)