Skip to content

Commit d24abb5

Browse files
committed
[FTheoryTools] Add support for all vertical, well-quantized G4s that do not break the non-Abelian gauge group
1 parent 43499a7 commit d24abb5

File tree

6 files changed

+443
-3
lines changed

6 files changed

+443
-3
lines changed

experimental/FTheoryTools/docs/src/g4.md

+4-1
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,10 @@ Please note that this method may take a long time to execute for involved geomet
8787
```@docs
8888
well_quantized_ambient_space_models_of_g4_fluxes(m::AbstractFTheoryModel; check::Bool = true)
8989
```
90-
Similarly, we have a method for all vertical and well-quantized ambient space $G_4$-flux candidates:
90+
Similarly, we have a method for all vertical and well-quantized ambient space $G_4$-flux candidates,
91+
and the vertical and well-quantized ambient space $G_4$-flux candidates, that do not break the non-Abelian
92+
gauge group.
9193
```@docs
9294
well_quantized_and_vertical_ambient_space_models_of_g4_fluxes(m::AbstractFTheoryModel; check::Bool = true)
95+
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}
9396
```

experimental/FTheoryTools/src/G4Fluxes/attributes.jl

+2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ G4-flux candidate
2020
- Elementary quantization checks: not executed
2121
- Tadpole cancellation check: not executed
2222
- Verticality checks: not executed
23+
- Non-Abelian gauge group: breaking pattern not analyzed
2324
2425
julia> model(g4f)
2526
Hypersurface model over a concrete base
@@ -46,6 +47,7 @@ G4-flux candidate
4647
- Elementary quantization checks: not executed
4748
- Tadpole cancellation check: not executed
4849
- Verticality checks: not executed
50+
- Non-Abelian gauge group: breaking pattern not analyzed
4951
5052
julia> cohomology_class(g4f) == g4_class
5153
true

experimental/FTheoryTools/src/G4Fluxes/constructors.jl

