-
Notifications
You must be signed in to change notification settings - Fork 129
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[FTheoryTools] First implementation of G4-fluxes
- Loading branch information
1 parent
dee1685
commit 3f0d97b
Showing
9 changed files
with
310 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,6 +5,7 @@ | |
"weierstrass.md", | ||
"tate.md", | ||
"hypersurface.md", | ||
"literature.md" | ||
"literature.md", | ||
"g4.md" | ||
], | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
```@meta | ||
CurrentModule = Oscar | ||
``` | ||
|
||
# G4-Fluxes | ||
|
||
$G_4$-fluxes are at the heart of F-theory model building. | ||
|
||
(Could in a next step add a "is_calabi_yau" check based on vanishing of c1) | ||
|
||
|
||
## Constructors | ||
|
||
We currently support the following constructor: | ||
```@docs | ||
g4_flux(model::AbstractFTheoryModel, class::CohomologyClass) | ||
``` | ||
|
||
|
||
## Attributes | ||
|
||
We currently support the following attributes: | ||
```@docs | ||
model(gf::G4Flux) | ||
cohomology_class(gf::G4Flux) | ||
``` | ||
|
||
|
||
## Properties | ||
|
||
We currently support the following properties: | ||
```@docs | ||
passes_elementary_quantization_checks(gf::G4Flux) | ||
``` | ||
|
||
|
||
## Methods |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
##################################################### | ||
# 1 Basic attributes | ||
##################################################### | ||
|
||
@doc raw""" | ||
model(gf::G4Flux) | ||
Return the F-theory model for which this $G_4$-flux candidate is defined. | ||
```jldoctest | ||
julia> qsm_model = literature_model(arxiv_id = "1903.00009", model_parameters = Dict("k" => 4)) | ||
Hypersurface model over a concrete base | ||
julia> abs = ambient_space(qsm_model) | ||
Normal toric variety | ||
julia> cohomology_ring(abs, check = false); | ||
julia> g4_class = cohomology_class(anticanonical_divisor_class(abs))^2; | ||
julia> g4f = g4_flux(qsm_model, g4_class, check = false) | ||
G4-flux candidate lacking elementary quantization checks | ||
julia> model(g4f) | ||
Hypersurface model over a concrete base | ||
``` | ||
""" | ||
model(gf::G4Flux) = gf.model | ||
|
||
|
||
@doc raw""" | ||
cohomology_class(gf::G4Flux) | ||
Return the cohomology class which defines the $G_4$-flux candidate. | ||
```jldoctest | ||
julia> qsm_model = literature_model(arxiv_id = "1903.00009", model_parameters = Dict("k" => 4)) | ||
Hypersurface model over a concrete base | ||
julia> abs = ambient_space(qsm_model) | ||
Normal, simplicial, 5-dimensional toric variety | ||
julia> cohomology_ring(abs, check = false); | ||
julia> g4_class = cohomology_class(anticanonical_divisor_class(abs))^2; | ||
julia> g4f = g4_flux(qsm_model, g4_class, check = false) | ||
G4-flux candidate lacking elementary quantization checks | ||
julia> cohomology_class(g4f) == g4_class | ||
true | ||
``` | ||
""" | ||
cohomology_class(gf::G4Flux) = gf.class |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
################ | ||
# 1: Constructor | ||
################ | ||
|
||
@doc raw""" | ||
g4_flux(model::AbstractFTheoryModel, class::CohomologyClass) | ||
Construct a G4-flux candidate on an F-theory model. This functionality is | ||
currently limited to | ||
- Weierstrass models, | ||
- global Tate models, | ||
- hypersurface models. | ||
Furthermore, our functionality requires a concrete geometry. That is, | ||
the base space as well as the ambient space must be toric varieties. | ||
In the toric ambient space $X_\Sigma$, the elliptically fibered space $Y$ | ||
that defines the F-theory model, is given by a hypersurface (cut out by | ||
the Weierstrass, Tate or hypersurface polynomial, respectively). | ||
In this setting, we assume that a $G_4$-flux candidate is represented by a | ||
cohomology class $h$ in $H^{(2,2)} (X_\Sigma)$. The actual $G_4$-flux candidate | ||
is then obtained by restricting $h$ to $Y$. | ||
It is worth recalling that the $G_4$-flux candidate is subject to the quantization | ||
condition $G_4 + \frac{1}{2} c_2(Y) \in H^{/2,2)}( Y_, \mathbb{Z})$ (see [Wit97](@cite)). | ||
This condition is very hard to verify. However, it is relatively easy to gather | ||
evidence for this condition to be satisfied/show that it is violated. To this end, let | ||
$D_1$, $D_2$ be two toric divisors in $X_\Sigma$, then the topological intersection number | ||
$\left[ h|_Y \right] \cdot \left[ P \right] \cdot \left[ D_1 \right] \cdot \left[ D_2 \right]$ | ||
must be an integer. Even this rather elementary check can be computationally expensive. | ||
Users can therefore decide to skip this check upon construction by setting the parameter | ||
`check` to the value `false`. | ||
An example is in order. | ||
# Examples | ||
```jldoctest | ||
julia> qsm_model = literature_model(arxiv_id = "1903.00009", model_parameters = Dict("k" => 4)) | ||
Hypersurface model over a concrete base | ||
julia> abs = ambient_space(qsm_model) | ||
Normal, simplicial toric variety | ||
julia> cohomology_ring(abs, check = false); | ||
julia> g4_class = cohomology_class(anticanonical_divisor_class(abs))^2; | ||
julia> g4f = g4_flux(qsm_model, g4_class) | ||
G4-flux candidate | ||
julia> g4f2 = g4_flux(qsm_model, g4_class, check = false) | ||
G4-flux candidate lacking elementary quantization checks | ||
``` | ||
""" | ||
function g4_flux(m::AbstractFTheoryModel, g4_class::CohomologyClass; check::Bool = true) | ||
@req (m isa WeierstrassModel || m isa GlobalTateModel || m isa HypersurfaceModel) "G4-fluxes only supported for Weierstrass, global Tate and hypersurface models" | ||
@req base_space(m) isa NormalToricVariety "G4-flux currently supported only for toric base" | ||
@req ambient_space(m) isa NormalToricVariety "G4-flux currently supported only for toric ambient space" | ||
g4_candidate = G4Flux(m, g4_class) | ||
if check && !passes_elementary_quantization_checks(g4_candidate) | ||
error("Given G4-flux candidate found to violate quantization condition") | ||
end | ||
return g4_candidate | ||
end | ||
|
||
|
||
################################################ | ||
# 2: Equality and hash | ||
################################################ | ||
|
||
function Base.:(==)(gf1::G4Flux, gf2::G4Flux) | ||
# G4-fluxes can only be equal if they are defined for identically the same model | ||
model(gf1) !== model(gf2) && return false | ||
|
||
# Currently, can only decide equality for Weierstrass, global Tate and hypersurface models | ||
if (m isa WeierstrassModel || m isa GlobalTateModel || m isa HypersurfaceModel) == false | ||
error("Can currently only decide equality of G4-fluxes for Weierstrass, global Tate and hypersurface models") | ||
end | ||
|
||
# Compute the cohomology class corresponding to the hypersurface equation | ||
if m isa WeierstrassModel | ||
cl = toric_divisor_class(ambient_space(m), degree(weierstrass_polynomial(m))) | ||
end | ||
if m isa GlobalTateModel | ||
cl = toric_divisor_class(ambient_space(m), degree(tate_polynomial(m))) | ||
end | ||
if m isa HypersurfaceModel | ||
cl = toric_divisor_class(ambient_space(m), degree(hypersurface_equation(m))) | ||
end | ||
cy = cohomology_class(cl) | ||
|
||
# Now can return the result | ||
return cy * cohomology_class(gf1) == cy * cohomology_class(gf2) | ||
|
||
end | ||
|
||
function Base.hash(gf::G4Flux, h::UInt) | ||
b = 0x92bd6ac4f87d834e % UInt | ||
h = hash(model(gf), h) | ||
h = hash(cohomology_class(gf), h) | ||
return xor(h, b) | ||
end | ||
|
||
|
||
################################################ | ||
# 3: Display | ||
################################################ | ||
|
||
function Base.show(io::IO, g4::G4Flux) | ||
properties_string = String["G4-flux candidate"] | ||
if !has_attribute(g4, :passes_elementary_quantization_checks) | ||
push!(properties_string, "lacking elementary quantization checks") | ||
end | ||
join(io, properties_string, " ") | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
##################################################### | ||
# 1 Basic properties | ||
##################################################### | ||
|
||
@doc raw""" | ||
passes_elementary_quantization_checks(gf::G4Flux) | ||
G4-fluxes are subject to the quantization condition | ||
[Wit97](@cite) $G_4 + \frac{1}{2} c_2(Y) \in H^{(2,2)}(Y, \mathbb{Z})$. | ||
It is hard to verify that this condition is met. However, | ||
we can execute a number of simple consistency checks, by | ||
verifying that $\int_{Y}{G_4 \wedge [D_1] \wedge [D_2]} \in \mathbb{Z}$ | ||
for any two toric divisors $D_1$, $D_2$. If all of these | ||
simple consistency checks are met, this method will return | ||
`true` and otherwise `false`. | ||
It is worth mentioning that currently (July 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. | ||
```jldoctest | ||
julia> qsm_model = literature_model(arxiv_id = "1903.00009", model_parameters = Dict("k" => 4)) | ||
Hypersurface model over a concrete base | ||
julia> abs = ambient_space(qsm_model) | ||
Normal, simplicial, 5-dimensional toric variety | ||
julia> cohomology_ring(abs, check = false); | ||
julia> g4_class = cohomology_class(anticanonical_divisor_class(abs))^2; | ||
julia> g4 = g4_flux(qsm_model, g4_class, check = false) | ||
G4-flux candidate lacking elementary quantization checks | ||
julia> passes_elementary_quantization_checks(g4) | ||
true | ||
``` | ||
""" | ||
@attr Bool function passes_elementary_quantization_checks(g4::G4Flux) | ||
m = model(g4) | ||
@req (m isa WeierstrassModel || m isa GlobalTateModel || m isa HypersurfaceModel) "Elementary quantization checks for G4-fluxes only supported for Weierstrass, global Tate and hypersurface models" | ||
@req base_space(m) isa NormalToricVariety "Elementary quantization checks for G4-flux currently supported only for toric base" | ||
@req ambient_space(m) isa NormalToricVariety "Elementary quantization checks for G4-flux currently supported only for toric ambient space" | ||
|
||
# Compute the cohomology class corresponding to the hypersurface equation | ||
if m isa WeierstrassModel | ||
cl = toric_divisor_class(ambient_space(m), degree(weierstrass_polynomial(m))) | ||
end | ||
if m isa GlobalTateModel | ||
cl = toric_divisor_class(ambient_space(m), degree(tate_polynomial(m))) | ||
end | ||
if m isa HypersurfaceModel | ||
cl = toric_divisor_class(ambient_space(m), degree(hypersurface_equation(m))) | ||
end | ||
cy = polynomial(cohomology_class(cl)) | ||
|
||
# Now check quantization condition G4 + 1/2 c2 is integral. | ||
c_ds = [polynomial(cohomology_class(d)) for d in torusinvariant_prime_divisors(ambient_space(m))] | ||
|
||
# explicitly switched off an expensive test in the following line | ||
twist_g4 = polynomial(cohomology_class(g4) + 1//2 * chern_class_c2(m; check = false)) | ||
|
||
# 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) | ||
!is_integer(numb) && return false | ||
end | ||
end | ||
return true | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters