# Literature constructions

Certain models have been studied in the physics literature over and over again. Thereby, these constructions became famous and some were given special names. We aim to provide support for such standard constructions. An example of such a model is the following:

`su5_tate_model_over_arbitrary_3d_base`

— Method`su5_tate_model_over_arbitrary_3d_base()`

Return the SU(5) Tate model over an arbitrary 3-dimensional base space. For more details see e.g. Timo Weigand (2018) and references therein.

```
julia> tm = su5_tate_model_over_arbitrary_3d_base()
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base
julia> v = ambient_space(tm)
Normal toric variety
julia> a10,a21,a32,a43,a65,w,x,y,z = gens(cox_ring(v));
julia> I = ideal([x,y,w]);
julia> v2 = domain(blow_up(v,I))
Normal toric variety
julia> cox_ring(v2)
Multivariate polynomial ring in 10 variables over QQ graded by
a10 -> [1 0 0 0]
a21 -> [0 1 0 0]
a32 -> [-1 2 0 0]
a43 -> [-2 3 0 0]
a65 -> [-4 5 0 0]
w -> [0 0 1 0]
x -> [0 1 1 2]
y -> [1 1 1 3]
z -> [0 0 0 1]
e -> [2 -1 -1 0]
```

More generally, we support literature constructions.

`literature_model`

— Method`literature_model(; doi::String="", arxiv_id::String="", version="", equation::String="")`

Many models have been created in the F-theory literature. A significant number of them have even been given specific names, for instance the "U(1)-restricted SU(5)-GUT model". This method has access to a database, from which it can look up such literature models.

Currently, you can provide any combination of the following optional arguments to the method `literature_model`

:

`doi`

: A string representing the DOI of the publication that

introduced the model in question.

`equation`

: A string representing the number of the equation that introduced

the model in question. For papers, that were posted on the arXiv, we can instead of the `doi`

also provide the following:

`arxiv_id`

: A string that represents the arXiv identifier of the paper that

introduced the model in question.

`version`

: A string representing the version of the arXiv upload.

The method `literature_model`

attempts to find a model in our database for which the provided data matches the information in our record. If no such model can be found, or multiple models exist with information matching the provided information, then an error is raised.

Some literature models require additional parameters to specified to single out a model from a family of models. Such models can be provided using the optional argument `model_parameters`

, which should be a dictionary such as `Dict("k" => 5)`

.

```
julia> t = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> v = ambient_space(t)
Normal toric variety
julia> a1,a21,a32,a43,w,x,y,z = gens(cox_ring(v));
julia> I = ideal([x,y,w]);
julia> v2 = domain(blow_up(v, I))
Normal toric variety
julia> cox_ring(v2)
Multivariate polynomial ring in 9 variables over QQ graded by
a1 -> [1 0 0 0]
a21 -> [0 1 0 0]
a32 -> [-1 2 0 0]
a43 -> [-2 3 0 0]
w -> [0 0 1 0]
x -> [0 1 1 2]
y -> [1 1 1 3]
z -> [0 0 0 1]
e -> [2 -1 -1 0]
```

## Attributes

For literature models, we provide the following attributes:

`arxiv_id`

— Method`arxiv_id(m::AbstractFTheoryModel)`

Return the `arxiv_id`

of the preprint that introduced the given model. If no `arxiv_id`

is known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> arxiv_id(m)
"1109.3454"
```

`arxiv_doi`

— Method`arxiv_doi(m::AbstractFTheoryModel)`

Return the `arxiv_doi`

of the preprint that introduced the given model. If no `arxiv_doi`

is known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> arxiv_doi(m)
"10.48550/arXiv.1109.3454"
```

`arxiv_link`

— Method`arxiv_link(m::AbstractFTheoryModel)`

Return the `arxiv_link`

(formatted as string) to the arXiv version of the paper that introduced the given model. If no `arxiv_link`

