Skip to content
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] Add support for all vertical, well-quantized G4s that do not break the non-Abelian gauge group #4446

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion experimental/FTheoryTools/docs/src/g4.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,10 @@ Please note that this method may take a long time to execute for involved geomet
```@docs
well_quantized_ambient_space_models_of_g4_fluxes(m::AbstractFTheoryModel; check::Bool = true)
```
Similarly, we have a method for all vertical and well-quantized ambient space $G_4$-flux candidates:
Similarly, we have a method for all vertical and well-quantized ambient space $G_4$-flux candidates,
and the vertical and well-quantized ambient space $G_4$-flux candidates, that do not break the non-Abelian
gauge group.
```@docs
well_quantized_and_vertical_ambient_space_models_of_g4_fluxes(m::AbstractFTheoryModel; check::Bool = true)
well_quantized_and_vertical_and_no_non_abelian_gauge_group_breaking_ambient_space_models_of_g4_fluxes(m::AbstractFTheoryModel; check::Bool = true)
```
2 changes: 2 additions & 0 deletions experimental/FTheoryTools/src/G4Fluxes/attributes.jl
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ G4-flux candidate
- Elementary quantization checks: not executed
- Tadpole cancellation check: not executed
- Verticality checks: not executed
- Non-Abelian gauge group: breaking pattern not analyzed
julia> model(g4f)
Hypersurface model over a concrete base
Expand All @@ -46,6 +47,7 @@ G4-flux candidate
- Elementary quantization checks: not executed
- Tadpole cancellation check: not executed
- Verticality checks: not executed
- Non-Abelian gauge group: breaking pattern not analyzed
julia> cohomology_class(g4f) == g4_class
true
Expand Down
13 changes: 13 additions & 0 deletions experimental/FTheoryTools/src/G4Fluxes/constructors.jl
Original file line number Diff line number Diff line change
Expand Up @@ -55,12 +55,14 @@
- Elementary quantization checks: satisfied
- Tadpole cancellation check: not executed
- Verticality checks: not executed
- Non-Abelian gauge group: breaking pattern not analyzed

julia> g4f2 = g4_flux(qsm_model, g4_class, check = false)
G4-flux candidate
- Elementary quantization checks: not executed
- Tadpole cancellation check: not executed
- Verticality checks: not executed
- Non-Abelian gauge group: breaking pattern not analyzed
```
"""
function g4_flux(m::AbstractFTheoryModel, g4_class::CohomologyClass; check::Bool = true)
Expand Down Expand Up @@ -153,6 +155,17 @@
push!(properties_string, " - Verticality checks: not executed")
end

# Check for non-Abelian gauge group breaking
if has_attribute(g4, :breaks_non_abelian_gauge_group)
if breaks_non_abelian_gauge_group(g4)
push!(properties_string, " - Non-Abelian gauge group: broken")

Check warning on line 161 in experimental/FTheoryTools/src/G4Fluxes/constructors.jl

View check run for this annotation

Codecov / codecov/patch

experimental/FTheoryTools/src/G4Fluxes/constructors.jl#L161

Added line #L161 was not covered by tests
else
push!(properties_string, " - Non-Abelian gauge group: not broken")
end
else
push!(properties_string, " - Non-Abelian gauge group: breaking pattern not analyzed")
end

# Print each line separately, to avoid extra line break at the end
for (i, line) in enumerate(properties_string)
if i == length(properties_string)
Expand Down
78 changes: 76 additions & 2 deletions experimental/FTheoryTools/src/G4Fluxes/properties.jl
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ G4-flux candidate
- Elementary quantization checks: not executed
- Tadpole cancellation check: not executed
- Verticality checks: not executed
- Non-Abelian gauge group: breaking pattern not analyzed

julia> passes_elementary_quantization_checks(g4)
true
Expand All @@ -41,6 +42,7 @@ G4-flux candidate
- Elementary quantization checks: satisfied
- Tadpole cancellation check: not executed
- Verticality checks: not executed
- Non-Abelian gauge group: breaking pattern not analyzed
```
"""
@attr Bool function passes_elementary_quantization_checks(g4::G4Flux)
Expand Down Expand Up @@ -97,6 +99,7 @@ G4-flux candidate
- Elementary quantization checks: not executed
- Tadpole cancellation check: not executed
- Verticality checks: not executed
- Non-Abelian gauge group: breaking pattern not analyzed

julia> passes_verticality_checks(g4)
true
Expand All @@ -106,6 +109,7 @@ G4-flux candidate
- Elementary quantization checks: not executed
- Tadpole cancellation check: not executed
- Verticality checks: satisfied
- Non-Abelian gauge group: breaking pattern not analyzed
```
"""
@attr Bool function passes_verticality_checks(g4::G4Flux)
Expand All @@ -118,7 +122,7 @@ G4-flux candidate
# 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))))
n = ngens(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)

