-
Notifications
You must be signed in to change notification settings - Fork 120
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[FTheoryTools] Added more checks for G4 fluxes #4044
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -14,7 +14,7 @@ | |
simple consistency checks are met, this method will return | ||
`true` and otherwise `false`. | ||
|
||
It is worth mentioning that currently (July 2024), we only | ||
It is worth mentioning that currently (August 2024), we only | ||
support this check for $G_4$-fluxes defined on Weierstrass, | ||
global Tate and hypersurface models. If this condition is not | ||
met, this method will return an error. | ||
|
@@ -52,9 +52,111 @@ | |
# now execute elementary checks of the quantization condition | ||
for i in 1:length(c_ds) | ||
for j in i:length(c_ds) | ||
numb = integrate(cohomology_class(ambient_space(m), twist_g4 * cy * c_ds[i] * c_ds[j]); check = false) | ||
numb = integrate(cohomology_class(ambient_space(m), twist_g4 * c_ds[i] * c_ds[j] * cy); check = false) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I suppose this an unrelated change? Is it critical? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Not really critical. This happened as a result of some testing, but I left it as it made sense to me to have the hyperplane class at the end so that the expression is more readily comparable to the doc description. |
||
!is_integer(numb) && return false | ||
end | ||
end | ||
return true | ||
end | ||
|
||
|
||
@doc raw""" | ||
passes_verticality_checks(gf::G4Flux) | ||
|
||
G4-fluxes are subject to verticality conditions described first in [GH12](@cite) and in more detail in [Wei18](@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$ | ||
for all toric base divisors $D_1$ and $D_2$. If all of these | ||
simple consistency checks are met, this method will return | ||
`true` and otherwise `false` | ||
|
||
```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_verticality_checks(g4) | ||
true | ||
``` | ||
""" | ||
@attr Bool function passes_verticality_checks(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" | ||
@req has_zero_section_class(m) "For verticality checks, a model zero section class needs to be specified" | ||
|
||
# Compute the cohomology class corresponding to the hypersurface equation | ||
cy = polynomial(cohomology_class(toric_divisor_class(ambient_space(m), degree(hypersurface_equation(m))))) | ||
|
||
n = length(gens(cox_ring(base_space(m)))) | ||
c_ds = [polynomial(cohomology_class(d)) for d in torusinvariant_prime_divisors(ambient_space(m))[1:n]] | ||
zero_sec = zero_section_class(m) | ||
|
||
# now execute verticality checks | ||
for i in 1:n | ||
numb = integrate(cohomology_class(ambient_space(m), polynomial(cohomology_class(g4)) * c_ds[i] * cy) * zero_sec; check = false) | ||
numb!=0 && return false | ||
end | ||
for i in 1:n | ||
for j in i:n | ||
numb = integrate(cohomology_class(ambient_space(m), polynomial(cohomology_class(g4)) * c_ds[i] * c_ds[j] * cy); check = false) | ||
numb!=0 && return false | ||
end | ||
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). | ||
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
these three lines are already there right below
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I added these lines twice on purpose to function as an additional test
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just to elaborate a bit: Once
euler_characteristic
is called for the 2nd time, it fetches the saved value of the attribute. This process failed in the past, because of the wrong type cast. Now this will be tested.