is known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> arxiv_link(m)
"https://arxiv.org/abs/1109.3454v2"
```

`arxiv_model_equation_number`

— Method`arxiv_model_equation_number(m::AbstractFTheoryModel)`

Return the `arxiv_model_equation_number`

in which the given model was introduced in the arXiv preprint in our record. If no `arxiv_model_equation_number`

is known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> arxiv_model_equation_number(m)
"3.1"
```

`arxiv_model_page`

— Method`arxiv_model_page(m::AbstractFTheoryModel)`

Return the `arxiv_model_page`

on which the given model was introduced in the arXiv preprint in our record. If no `arxiv_model_page`

is known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> arxiv_model_page(m)
"10"
```

`arxiv_model_section`

— Method`arxiv_model_section(m::AbstractFTheoryModel)`

Return the `arxiv_model_section`

in which the given model was introduced in the arXiv preprint in our record. If no `arxiv_model_section`

is known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> arxiv_model_section(m)
"3"
```

`arxiv_version`

— Method`arxiv_version(m::AbstractFTheoryModel)`

Return the `arxiv_version`

of the arXiv preprint that introduced the given model. If no `arxiv_version`

is known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> arxiv_version(m)
"2"
```

`associated_literature_models`

— Method`associated_literature_models(m::AbstractFTheoryModel)`

Return a list of the unique identifiers any `associated_literature_models`

of the given model. These are either other presentations (Weierstrass, Tate, ...) of the given model, or other version of the same model from a different paper in the literature. If no `associated_literature_models`

are known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1507.05954", equation = "A.1")
Assuming that the first row of the given grading is the grading under Kbar
Weierstrass model over a not fully specified base -- U(1)xU(1) Weierstrass model based on arXiv paper 1507.05954 Eq. (A.1)
julia> associated_literature_models(m)
1-element Vector{String}:
"1507_05954-1"
```

`generating_sections`

— Method`generating_sections(m::AbstractFTheoryModel)`

Return a list of the known Mordell–Weil generating sections of the given model. If no generating sections are known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> generating_sections(m)
1-element Vector{Vector{MPolyDecRingElem{QQFieldElem, QQMPolyRingElem}}}:
[0, 0, 1]
```

`journal_doi`

— Method`journal_doi(m::AbstractFTheoryModel)`

Return the `journal_doi`

of the publication that introduced the given model. If no `journal_doi`

is known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> journal_doi(m)
"10.1016/j.nuclphysb.2011.12.013"
```

`journal_link`

— Method`journal_link(m::AbstractFTheoryModel)`

Return the `journal_link`

(formatted as string) to the published version of the paper that introduced the given model. If no `journal_link`

is known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> journal_link(m)
"https://www.sciencedirect.com/science/article/pii/S0550321311007115"
```

`journal_model_equation_number`

— Method`journal_model_equation_number(m::AbstractFTheoryModel)`

Return the `journal_model_equation_number`

in which the given model was introduced in the published paper in our record. If no `journal_model_equation_number`

is known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> journal_model_equation_number(m)
"3.1"
```

`journal_model_page`

— Method`journal_model_page(m::AbstractFTheoryModel)`

Return the `journal_model_page`

on which the given model was introduced in the published paper in our record. If no `journal_model_page`

is known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> journal_model_page(m)
"9"
```

`journal_model_section`

— Method`journal_model_section(m::AbstractFTheoryModel)`

Return the `journal_model_section`

in which the given model was introduced in the published paper in our record. If no `journal_model_section`

is known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> journal_model_section(m)
"3"
```

`journal_pages`

— Method`journal_pages(m::AbstractFTheoryModel)`

Return the `journal_pages`

of the published paper in which the given model was introduced. If no `journal_pages`

