Skip to content

Commit

Permalink
[FTheoryTools] Add support for all vertical, well-quantized G4s that …
Browse files Browse the repository at this point in the history
…do not break the non-Abelian gauge group
  • Loading branch information
HereAround committed Jan 10, 2025
1 parent 43499a7 commit d24abb5
Show file tree
Hide file tree
Showing 6 changed files with 443 additions and 3 deletions.
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)::Tuple{QQMatrix, QQMatrix}
```
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 @@ G4-flux candidate
- 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 @@ function Base.show(io::IO, g4::G4Flux)
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")
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
76 changes: 75 additions & 1 deletion 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 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: satisfied
- 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 = length(gens(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.(gS))
exceptional_divisors = [torusinvariant_prime_divisors(ambient_space(m))[k] for k in 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

0 comments on commit d24abb5

Please sign in to comment.