Skip to content

Commit 2e3d591

Browse files
Merge remote-tracking branch 'Matthias/oscar_workerpool' into oscar_workerpool
2 parents 22a4e9b + f041220 commit 2e3d591

File tree

38 files changed

+1833
-1078
lines changed

38 files changed

+1833
-1078
lines changed

Artifacts.toml

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
[FTM-1511-03209]
2-
git-tree-sha1 = "ba4c659df6bba8d746d85628bfedf8b77b77047c"
2+
git-tree-sha1 = "691925b788610d3de78e8920426cff473be814e5"
33
lazy = true
44

55
[[FTM-1511-03209.download]]
6-
sha256 = "77f85f1e4a2c3b71963bea169b929dd8c1d9b3cf9b28b616f2c91486636acc22"
7-
url = "https://zenodo.org/records/14611045/files/1511-03209.tar.gz"
6+
sha256 = "0a8086287f30176ae0308ab9cf20cd6bcfb70ad3b24974e1b5dac1fe84427222"
7+
url = "https://zenodo.org/records/15085846/files/1511-03209.tar.gz"
88

99
[QSMDB]
1010
git-tree-sha1 = "50dadf750f037e93b4514d91314e1990ff5db090"

docs/oscar_references.bib

+33
Original file line numberDiff line numberDiff line change
@@ -1573,6 +1573,15 @@ @Article{Haz12
15731573
doi = {10.3390/axioms1020149}
15741574
}
15751575