are known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> journal_pages(m)
"1–47"
```

`journal_report_numbers`

— Method`journal_report_numbers(m::AbstractFTheoryModel)`

Return the `journal_report_numbers`

of the published paper in which the given model was introduced. If no `journal_report_numbers`

is known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1507.05954", equation = "A.1")
Assuming that the first row of the given grading is the grading under Kbar
Weierstrass model over a not fully specified base -- U(1)xU(1) Weierstrass model based on arXiv paper 1507.05954 Eq. (A.1)
julia> journal_report_numbers(m)
3-element Vector{String}:
"UPR-1274-T"
"CERN-PH-TH-2015-157"
"MIT-CTP-4678"
```

`journal_volume`

— Method`journal_volume(m::AbstractFTheoryModel)`

Return the `journal_volume`

of the published paper in which the given model was introduced. If no `journal_volume`

are known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> journal_volume(m)
"858"
```

`journal_year`

— Method`journal_year(m::AbstractFTheoryModel)`

Return the `journal_year`

of the published paper in which the given model was introduced. If no `journal_year`

is known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> journal_year(m)
"2012"
```

`literature_identifier`

— Method`literature_identifier(m::AbstractFTheoryModel)`

Return the `literature_identifier`

of the given mode, which is a unique string that distinguishes the model from all others in the literature model database. If no `literature_identifier`

is known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> literature_identifier(m)
"1109_3454"
```

`model_description`

— Method`model_description(m::AbstractFTheoryModel)`

Return the `model_description`

of the given model. If no `model_description`

is known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> model_description(m)
"SU(5)xU(1) restricted Tate model"
```

`model_parameters`

— Method`model_parameters(m::AbstractFTheoryModel)`

Return the `model_parameters`

of the given model. If no `model_parameters`

are known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1212.2949", equation = "3.2", model_parameters = Dict("k" => 5))
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(2k+1) Tate model with parameter values (k = 5) based on arXiv paper 1212.2949 Eq. (3.2)
julia> model_parameters(m)
Dict{String, Int64} with 1 entry:
"k" => 5
```

`paper_authors`

— Method`paper_authors(m::AbstractFTheoryModel)`

Return the `paper_authors`

of the paper that introduced the given model. If no `paper_authors`

are known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> paper_authors(m)
3-element Vector{String}:
"Sven Krause"
"Christoph Mayrhofer"
"Timo Weigand"
```

`paper_buzzwords`

— Method`paper_buzzwords(m::AbstractFTheoryModel)`

Return the `paper_buzzwords`

of the paper that introduced the given model. If no `paper_buzzwords`

are known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> paper_buzzwords(m)
4-element Vector{String}:
"GUT model"
"Tate"
"U(1)"
"SU(5)"
```

`paper_description`

— Method`paper_description(m::AbstractFTheoryModel)`

Return the `paper_description`

of the paper that introduced the given model. If no `paper_description`

is known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> paper_description(m)
"SU(5)xU(1) restricted Tate model"
```

`paper_title`

— Method`paper_title(m::AbstractFTheoryModel)`

Return the `paper_title`

of the arXiv preprint that introduced the given model. If no `paper_title`

is known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> paper_title(m)
"\$G_4\$ flux, chiral matter and singularity resolution in F-theory compactifications"
```

`related_literature_models`

— Method`related_literature_models(m::AbstractFTheoryModel)`

Return a list of the unique identifiers of any `related_literature_models`

of the given model. These are models that are introduced in the same paper as the given model, but that are distinct from the given model. If no `related_literature_models`

are known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1212.2949", equation = "3.2", model_parameters = Dict("k" => 5))
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(2k+1) Tate model with parameter values (k = 5) based on arXiv paper 1212.2949 Eq. (3.2)
julia> related_literature_models(m)
6-element Vector{String}:
"1212_2949-2"
"1212_2949-3"
"1212_2949-4"
"1212_2949-5"
"1212_2949-6"
"1212_2949-7"
```

`resolutions`

— Method`resolutions(m::AbstractFTheoryModel)`

