diff --git a/docs/oscar_references.bib b/docs/oscar_references.bib index 86875f814ba9..d873c230ce30 100644 --- a/docs/oscar_references.bib +++ b/docs/oscar_references.bib @@ -1490,6 +1490,19 @@ @Article{KMSS11 reportnumber = {UCSB-MATH-2011-09, IPMU11-0107, NSF-KITP-11-110, KCL-MTH-11-13} } +@Article{KMW12, + author = {Krause, Sven and Mayrhofer, Christoph and Weigand, Timo}, + title = {Gauge fluxes in F-theory and type IIB orientifolds}, + journal = {Journal of High Energy Physics}, + volume = {2012}, + number = {8}, + publisher = {Springer Science and Business Media LLC}, + year = {2012}, + month = {8}, + doi = {10.1007/jhep08(2012)119}, + eprint = {1202.3138} +} + @Article{KO14, author = {Kelleher, Jerome and O'Sullivan, Barry}, title = {Generating All Partitions: A Comparison Of Two Encodings}, diff --git a/experimental/FTheoryTools/src/AbstractFTheoryModels/attributes.jl b/experimental/FTheoryTools/src/AbstractFTheoryModels/attributes.jl index fab9b5c3b746..19b8706bc3c7 100644 --- a/experimental/FTheoryTools/src/AbstractFTheoryModels/attributes.jl +++ b/experimental/FTheoryTools/src/AbstractFTheoryModels/attributes.jl @@ -1234,6 +1234,9 @@ error. julia> qsm_model = literature_model(arxiv_id = "1903.00009", model_parameters = Dict("k" => 4)) Hypersurface model over a concrete base +julia> h = euler_characteristic(qsm_model; check = false) +378 + julia> h = euler_characteristic(qsm_model; check = false) 378 ``` @@ -1245,7 +1248,7 @@ function euler_characteristic(m::AbstractFTheoryModel; check::Bool = true) # Check if the answer is known if has_attribute(m, :euler_characteristic) - return get_attribute(m, :euler_characteristic)::CohomologyClass + return get_attribute(m, :euler_characteristic)::Int end # Trigger potential short-cut computation of cohomology ring @@ -1255,7 +1258,7 @@ function euler_characteristic(m::AbstractFTheoryModel; check::Bool = true) cy = cohomology_class(toric_divisor_class(ambient_space(m), degree(hypersurface_equation(m)))) # Compute the Euler characteristic - h = integrate(chern_class(m, 4; check) * cy; check) + h = Int(integrate(chern_class(m, 4; check) * cy; check)) set_attribute!(m, :euler_characteristic, h) return h end diff --git a/experimental/FTheoryTools/src/G4Fluxes/properties.jl b/experimental/FTheoryTools/src/G4Fluxes/properties.jl index 57d96943a474..e8e38fc06892 100644 --- a/experimental/FTheoryTools/src/G4Fluxes/properties.jl +++ b/experimental/FTheoryTools/src/G4Fluxes/properties.jl @@ -63,7 +63,7 @@ end @doc raw""" passes_verticality_checks(gf::G4Flux) -G4-fluxes are subject to verticality conditions described in [Lin16](@cite). +G4-fluxes are subject to verticality conditions described in [Lin16](@cite) and [KMW12](@cite). It is hard to verify that these condition are met. However, we can execute a number of simple consistency checks, by verifying that $\int_{Y}{G_4 \wedge [D_1] \wedge [zero section]} = 0$ and $\int_{Y}{G_4 \wedge [D_1] \wedge [D_2]} = 0$ @@ -92,9 +92,9 @@ true """ @attr Bool function passes_verticality_checks(g4::G4Flux) m = model(g4) - @req (m isa WeierstrassModel || m isa GlobalTateModel || m isa HypersurfaceModel) "Verticality checks for G4-fluxes only supported for Weierstrass, global Tate and hypersurface models" - @req base_space(m) isa NormalToricVariety "Verticality checks for G4-flux currently supported only for toric base" - @req ambient_space(m) isa NormalToricVariety "Verticality checks for G4-flux currently supported only for toric ambient space" + @req (m isa WeierstrassModel || m isa GlobalTateModel || m isa HypersurfaceModel) "Tadpole cancellation checks for G4-fluxes only supported for Weierstrass, global Tate and hypersurface models" + @req base_space(m) isa NormalToricVariety "Tadpole cancellation checks for G4-flux currently supported only for toric base" + @req ambient_space(m) isa NormalToricVariety "Tadpole cancellation checks for G4-flux currently supported only for toric ambient space" @req has_zero_section(m) "For verticality checks, a model zero section needs to be specified" # Compute the cohomology class corresponding to the hypersurface equation @@ -117,3 +117,46 @@ true end return true end + + +@doc raw""" + passes_tadpole_cancellation_check(gf::G4Flux) + +G4-fluxes are subject to the D3-tadpole cancellation condition described in [Wei18](@cite) and [KMW12](@cite). +This check verifies that $euler_characteristic(Y)/24 - 1/2 * \int_{Y}{G_4 \wedge G_4}$ is a non-negative integer. + +```jldoctest; setup = :(Oscar.LazyArtifacts.ensure_artifact_installed("QSMDB", Oscar.LazyArtifacts.find_artifacts_toml(Oscar.oscardir))) +julia> qsm_model = literature_model(arxiv_id = "1903.00009", model_parameters = Dict("k" => 4)) +Hypersurface model over a concrete base + +julia> divs = torusinvariant_prime_divisors(ambient_space(qsm_model)); + +julia> e1 = cohomology_class(divs[35]);e2 = cohomology_class(divs[32]);e4 = cohomology_class(divs[34]); + +julia> u = cohomology_class(divs[33]);v = cohomology_class(divs[30]);pb_Kbar = cohomology_class(sum([divs[k] for k in 1:29])); + +julia> g4_class = (-3) // kbar3(qsm_model) * (5 * e1 * e4 + pb_Kbar * (-3 * e1 - 2 * e2 - 6 * e4 + pb_Kbar - 4 * u + v)); + +julia> g4 = g4_flux(qsm_model, g4_class, check = false) +G4-flux candidate lacking elementary quantization checks + +julia> passes_tadpole_cancellation_check(g4) +true +``` +""" +@attr Bool function passes_tadpole_cancellation_check(g4::G4Flux) + m = model(g4) + @req (m isa WeierstrassModel || m isa GlobalTateModel || m isa HypersurfaceModel) "Tadpole cancellation checks for G4-fluxes only supported for Weierstrass, global Tate and hypersurface models" + @req base_space(m) isa NormalToricVariety "Tadpole cancellation checks for G4-flux currently supported only for toric base" + @req ambient_space(m) isa NormalToricVariety "Tadpole cancellation checks for G4-flux currently supported only for toric ambient space" + + # Compute the cohomology class corresponding to the hypersurface equation + cy = polynomial(cohomology_class(toric_divisor_class(ambient_space(m), degree(hypersurface_equation(m))))) + + # Now check if the D3-tadpole cancellation condition holds + numb = euler_characteristic(m; check = false)/24 - 1/2*integrate(cohomology_class(ambient_space(m), polynomial(cohomology_class(g4)) * polynomial(cohomology_class(g4)) * cy); check = false) + if numb > 0 && is_integer(numb) + return true + end + return false +end diff --git a/experimental/FTheoryTools/src/exports.jl b/experimental/FTheoryTools/src/exports.jl index 9dd810c60e4d..2b3325b8b64f 100644 --- a/experimental/FTheoryTools/src/exports.jl +++ b/experimental/FTheoryTools/src/exports.jl @@ -136,6 +136,7 @@ export paper_buzzwords export paper_description export paper_title export passes_elementary_quantization_checks +export passes_tadpole_cancellation_check export passes_verticality_checks export polytope_index export put_over_concrete_base