Skip to content

Commit

Permalink
Merge branch 'master' into lg/mul
Browse files Browse the repository at this point in the history
  • Loading branch information
lgoettgens authored Oct 11, 2023
2 parents 1d7976f + a270a94 commit f02c1fd
Show file tree
Hide file tree
Showing 101 changed files with 1,649 additions and 724 deletions.
8 changes: 4 additions & 4 deletions Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,18 +26,18 @@ UUIDs = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"
cohomCalg_jll = "5558cf25-a90e-53b0-b813-cadaa3ae7ade"

[compat]
AbstractAlgebra = "0.32.5"
AlgebraicSolving = "0.3.3"
AbstractAlgebra = "0.33.0"
AlgebraicSolving = "0.3.6"
DocStringExtensions = "0.8, 0.9"
GAP = "0.9.4"
Hecke = "0.22.4"
JSON = "^0.20, ^0.21"
Nemo = "0.36.1"
Nemo = "0.37.1"
Polymake = "0.11.6"
Preferences = "1"
RandomExtensions = "0.4.3"
RecipesBase = "1.2.1"
Singular = "0.18.10"
Singular = "0.18.17"
TOPCOM_jll = "0.17.8"
cohomCalg_jll = "0.32.0"
julia = "1.6"
2 changes: 2 additions & 0 deletions docs/doc.main
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,8 @@
"AlgebraicGeometry/ToricVarieties/AlgebraicCycles.md",
"AlgebraicGeometry/ToricVarieties/ToricMorphisms.md",
"AlgebraicGeometry/ToricVarieties/ToricSchemes.md",
"AlgebraicGeometry/ToricVarieties/ToricIdealSheaves.md",
"AlgebraicGeometry/ToricVarieties/BlowdownMorphisms.md",
],
"Tropical Geometry" => [
"AlgebraicGeometry/TropicalGeometry/intro.md",
Expand Down
81 changes: 81 additions & 0 deletions docs/src/AlgebraicGeometry/ToricVarieties/BlowdownMorphisms.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
```@meta
CurrentModule = Oscar
```

# Toric Blowdown Morphisms (Experimental)

It is a common goal in algebraic geometry to resolve singularities. Certainly, (sub)varieties of
toric varieties are no exception and we provide a growing set of functionality for such tasks.

In general, resolutions need not be toric. Indeed, some of the functionality below requires
fully-fledge schemes machinery, which -- as of this writing (October 2023) -- is still in
Oscar's experimental state. For this reason, the methods below should be considered experimental.


## Constructors

Blowups of toric varieties are obtained from star subdivisions of polyhedral fans. In the most general form,
a star subdivision is defined by a new primitive element in the fan. Below, we refer to this new primitive
element as `new_ray`. In addition to this `new_ray`, our design of toric blowdown morphisms requires an
underlying toric morphism. With an eye towards covered schemes as possible return value, any toric blowdown
morphism must also know (to compute) its blowup center in the form of an ideal sheaf. The following constructor
allows to set this ideal sheaf center upon construction:
- `toric_blowdown_morphism(bl::ToricMorphism, new_ray::AbstractVector{<:IntegerUnion}, center::IdealSheaf)`
The "working-horse" constructor however is the following:
- `toric_blowdown_morphism(Y::NormalToricVariety, new_ray::AbstractVector{<:IntegerUnion}, coordinate_name::String, set_attributes::Bool)`
This constructor will, among others, construct the underlying toric morphism. In addition, we can then specify
a name for the coordinate in the Cox ring that is assigned to `new_ray`.



## Blowdown morphisms from blowing up toric varieties

The following methods blow up toric varieties. The center of the blowup can be provided in different formats.
We discuss the methods in ascending generality.

For our most specialized blow-up method, we focus on the n-th cone in the fan of the variety `v` in question.
This cone need not be maximal! The ensuing star subdivision will subdivide this cone about its "diagonal"
(the sum of all its rays). The result of this will always be a toric variety:
```@docs
blow_up(v::NormalToricVarietyType, n::Int; coordinate_name::String = "e", set_attributes::Bool = true)
```
More generally, we can provide a primitive element in the fan of the variety in question. The resulting
star subdivision leads to a polyhedral fan, or put differently, the blow-up along this center is always toric:
```@docs
blow_up(v::NormalToricVarietyType, new_ray::AbstractVector{<:IntegerUnion}; coordinate_name::String = "e", set_attributes::Bool = true)
```
Finally, and most generally, we encode the blowup center by a homogeneous ideal in the Cox ring.
Such blowups center may easily lead to non-toric blowups, i.e. the return value of the following method
could well be non-toric.
```@docs
blow_up(v::NormalToricVarietyType, I::MPolyIdeal; coordinate_name::String = "e", set_attributes::Bool = true)
```


## Attributes

```@docs
underlying_morphism(bl::ToricBlowdownMorphism)
index_of_new_ray(bl::ToricBlowdownMorphism)
center(bl::ToricBlowdownMorphism)
exceptional_divisor(bl::ToricBlowdownMorphism)
```
Based on `underlying_morphism`, also the following attributes of toric morphisms are supported for toric
blowdown morphisms:
- `grid_morphism(bl::ToricBlowdownMorphism)`,
- `morphism_on_torusinvariant_weil_divisor_group(bl::ToricBlowdownMorphism)`,
- `morphism_on_torusinvariant_cartier_divisor_group(bl::ToricBlowdownMorphism)`,
- `morphism_on_class_group(bl::ToricBlowdownMorphism)`,
- `morphism_on_picard_group(bl::ToricBlowdownMorphism)`.
The total and strict transform of ideal sheaves along toric blowdown morphisms can be computed:
```@docs
total_transform(f::AbsSimpleBlowdownMorphism, II::IdealSheaf)
```


## Arithmetics

Toric blowdown morphisms can be added, subtracted and multiplied by rational numbers. The results of such
operations will be toric morphisms, i.e. no longer attributed to the blowup of a certain locus. Arithmetics
among toric blowdown morphisms and general toric morphisms is also supported, as well as equality for toric
blowdown morphisms.
Original file line number Diff line number Diff line change
Expand Up @@ -92,9 +92,6 @@ normal_toric_varieties_from_glsm(charges::ZZMatrix; set_attributes::Bool = true)
### Further Constructions

```@docs
blow_up(v::NormalToricVarietyType, I::MPolyIdeal; coordinate_name::String = "e", set_attributes::Bool = true)
blow_up(v::NormalToricVarietyType, new_ray::AbstractVector{<:IntegerUnion}; coordinate_name::String = "e", set_attributes::Bool = true)
blow_up(v::NormalToricVarietyType, n::Int; coordinate_name::String = "e", set_attributes::Bool = true)
Base.:*(v::NormalToricVarietyType, w::NormalToricVarietyType; set_attributes::Bool = true)
proj(E::ToricLineBundle...)
total_space(E::ToricLineBundle...)
Expand Down
14 changes: 14 additions & 0 deletions docs/src/AlgebraicGeometry/ToricVarieties/ToricIdealSheaves.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
```@meta
CurrentModule = Oscar
```


# Toric Ideal Sheaves (Experimental)

Ideal sheaves on toric varieties are currently in experimental state.
Currently, we support the following functionality. Note that, as of
October 2023, this is limited to smooth toric varieties.
```@docs
ideal_sheaf(td::ToricDivisor)
ideal_sheaf(X::NormalToricVariety, I::MPolyIdeal)
```
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,9 @@ Equality of toric line bundles can be tested via `==`.
To check if a toric line bundle is trivial, one can invoke `is_trivial`. Beyond this,
we support the following properties of toric line bundles:
```@docs
is_basepoint_free(l::ToricLineBundle)
is_ample(l::ToricLineBundle)
is_basepoint_free(l::ToricLineBundle)
is_immaculate(l::ToricLineBundle)
is_very_ample(l::ToricLineBundle)
```

Expand Down
2 changes: 1 addition & 1 deletion docs/src/AlgebraicGeometry/ToricVarieties/ToricSchemes.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
CurrentModule = Oscar
```

# Introduction
# Toric Schemes

Toric varieties are special instances of schemes. As such, all scheme functionality is
available to toric varieties.
Expand Down
2 changes: 1 addition & 1 deletion docs/src/AlgebraicGeometry/ToricVarieties/cohomCalg.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,5 +46,5 @@ Beyond this, we support the following attributes for vanishing sets:
```@docs
toric_variety(tvs::ToricVanishingSet)
polyhedra(tvs::ToricVanishingSet)
cohomology_index(tvs::ToricVanishingSet)
cohomology_indices(tvs::ToricVanishingSet)
```
2 changes: 1 addition & 1 deletion docs/src/Combinatorics/matroids.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ matroid_from_circuits(circuits::AbstractVector{T}, nelements::IntegerUnion) wher
matroid_from_hyperplanes(hyperplanes::AbstractVector{T}, nelements::IntegerUnion) where T<:GroundsetType
matroid_from_matrix_columns(A::MatrixElem; check::Bool=true)
matroid_from_matrix_rows(A::MatrixElem, ; check::Bool=true)
cycle_matroid(g::Graph)
cycle_matroid
bond_matroid(g::Graph)
cocycle_matroid(g::Graph)
Matroid(pm_matroid::Polymake.BigObjectAllocated, E::GroundsetType=Vector{Integer}(1:pm_matroid.N_ELEMENTS))
Expand Down
4 changes: 2 additions & 2 deletions docs/src/NumberTheory/galois.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ Over the rational function field, we can also compute the monodromy group:
DocTestFilters = r"Galois context\(.*\]\)"
```
```jldoctest galqt; setup = :(using Oscar, Random ; Random.seed!(1))
julia> Qt, t = RationalFunctionField(QQ, "t");
julia> Qt, t = rational_function_field(QQ, "t");
julia> Qtx, x = Qt["x"];
Expand Down Expand Up @@ -233,7 +233,7 @@ is now a polynomial with integer coefficients. Thus the bound needs
to bound the degree as well as the coefficient size.

```jldoctest
julia> Qt,t = RationalFunctionField(QQ, "t");
julia> Qt,t = rational_function_field(QQ, "t");
julia> Qtx, x = Qt["x"];
Expand Down
8 changes: 8 additions & 0 deletions experimental/Experimental.jl
Original file line number Diff line number Diff line change
Expand Up @@ -68,4 +68,12 @@ include("Schemes/duValSing.jl")
include("Schemes/elliptic_surface.jl")
include("Schemes/MorphismFromRationalFunctions.jl")

include("Schemes/ToricIdealSheaves/auxiliary.jl")
include("Schemes/ToricIdealSheaves/constructors.jl")

include("Schemes/ToricBlowups/types.jl")
include("Schemes/ToricBlowups/constructors.jl")
include("Schemes/ToricBlowups/attributes.jl")
include("Schemes/ToricBlowups/methods.jl")

include("ExteriorAlgebra/ExteriorAlgebra.jl")
6 changes: 3 additions & 3 deletions experimental/GModule/Brueckner.jl
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ function reps(K, G::Oscar.GAPGroup)
@hassert :BruecknerSQ 2 Oscar.GrpCoh.is_consistent(rh)
l = Oscar.GModuleFromGap.hom_base(r, rh)
@assert length(l) <= 1
Y = mat(action(r, preimage(ms, h^p)))
Y = matrix(action(r, preimage(ms, h^p)))
if length(l) == 1
# The representation extends from the subgroup,
# all these extensions are pairwise inequivalent.
Expand Down Expand Up @@ -128,7 +128,7 @@ function reps(K, G::Oscar.GAPGroup)
z = zero_matrix(K, dim(F), dim(F))
for j=1:p
Y = action(r, g)
m = mat(Y)
m = matrix(Y)
z[(j-1)*n+1:j*n, (j-1)*n+1:j*n] = m
push!(conjreps[j], hom(M, M, m))
g = preimage(ms, ms(g)^h)
Expand Down Expand Up @@ -282,7 +282,7 @@ function Oscar.dual(h::Map{<:AbstractAlgebra.FPModule{ZZRingElem}, <:AbstractAlg
A = domain(h)
B = codomain(h)
@assert is_free(A) && is_free(B)
return hom(B, A, transpose(mat(h)))
return hom(B, A, transpose(matrix(h)))
end

function coimage(h::Map)
Expand Down
20 changes: 10 additions & 10 deletions experimental/GModule/Cohomology.jl
Original file line number Diff line number Diff line change
Expand Up @@ -354,7 +354,7 @@ end

function Oscar.direct_sum(M::AbstractAlgebra.Generic.DirectSumModule{T}, N::AbstractAlgebra.Generic.DirectSumModule{T}, mp::Vector{AbstractAlgebra.Generic.ModuleHomomorphism{T}}) where T
@assert length(M.m) == length(mp) == length(N.m)
return hom(M, N, cat(map(mat, mp)..., dims = (1,2)))
return hom(M, N, cat(map(matrix, mp)..., dims = (1,2)))
end

function Oscar.direct_product(C::GModule...; task::Symbol = :none)
Expand Down Expand Up @@ -713,7 +713,7 @@ end
- issubset yields (for GrpAb) only true/ false, not the map
- is_subgroup cannot apply to modules
- quo does ONLY work if B is a direct submodule of A (Z-modules)
- mat or matrix is used to get "the matrix" from a hom
- matrix is used to get "the matrix" from a hom
- zero_hom/ zero_obj/ identity_hom is missing
- Janko-Module-Homs have different types, they probably need to
come under a common abstract type or be more selective
Expand Down Expand Up @@ -1591,7 +1591,7 @@ function Oscar.hom(V::Module, W::Module, v::MatElem; check::Bool = true)
return Generic.ModuleHomomorphism(V, W, v)
end
function Oscar.inv(M::Generic.ModuleHomomorphism)
return hom(codomain(M), domain(M), inv(mat(M)))
return hom(codomain(M), domain(M), inv(matrix(M)))
end

function Oscar.direct_product(M::Module...; task::Symbol = :none)
Expand All @@ -1608,18 +1608,18 @@ function Oscar.direct_product(M::Module...; task::Symbol = :none)
error("illegal task")
end

Base.:*(a::T, b::Generic.ModuleHomomorphism{T}) where {T} = hom(domain(b), codomain(b), a * mat(b))
Base.:*(a::T, b::Generic.ModuleIsomorphism{T}) where {T} = hom(domain(b), codomain(b), a * mat(b))
Base.:+(a::Generic.ModuleHomomorphism, b::Generic.ModuleHomomorphism) = hom(domain(a), codomain(a), mat(a) + mat(b))
Base.:-(a::Generic.ModuleHomomorphism, b::Generic.ModuleHomomorphism) = hom(domain(a), codomain(a), mat(a) - mat(b))
Base.:-(a::Generic.ModuleHomomorphism) = hom(domain(a), codomain(a), -mat(a))
Base.:*(a::T, b::Generic.ModuleHomomorphism{T}) where {T} = hom(domain(b), codomain(b), a * matrix(b))
Base.:*(a::T, b::Generic.ModuleIsomorphism{T}) where {T} = hom(domain(b), codomain(b), a * matrix(b))
Base.:+(a::Generic.ModuleHomomorphism, b::Generic.ModuleHomomorphism) = hom(domain(a), codomain(a), matrix(a) + matrix(b))
Base.:-(a::Generic.ModuleHomomorphism, b::Generic.ModuleHomomorphism) = hom(domain(a), codomain(a), matrix(a) - matrix(b))
Base.:-(a::Generic.ModuleHomomorphism) = hom(domain(a), codomain(a), -matrix(a))

function Oscar.mat(M::FreeModuleHom{FreeMod{QQAbElem}, FreeMod{QQAbElem}})
function Oscar.matrix(M::FreeModuleHom{FreeMod{QQAbElem}, FreeMod{QQAbElem}})
return M.matrix
end

function ==(a::Union{Generic.ModuleHomomorphism, Generic.ModuleIsomorphism}, b::Union{Generic.ModuleHomomorphism, Generic.ModuleIsomorphism})
return mat(a) == mat(b)
return matrix(a) == matrix(b)
end

function Oscar.id_hom(A::AbstractAlgebra.FPModule)
Expand Down
Loading

0 comments on commit f02c1fd

Please sign in to comment.