Return the list of all known resolutions for the given model. If no resolutions are known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> resolutions(m)
1-element Vector{Vector{Vector}}:
[[["x", "y", "w"], ["y", "e1"], ["x", "e4"], ["y", "e2"], ["x", "y"]], ["e1", "e4", "e2", "e3", "s"]]
```

`resolution_generating_sections`

— Method`resolution_generating_sections(m::AbstractFTheoryModel)`

Return a list of lists of known Mordell–Weil generating sections for the given model after each known resolution. Each element of the outer list corresponds to a known resolution (in the same order), and each element of the list associated to a given resolution corresponds to a known generating section (in the same order). If no resolution generating sections are known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> resolution_generating_sections(m)
1-element Vector{Vector{Vector{Vector{String}}}}:
[[["0", "0", "1"], ["0", "0", "1"], ["0", "1"], ["0", "1"], ["0", "1"], ["a32", "-a43"]]]
```

`resolution_zero_sections`

— Method`resolution_zero_sections(m::AbstractFTheoryModel)`

Return a list of known Mordell–Weil zero sections for the given model after each known resolution. Each element of the list corresponds to a known resolution (in the same order). If no resolution zero sections are known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> resolution_zero_sections(m)
1-element Vector{Vector{Vector{String}}}:
[["1", "1", "0"], ["1", "1", "w"], ["1", "1"], ["1", "1"], ["1", "1"], ["1", "1"]]
```

`weighted_resolutions`

— Method`weighted_resolutions(m::AbstractFTheoryModel)`

Return the list of all known weighted resolutions for the given model. If no weighted resolutions are known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> weighted_resolutions(m)
1-element Vector{Vector{Vector}}:
[Vector{Vector{Any}}[[["x", "y", "w"], [1, 1, 1]], [["x", "y", "w"], [1, 2, 1]], [["x", "y", "w"], [2, 2, 1]], [["x", "y", "w"], [2, 3, 1]], [["x", "y"], [1, 1]]], ["e1", "e4", "e2", "e3", "s"]]
```

`weighted_resolution_generating_sections`

— Method`weighted_resolution_generating_sections(m::AbstractFTheoryModel)`