+13
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,14 @@ G4-flux candidate
5555
- Elementary quantization checks: satisfied
5656
- Tadpole cancellation check: not executed
5757
- Verticality checks: not executed
58+
- Non-Abelian gauge group: breaking pattern not analyzed
5859
5960
julia> g4f2 = g4_flux(qsm_model, g4_class, check = false)
6061
G4-flux candidate
6162
- Elementary quantization checks: not executed
6263
- Tadpole cancellation check: not executed
6364
- Verticality checks: not executed
65+
- Non-Abelian gauge group: breaking pattern not analyzed
6466
```
6567
"""
6668
function g4_flux(m::AbstractFTheoryModel, g4_class::CohomologyClass; check::Bool = true)
@@ -153,6 +155,17 @@ function Base.show(io::IO, g4::G4Flux)
153155
push!(properties_string, " - Verticality checks: not executed")
154156
end
155157

158+
# Check for non-Abelian gauge group breaking
159+
if has_attribute(g4, :breaks_non_abelian_gauge_group)
160+
if breaks_non_abelian_gauge_group(g4)
161+
push!(properties_string, " - Non-Abelian gauge group: broken")
162+
else
163+
push!(properties_string, " - Non-Abelian gauge group: not broken")
164+
end
165+
else
166+
push!(properties_string, " - Non-Abelian gauge group: breaking pattern not analyzed")
167+
end
168+
156169
# Print each line separately, to avoid extra line break at the end
157170
for (i, line) in enumerate(properties_string)
158171
if i == length(properties_string)

experimental/FTheoryTools/src/G4Fluxes/properties.jl

+75-1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ G4-flux candidate
3232
- Elementary quantization checks: not executed
3333
- Tadpole cancellation check: not executed
3434
- Verticality checks: not executed
35+
- Non-Abelian gauge group: breaking pattern not analyzed
3536
3637
julia> passes_elementary_quantization_checks(g4)
3738
true
@@ -41,6 +42,7 @@ G4-flux candidate
4142
- Elementary quantization checks: satisfied
4243
- Tadpole cancellation check: not executed
4344
- Verticality checks: not executed
45+
- Non-Abelian gauge group: breaking pattern not analyzed
4446
```
4547
"""
4648
@attr Bool function passes_elementary_quantization_checks(g4::G4Flux)
@@ -97,6 +99,7 @@ G4-flux candidate
9799
- Elementary quantization checks: not executed
98100
- Tadpole cancellation check: not executed
99101
- Verticality checks: not executed
102+
- Non-Abelian gauge group: breaking pattern not analyzed
100103
101104
julia> passes_verticality_checks(g4)
102105
true
@@ -106,6 +109,7 @@ G4-flux candidate
106109
- Elementary quantization checks: not executed
107110
- Tadpole cancellation check: not executed
108111
- Verticality checks: satisfied
112+
- Non-Abelian gauge group: breaking pattern not analyzed
109113
```
110114
"""
111115
@attr Bool function passes_verticality_checks(g4::G4Flux)
@@ -160,6 +164,7 @@ G4-flux candidate
160164
- Elementary quantization checks: not executed
161165
- Tadpole cancellation check: not executed
162166
- Verticality checks: not executed
167+
- Non-Abelian gauge group: breaking pattern not analyzed
163168
164169
julia> passes_tadpole_cancellation_check(g4)
165170
true
@@ -169,11 +174,12 @@ G4-flux candidate
169174
- Elementary quantization checks: not executed
170175
- Tadpole cancellation check: satisfied
171176
- Verticality checks: not executed
177+
- Non-Abelian gauge group: breaking pattern not analyzed
172178
```
173179
"""
174180
@attr Bool function passes_tadpole_cancellation_check(g4::G4Flux)
175181
m = model(g4)
176-
@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"
182+
@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"
177183
@req base_space(m) isa NormalToricVariety "Tadpole cancellation checks for G4-flux currently supported only for toric base"
178184
@req ambient_space(m) isa NormalToricVariety "Tadpole cancellation checks for G4-flux currently supported only for toric ambient space"
179185

@@ -187,3 +193,71 @@ G4-flux candidate
187193
end
188194
return false
189195
end
196+
197+
198+
@doc raw"""
199+
breaks_non_abelian_gauge_group(gf::G4Flux)
200+
201+
G4-fluxes may break the non-Abelian gauge group (cf. [Wei18](@cite)).
202+
This function verifies if this is the case for the given G4-flux.
203+
If it does not break any non-Abelian gauge factor, we return
204+
`true` and otherwise `false`
205+
206+
```jldoctest; setup = :(Oscar.LazyArtifacts.ensure_artifact_installed("QSMDB", Oscar.LazyArtifacts.find_artifacts_toml(Oscar.oscardir)))
207+
julia> qsm_model = literature_model(arxiv_id = "1903.00009", model_parameters = Dict("k" => 4))
208+
Hypersurface model over a concrete base
209+
210+
julia> divs = torusinvariant_prime_divisors(ambient_space(qsm_model));
211+
212+
julia> e1 = cohomology_class(divs[35]);e2 = cohomology_class(divs[32]);e4 = cohomology_class(divs[34]);
213+
214+
julia> u = cohomology_class(divs[33]);v = cohomology_class(divs[30]);pb_Kbar = cohomology_class(sum([divs[k] for k in 1:29]));
215+
216+
julia> g4_class = (-3) // kbar3(qsm_model) * (5 * e1 * e4 + pb_Kbar * (-3 * e1 - 2 * e2 - 6 * e4 + pb_Kbar - 4 * u + v));
217+
218+
julia> g4 = g4_flux(qsm_model, g4_class, check = false)
219+
G4-flux candidate
220+
- Elementary quantization checks: not executed
221+
- Tadpole cancellation check: not executed
222+
- Verticality checks: not executed
223+
- Non-Abelian gauge group: breaking pattern not analyzed
224+
225+
julia> breaks_non_abelian_gauge_group(g4)
226+
false
227+
228+
julia> g4
229+
G4-flux candidate
230+
- Elementary quantization checks: not executed
231+
- Tadpole cancellation check: not executed
232+
- Verticality checks: satisfied
233+
- Non-Abelian gauge group: not broken
234+
```
235+
"""
236+
@attr Bool function breaks_non_abelian_gauge_group(g4::G4Flux)
237+
m = model(g4)
238+
@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"
239+
@req base_space(m) isa NormalToricVariety "Checks for breaking non-Abelian gauge group factors currently supported only for toric base"
240+
@req ambient_space(m) isa NormalToricVariety "Checks for breaking non-Abelian gauge group factors currently supported only for toric ambient space"
241+
242+
# Compute the cohomology class corresponding to the hypersurface equation
243+
cy = polynomial(cohomology_class(toric_divisor_class(ambient_space(m), degree(hypersurface_equation(m)))))
244+
245+
# Identify the cohomology classes of all base divisors
246+
n = length(gens(cox_ring(base_space(m))))
247+
c_ds = [polynomial(cohomology_class(d)) for d in torusinvariant_prime_divisors(ambient_space(m))[1:n]]
248+
249+
# Identify the cohomology classes of all exceptional divisors
250+
gS = gens(cox_ring(ambient_space(m)))
251+
exceptional_divisor_positions = findall(x -> occursin(r"^e\d+$", x), string.(gS))
252+
exceptional_divisors = [torusinvariant_prime_divisors(ambient_space(m))[k] for k in exceptional_divisor_positions];
253+
c_ei = [polynomial(cohomology_class(d)) for d in exceptional_divisors]
254+
255+
# now execute the checks if any non-Abelian gauge group factor is broken
256+
for i in 1:n
257+
for j in 1:length(exceptional_divisors)
258+
numb = integrate(cohomology_class(ambient_space(m), polynomial(cohomology_class(g4)) * c_ds[i] * c_ei[j] * cy); check = false)
259+
numb!=0 && return true
260+
end
261+
end
262+
return false
263+
end

0 commit comments

Comments
 (0)