Expand Down Expand Up @@ -160,6 +164,7 @@ G4-flux candidate
- Elementary quantization checks: not executed
- Tadpole cancellation check: not executed
- Verticality checks: not executed
- Non-Abelian gauge group: breaking pattern not analyzed

julia> passes_tadpole_cancellation_check(g4)
true
Expand All @@ -169,11 +174,12 @@ G4-flux candidate
- Elementary quantization checks: not executed
- Tadpole cancellation check: satisfied
- Verticality checks: not executed
- Non-Abelian gauge group: breaking pattern not analyzed
```
"""
@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 (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"

Expand All @@ -187,3 +193,71 @@ G4-flux candidate
end
return false
end


@doc raw"""
breaks_non_abelian_gauge_group(gf::G4Flux)

G4-fluxes may break the non-Abelian gauge group (cf. [Wei18](@cite)).
This function verifies if this is the case for the given G4-flux.
If it does not break any non-Abelian gauge factor, we 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
- Elementary quantization checks: not executed
- Tadpole cancellation check: not executed
- Verticality checks: not executed
- Non-Abelian gauge group: breaking pattern not analyzed

julia> breaks_non_abelian_gauge_group(g4)
false

julia> g4
G4-flux candidate
- Elementary quantization checks: not executed
- Tadpole cancellation check: not executed
- Verticality checks: not executed
- Non-Abelian gauge group: not broken
```
"""
@attr Bool function breaks_non_abelian_gauge_group(g4::G4Flux)
m = model(g4)
@req (m isa WeierstrassModel || m isa GlobalTateModel || m isa HypersurfaceModel) "Checks for breaking non-Abelian gauge group factors only supported for Weierstrass, global Tate and hypersurface models"
@req base_space(m) isa NormalToricVariety "Checks for breaking non-Abelian gauge group factors currently supported only for toric base"
@req ambient_space(m) isa NormalToricVariety "Checks for breaking non-Abelian gauge group factors 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)))))

# Identify the cohomology classes of all base divisors
n = ngens(cox_ring(base_space(m)))
c_ds = [polynomial(cohomology_class(d)) for d in torusinvariant_prime_divisors(ambient_space(m))[1:n]]

# Identify the cohomology classes of all exceptional divisors
gS = gens(cox_ring(ambient_space(m)))
exceptional_divisor_positions = findall(x -> occursin(r"^e\d+$", x), string.(symbols(cox_ring(ambient_space(m)))))
exceptional_divisors = torusinvariant_prime_divisors(ambient_space(m))[exceptional_divisor_positions]
c_ei = [polynomial(cohomology_class(d)) for d in exceptional_divisors]

# now execute the checks if any non-Abelian gauge group factor is broken
for i in 1:n
for j in 1:length(exceptional_divisors)
numb = integrate(cohomology_class(ambient_space(m), polynomial(cohomology_class(g4)) * c_ds[i] * c_ei[j] * cy); check = false)
numb!=0 && return true
end
end
return false
end
Loading
Loading