Return a list of lists of known Mordell–Weil generating sections for the given model after each known weighted resolution. Each element of the outer list corresponds to a known weighted resolution (in the same order), and each element of the list associated to a given weighted resolution corresponds to a known generating section (in the same order). If no weighted resolution generating sections are known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> weighted_resolution_generating_sections(m)
1-element Vector{Vector{Vector{Vector{String}}}}:
[[["0", "0", "1"], ["0", "0", "1"], ["0", "0", "1"], ["0", "0", "1"], ["0", "0", "1"], ["a32", "-a43"]]]
```

`weighted_resolution_zero_sections`

— Method`weighted_resolution_zero_sections(m::AbstractFTheoryModel)`

Return a list of known Mordell–Weil zero sections for the given model after each known weighted resolution. Each element of the list corresponds to a known weighted resolution (in the same order). If no weighted resolution zero sections are known, an error is raised.

```
julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> weighted_resolution_zero_sections(m)
1-element Vector{Vector{Vector{String}}}:
[["1", "1", "0"], ["1", "1", "w"], ["1", "1", "w"], ["1", "1", "w"], ["1", "1", "w"], ["1", "1"]]
```

One can add this information for a model that does not have it:

`set_description`

— Method`set_description(m::AbstractFTheoryModel, description::String)`

Set a description for a model.

```
julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> set_description(m, "An SU(5)xU(1) GUT-model")
julia> m
Global Tate model over a not fully specified base -- An SU(5)xU(1) GUT-model based on arXiv paper 1109.3454 Eq. (3.1)
```

Note however, that these changes will (currently) not be stored in our data base. One can also check if a model has a particular set of information. This is achieved with the following methods:

`has_arxiv_id(m::AbstractFTheoryModel)`

,`has_arxiv_doi(m::AbstractFTheoryModel)`

,`has_arxiv_link(m::AbstractFTheoryModel)`

,`has_arxiv_model_equation_number(m::AbstractFTheoryModel)`

,`has_arxiv_model_page(m::AbstractFTheoryModel)`

,`has_arxiv_model_section(m::AbstractFTheoryModel)`

,`has_arxiv_version(m::AbstractFTheoryModel)`

,`has_associated_literature_models(m::AbstractFTheoryModel)`

,`has_generating_sections(m::AbstractFTheoryModel)`

,`has_journal_doi(m::AbstractFTheoryModel)`

,`has_journal_link(m::AbstractFTheoryModel)`

,`has_journal_model_equation_number(m::AbstractFTheoryModel)`

,`has_journal_model_page(m::AbstractFTheoryModel)`

,`has_journal_model_section(m::AbstractFTheoryModel)`

,`has_journal_pages(m::AbstractFTheoryModel)`

,`has_journal_report_numbers(m::AbstractFTheoryModel)`

,`has_journal_volume(m::AbstractFTheoryModel)`

,`has_journal_year(m::AbstractFTheoryModel)`

,`has_literature_identifier(m::AbstractFTheoryModel)`

,`has_model_description(m::AbstractFTheoryModel)`

,`has_model_parameters(m::AbstractFTheoryModel)`

,`has_paper_authors(m::AbstractFTheoryModel)`

,`has_paper_buzzwords(m::AbstractFTheoryModel)`

,`has_paper_description(m::AbstractFTheoryModel)`

,`has_paper_title(m::AbstractFTheoryModel)`

,`has_related_literature_models(m::AbstractFTheoryModel)`

,`has_resolutions(m::AbstractFTheoryModel)`

,`has_resolution_generating_sections(m::AbstractFTheoryModel)`

,`has_resolution_zero_sections(m::AbstractFTheoryModel)`

,`has_weighted_resolutions(m::AbstractFTheoryModel)`

,`has_weighted_resolution_generating_sections(m::AbstractFTheoryModel)`

,`has_weighted_resolution_zero_sections(m::AbstractFTheoryModel)`

,`has_zero_section(m::AbstractFTheoryModel)`

.

## Methods

### Resolution(s) of a singular model

A central task in F-theory is to resolve a singular model. For literature models, we have stored resolutions in our data base. Upon construction of a literature model, we load these known resolutions.

In addition to listing the known resolutions with `resolutions(m::AbstractFTheoryModel)`

, the user might want to add a resolution. This can be achieved with the following method:

`add_resolution`

— Method`add_resolution(m::AbstractFTheoryModel, centers::Vector{Vector{String}}, exceptionals::Vector{String})`

Add a known resolution for a model.

```
julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> add_resolution(m, [["x", "y"], ["y", "s", "w"], ["s", "e4"], ["s", "e3"], ["s", "e1"]], ["s", "w", "e3", "e1", "e2"])
julia> length(resolutions(m))
2
```

Provided that a resolution for a model is known, we can (attempt to) resolve the model.

`resolve`

— Method`resolve(m::AbstractFTheoryModel, index::Int)`

Resolve a model with the index-th resolution that is known.

Careful: Currently, this assumes that all blowups are toric blowups. We hope to remove this requirement in the near future.

```
julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
julia> v = resolve(m, 1)
Normal toric variety
julia> cox_ring(v)
Multivariate polynomial ring in 13 variables over QQ graded by
a1 -> [1 0 0 0 0 0 0 0]
a21 -> [0 1 0 0 0 0 0 0]
a32 -> [-1 2 0 0 0 0 0 0]
a43 -> [-2 3 0 0 0 0 0 0]
w -> [0 0 1 0 0 0 0 0]
x -> [0 0 0 1 0 0 0 0]
y -> [0 0 0 0 1 0 0 0]
z -> [0 0 0 0 0 1 0 0]
e1 -> [0 0 0 0 0 0 1 0]
e4 -> [0 0 0 0 0 0 0 1]
e2 -> [1 -1 -1 -1 1 -1 -1 0]
e3 -> [1 0 0 1 -1 1 0 -1]
s -> [-2 2 2 -1 0 2 1 1]
```