1576+
@MastersThesis{Hil99,
1577+
author = {Hillebrand, D.},
1578+
title = {Triangulierung nulldimensionaler Ideale - Implementierung und Vergleich zweier Algorithmen},
1579+
note = {Refereed by Prof. Dr. H.M. Moeller},
1580+
address = {Fachbereich Mathematik},
1581+
year = {1999},
1582+
school = {Universitaet Dortmund}
1583+
}
1584+
15761585
@Article{Hul22,
15771586
author = {Hulpke, Alexander},
15781587
title = {The perfect groups of order up to two million},
@@ -2053,6 +2062,18 @@ @Book{Lan71
20532062
doi = {10.1007/978-1-4757-1949-9}
20542063
}
20552064

2065+
@Article{Laz92,
2066+
author = {Lazard, D.},
2067+
title = {Solving Zero-Dimensional Algebraic Systems},
2068+
journal = {Journal of Symbolic Computation},
2069+
volume = {13},
2070+
number = {2},
2071+
pages = {117--131},
2072+
year = {1992},
2073+
month = feb,
2074+
doi = {10.1016/S0747-7171(08)80086-7}
2075+
}
2076+
20562077
@PhDThesis{Lev05,
20572078
author = {Viktor Levandovskyy},
20582079
title = {Non-commutative Computer Algebra for polynomial algebras: Gröbner bases, applications and
@@ -2170,6 +2191,18 @@ @Book{Mar18
21702191
doi = {10.1007/978-3-319-90233-3}
21712192
}
21722193

2194+
@Article{Moe93,
2195+
author = {Moeller, H. Michael},
2196+
title = {On Decomposing Systems of Polynomial Equations with Finitely Many Solutions},
2197+
journal = {Applicable Algebra in Engineering, Communication and Computing},
2198+
volume = {4},
2199+
number = {4},
2200+
pages = {217--230},
2201+
year = {1993},
2202+
month = dec,
2203+
doi = {10.1007/BF01200146}
2204+
}
2205+
21732206
@Article{Nik79,
21742207
author = {Nikulin, V. V.},
21752208
title = {Integer symmetric bilinear forms and some of their geometric applications},

docs/src/CommutativeAlgebra/ideals.md

+8-1
Original file line numberDiff line numberDiff line change
@@ -256,9 +256,16 @@ equidimensional_hull(I::MPolyIdeal)
256256
equidimensional_hull_radical(I::MPolyIdeal)
257257
```
258258

259+
### Triangular Decomposition
260+
261+
```@docs
262+
triangular_decomposition(::MPolyIdeal)
263+
```
264+
265+
259266
## Homogenization and Dehomogenization
260267

261-
Referring to [KR05](@cite) for definitions and technical details, we discuss homogenization and dehomogenization in the context of $\mathbb Z^m$-gradings.
268+
Referring to [KR05](@cite) for definitions and technical details, we discuss homogenization and dehomogenization in the context of $\mathbb Z^m$-gradings.
262269

263270
```@docs
264271
homogenizer(P::MPolyRing{T}, h::VarName; pos::Int=1+ngens(P)) where T

docs/src/Groups/action.md

+16-3
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,26 @@ orbit(G::PermGroup, omega)
6969
orbits(Omega::T) where T <: GSetByElements{TG} where TG <: GAPGroup
7070
is_transitive(Omega::GSet)
7171
transitivity(Omega::GSet)
72+
rank_action(Omega::GSet)
73+
is_primitive(Omega::GSet)
74+
is_regular(Omega::GSet)
75+
is_semiregular(Omega::GSet)
76+
```
77+
78+
## Block systems of a G-set
79+
80+
If we have a G-set $\Omega$, a *block system* of $\Omega$ is a partition that is invariant under the action of the associated group.
81+
The group action on $\Omega$ induces a natural action on such a partition.
82+
83+
When calling these methods with a `GSet` as the argument, we require that the group action is transitive.
84+
The blocks are returned as Julia `Set` objects.
85+
Note that this is in contrast to the return type when calling the methods with a `PermGroup` as the argument, in which case the blocks are sorted vectors of integers.
86+
87+
```@docs
7288
blocks(Omega::GSet)
7389
maximal_blocks(Omega::GSet)
7490
minimal_block_reps(Omega::GSet)
7591
all_blocks(Omega::GSet)
76-
rank_action(Omega::GSet)
77-
is_regular(Omega::GSet)
78-
is_semiregular(Omega::GSet)
7992
```
8093

8194

experimental/FTheoryTools/docs/src/g4.md

+12-2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ We currently support the following constructor:
1414
```@docs
1515
g4_flux(model::AbstractFTheoryModel, class::CohomologyClass)
1616
```
17+
In addition to this generic constructor, we also support the following special constructor.
18+
```@docs
19+
qsm_flux(qsm_model::AbstractFTheoryModel)
20+
```
21+
1722

1823

1924
## Attributes
@@ -100,7 +105,12 @@ replace an involved algebraic cycle.
100105

101106
```@docs
102107
chosen_g4_flux_basis(m::AbstractFTheoryModel; check::Bool = true)
103-
basis_of_h22(v::NormalToricVariety; check::Bool = true)
108+
basis_of_h22_ambient(m::AbstractFTheoryModel; check::Bool = true)
109+
basis_of_h22_hypersurface(m::AbstractFTheoryModel; check::Bool = true)
110+
basis_of_h22_ambient_indices(m::AbstractFTheoryModel; check::Bool = true)
111+
basis_of_h22_hypersurface_indices(m::AbstractFTheoryModel; check::Bool = true)
112+
converter_dict_h22_ambient(m::AbstractFTheoryModel; check::Bool = true)
113+
converter_dict_h22_hypersurface(m::AbstractFTheoryModel; check::Bool = true)
104114
```
105115

106116

@@ -113,7 +123,7 @@ integral or rational combinations of the ambient space models of G4-fluxes, that
113123
described above. For such families, we currently support the following constructor:
114124

115125
```@docs
116-
family_of_g4_fluxes(m::AbstractFTheoryModel, mat_int::QQMatrix, mat_rat::QQMatrix; check::Bool = true)
126+
family_of_g4_fluxes(m::AbstractFTheoryModel, mat_int::QQMatrix, mat_rat::QQMatrix, offset::Vector{QQFieldElem}; check::Bool = true)
117127
```
118128

119129
### Attributes

experimental/FTheoryTools/src/AbstractFTheoryModels/attributes.jl

+35-19
Original file line numberDiff line numberDiff line change
@@ -1216,29 +1216,45 @@ function chern_class(m::AbstractFTheoryModel, k::Int; check::Bool = true)
12161216
@req k >= 0 "Chern class index must be non-negative"
12171217
@req k <= dim(ambient_space(m)) - 1 "Chern class index must not exceed dimension of the space"
12181218

1219-
# Check if we can compute the Chern classes for the toric ambient space
1220-
if check
1221-
@req is_smooth(ambient_space(m)) && is_complete(ambient_space(m)) "The Chern classes of the tangent bundle of the toric ambient space are only supported if the toric ambient space is smooth and complete"
1222-
end
1219+
# CAREFUL: The code below works ONLY for hypersurfaces in toric spaces.
1220+
# CAREFUL: It represents the Chern classes of the hypersurface by - so I believe canonical - counterparts in the toric ambient space.
1221+
# CAREFUL: Those counterparts must be restricted to the hypersurface to truly represent the Chern class in question.
1222+
# CAREFUL: Currently, we only integrate those Chern classes against the hypersurface, which automatically executes the restriction in question.
12231223

12241224
# If thus far, no non-trivial Chern classes have been computed for this toric variety, add an "empty" vector
12251225
if !has_attribute(m, :chern_classes)
12261226
cs = Vector{Union{Nothing,CohomologyClass}}(nothing, dim(ambient_space(m)))
12271227
cs[1] = cohomology_class(ambient_space(m), one(cohomology_ring(ambient_space(m), check = check)))
1228-
cy = cohomology_class(toric_divisor_class(ambient_space(m), degree(hypersurface_equation(m))))
1229-
cs[2] = chern_class(ambient_space(m), 1, check = check) - cy
1228+
diff = degree(leading_term(hypersurface_equation(m))) - sum(cox_ring(ambient_space(m)).d)
1229+
coeffs_list = coefficients(toric_divisor(toric_divisor_class(ambient_space(m), diff)))
1230+
indets = [lift(g) for g in gens(cohomology_ring(ambient_space(m), check = check))]
1231+
poly = sum(QQ(coeffs_list[k]) * indets[k] for k in 1:length(indets))
1232+
cs[2] = CohomologyClass(ambient_space(m), cohomology_ring(ambient_space(m), check = check)(poly))
12301233
set_attribute!(m, :chern_classes, cs)
12311234
end
12321235

1236+
# Check if we can compute the Chern classes for the toric ambient space
1237+
if check
1238+
@req is_smooth(ambient_space(m)) && is_complete(ambient_space(m)) "The Chern classes of the tangent bundle of the toric ambient space are only supported if the toric ambient space is smooth and complete"
1239+
end
1240+
12331241
# Check if the Chern class in question is known
12341242
cs = get_attribute(m, :chern_classes)::Vector{Union{Nothing,CohomologyClass}}
12351243
if cs[k+1] !== nothing
12361244
return cs[k+1]::CohomologyClass
12371245
end
1238-
12391246
# Chern class is not known, so compute and return it...
1240-
cy = cohomology_class(toric_divisor_class(ambient_space(m), degree(hypersurface_equation(m))))
1241-
cs[k+1] = chern_class(ambient_space(m), k, check = check) - cy * chern_class(m, k-1; check = check)
1247+
#cy = cohomology_class(toric_divisor_class(ambient_space(m), degree(hypersurface_equation(m))))
1248+
#cs[k+1] = chern_class(ambient_space(m), k, check = check) - cy * chern_class(m, k-1; check = check)
1249+
d = toric_divisor(toric_divisor_class(ambient_space(m), degree(leading_term(hypersurface_equation(m)))))
1250+
indets = [lift(g) for g in gens(cohomology_ring(ambient_space(m), check = check))]
1251+
coeff_ring = coefficient_ring(ambient_space(m))
1252+
poly = sum(coeff_ring(coefficients(d)[k]) * indets[k] for k in 1:length(indets))
1253+
cy = CohomologyClass(ambient_space(m), cohomology_ring(ambient_space(m), check = check)(poly))
1254+
ck_ambient = chern_class(ambient_space(m), k, check = check)
1255+
ckm1 = chern_class(m, k-1, check = check)
1256+
new_poly = lift(polynomial(ck_ambient)) - lift(polynomial(cy)) * lift(polynomial(ckm1))
1257+
cs[k+1] = CohomologyClass(ambient_space(m), cohomology_ring(ambient_space(m), check = check)(new_poly))
12421258
set_attribute!(m, :chern_classes, cs)
12431259
return cs[k+1]
12441260
end
@@ -1973,14 +1989,6 @@ end
19731989
### (5) Attributes for flux families (not exported, rather for serialization overhaul)
19741990
######################################################################################
19751991

1976-
@attr QQMatrix function matrix_integral_quant(m::AbstractFTheoryModel; check::Bool = true)
1977-
return matrix_integral(well_quantized_ambient_space_models_of_g4_fluxes(m, check = check))
1978-
end
1979-
1980-
@attr QQMatrix function matrix_rational_quant(m::AbstractFTheoryModel; check::Bool = true)
1981-
return matrix_rational(well_quantized_ambient_space_models_of_g4_fluxes(m, check = check))
1982-
end
1983-
19841992
@attr QQMatrix function matrix_integral_quant_transverse(m::AbstractFTheoryModel; check::Bool = true)
19851993
return matrix_integral(special_flux_family(m, check = check))
19861994
end
@@ -1989,10 +1997,18 @@ end
19891997
return matrix_rational(special_flux_family(m, check = check))
19901998
end
19911999

1992-
@attr QQMatrix function matrix_integral_quant_transverse_nobreak(m::AbstractFTheoryModel)
2000+
@attr Vector{QQFieldElem} function offset_quant_transverse(m::AbstractFTheoryModel; check::Bool = true)
2001+
return offset(special_flux_family(m, check = check))
2002+
end
2003+
2004+
@attr QQMatrix function matrix_integral_quant_transverse_nobreak(m::AbstractFTheoryModel; check::Bool = true)
19932005
return matrix_integral(special_flux_family(m, not_breaking = true; check = check))
19942006
end
19952007

1996-
@attr QQMatrix function matrix_rational_quant_transverse_nobreak(m::AbstractFTheoryModel)
2008+
@attr QQMatrix function matrix_rational_quant_transverse_nobreak(m::AbstractFTheoryModel; check::Bool = true)
19972009
return matrix_rational(special_flux_family(m, not_breaking = true; check = check))
19982010
end
2011+
2012+
@attr Vector{QQFieldElem} function offset_quant_transverse_nobreak(m::AbstractFTheoryModel; check::Bool = true)
2013+
return offset(special_flux_family(m, not_breaking = true; check = check))
2014+
end

experimental/FTheoryTools/src/AbstractFTheoryModels/methods.jl

+106
Original file line numberDiff line numberDiff line change
@@ -911,5 +911,111 @@ function resolve(m::AbstractFTheoryModel, resolution_index::Int)
911911
push!(blow_up_chain, resolved_model)
912912

913913
end
914+
915+
916+
# For model 1511.03209 and resolution_index = 1, we extend beyond what is currently saved as resolution in our json file.
917+
# Namely, we also resolve the ambient space. This is done by the following lines.
918+
if has_attribute(m, :arxiv_id) && resolution_index == 1 && arxiv_id(m) == "1511.03209"
919+
920+
# Additional blowup 1:
921+
# Additional blowup 1:
922+
# Ambient space has the following rays
923+
#x: [0,0,0,-3,1]
924+
#y: [0,0,0,2,-1]
925+
#z: [0,0,0,0,1]
926+
# We add the ray m1: (0,0,0,1,0). This looks like y + z = 2 * m1.
927+
# So naively, I think of this as blowing up y^2 = z^2 = 0 and introducing the variable m1. For the strict transform, we thus do
928+
# y^2 -> y^2 * m1
929+
# z^2 -> z^2 * m1
930+
# y * z -> y * z * m1
931+
as = ambient_space(resolved_model);
932+
bl = domain(blow_up(as, [0,0,0,1,0], coordinate_name = "m1"));
933+
f = hypersurface_equation(resolved_model);
934+
my_mons = collect(monomials(f));
935+
pos_1 = findfirst(k -> k == "y", [string(a) for a in gens(cox_ring(as))])
936+
pos_2 = findfirst(k -> k == "z", [string(a) for a in gens(cox_ring(as))])
937+
exp_list = [collect(exponents(m))[1] for m in my_mons];
938+
my_exps = [[k[pos_1], k[pos_2]] for k in exp_list];
939+
@req all(k -> isinteger(sum(k)), my_exps) "Inconsistency encountered in computation of strict transform. Please inform the authors."
940+
m_power = [Int(1//2*sum(a)) for a in my_exps]
941+
overall_factor = minimum(m_power)
942+
new_coeffs = collect(coefficients(f))
943+
new_exps = [vcat([exp_list[k], m_power[k] - overall_factor]...) for k in 1:length(exp_list)]
944+
my_builder = MPolyBuildCtx(cox_ring(bl))
945+
for a in 1:length(new_exps)
946+
push_term!(my_builder, new_coeffs[a], new_exps[a])
947+
end
948+
new_tate_polynomial = finish(my_builder);
949+
model_bl = GlobalTateModel(explicit_model_sections(resolved_model), model_section_parametrization(resolved_model), new_tate_polynomial, base_space(resolved_model), bl);
950+
set_attribute!(model_bl, :partially_resolved, true)
951+
# Additional blowup 2:
952+
# Additional blowup 2:
953+
# Ambient space has the following rays:
954+
# x: [0,0,0,-3,1]
955+
# y: [0,0,0,2,-1]
956+
# z: [0,0,0,0,1]
957+
# m1: [0,0,0,1,0]
958+
# We add the ray m2: (0,0,0,-2,1). This looks like 2 * x + z = 3 * m2. For the strict transform, we thus do
959+
# x^3 -> x^3 * m2^2
960+
# z^3 -> z^3 * m2
961+
as = ambient_space(model_bl);
962+
bl = domain(blow_up(as, [0,0,0,-2,1], coordinate_name = "m2"));
963+
f = hypersurface_equation(model_bl);
964+
my_mons = collect(monomials(f));
965+
pos_1 = findfirst(k -> k == "x", [string(a) for a in gens(cox_ring(as))])
966+
pos_2 = findfirst(k -> k == "z", [string(a) for a in gens(cox_ring(as))])
967+
exp_list = [collect(exponents(m))[1] for m in my_mons];
968+
my_exps = [[k[pos_1], k[pos_2]] for k in exp_list];
969+
@req all(k -> isinteger(sum(k)), my_exps) "Inconsistency encountered in computation of strict transform. Please inform the authors."
970+
m_power = [Int(2//3 * a[1] + 1//3 * a[2]) for a in my_exps]
971+
overall_factor = minimum(m_power)
972+
new_coeffs = collect(coefficients(f))
973+
new_exps = [vcat([exp_list[k], m_power[k] - overall_factor]...) for k in 1:length(exp_list)]
974+
my_builder = MPolyBuildCtx(cox_ring(bl))
975+
for a in 1:length(new_exps)
976+
push_term!(my_builder, new_coeffs[a], new_exps[a])
977+
end
978+
new_tate_polynomial = finish(my_builder);
979+
model_bl2 = GlobalTateModel(explicit_model_sections(model_bl), model_section_parametrization(model_bl), new_tate_polynomial, base_space(model_bl), bl);
980+
set_attribute!(model_bl2, :partially_resolved, true)
981+
# Additional blowup 3:
982+
# Additional blowup 3:
983+
# Ambient space has the following rays:
984+
# x: [0,0,0,-3,1]
985+
# y: [0,0,0,2,-1]
986+
# z: [0,0,0,0,1]
987+
# m1: [0,0,0,1,0]
988+
# m2: [0,0,0,-2,1]
989+
# We add the ray m3: (0,0,0,-1,1). This looks like m2 + z = 2 * m3. For the strict transform, we thus do
990+
# m2^2 -> m2^2 * m3
991+
# z^2 -> z^2 * m3
992+
as = ambient_space(model_bl2);
993+
bl = domain(blow_up(as, [0,0,0,-1,1], coordinate_name = "m3"));
994+
f = hypersurface_equation(model_bl2);
995+
my_mons = collect(monomials(f));
996+
pos_1 = findfirst(k -> k == "m2", [string(a) for a in gens(cox_ring(as))])
997+
pos_2 = findfirst(k -> k == "z", [string(a) for a in gens(cox_ring(as))])
998+
exp_list = [collect(exponents(m))[1] for m in my_mons];
999+
my_exps = [[k[pos_1], k[pos_2]] for k in exp_list];
1000+
@req all(k -> isinteger(sum(k)), my_exps) "Inconsistency encountered in computation of strict transform. Please inform the authors."
1001+
m_power = [Int(1//2 * sum(a)) for a in my_exps]
1002+
overall_factor = minimum(m_power)
1003+
new_coeffs = collect(coefficients(f))
1004+
new_exps = [vcat([exp_list[k], m_power[k] - overall_factor]...) for k in 1:length(exp_list)]
1005+
my_builder = MPolyBuildCtx(cox_ring(bl))
1006+
for a in 1:length(new_exps)
1007+
push_term!(my_builder, new_coeffs[a], new_exps[a])
1008+
end
1009+
new_tate_polynomial = finish(my_builder);
1010+
model_bl3 = GlobalTateModel(explicit_model_sections(model_bl2), model_section_parametrization(model_bl2), new_tate_polynomial, base_space(model_bl2), bl);
1011+
set_attribute!(model_bl3, :partially_resolved, true)
1012+
1013+
# We confirm that after these steps, we achieve what we desire.
1014+
@req is_smooth(ambient_space(model_bl3)) "Ambient space not yet smooth. Please inform the authors!"
1015+
@req is_homogeneous(hypersurface_equation(model_bl3)) "Strict transform is not homogeneous. Please inform the authors!"
1016+
return model_bl3
1017+
1018+
end
1019+
9141020
return resolved_model
9151021
end

0 commit comments

Comments
 (0)