Blowups

present_finite_extension_ringMethod
  present_finite_extension_ring(F::Oscar.AffAlgHom)

Given a finite homomorphism F $:$ A $\rightarrow$ B of algebras of type <: Union{MPolyRing, MPolyQuoRing} over a field, return a presentation

\[A^r \rightarrow A^s\rightarrow B \rightarrow 0\]

of B as an A-module.

More precisely, return a tuple (gs, PM, sect), say, where

  • gs is a vector of polynomials representing generators for B as an A-module,
  • PM is an r $\times$ s-matrix of polynomials defining the map $A^r \rightarrow A^s$, and
  • sect is a function which gives rise to a section of the augmentation map $ A^s\rightarrow B$.
Note

The finiteness condition on F is checked by the function.

Note

The function is implemented so that the last element of gs is one(B).

Examples

julia> RA, (h,) = polynomial_ring(QQ, [:h]);

julia> A, _ = quo(RA, ideal(RA, [h^9]));

julia> RB, (k, l) = polynomial_ring(QQ, [:k, :l]);

julia> B, _ = quo(RB, ideal(RB, [k^3, l^3]));

julia> F = hom(A, B, [k+l])
Ring homomorphism
  from quotient of multivariate polynomial ring by ideal (h^9)
  to quotient of multivariate polynomial ring by ideal (k^3, l^3)
defined by
  h -> k + l

julia> gs, PM, sect = present_finite_extension_ring(F);

julia> gs
3-element Vector{QQMPolyRingElem}:
 l^2
 l
 1

julia> PM
3×3 Matrix{QQMPolyRingElem}:
 h^3     0       0
 -3*h^2  h^3     0
 3*h     -3*h^2  h^3

julia> sect(k*l)
3-element Vector{QQMPolyRingElem}:
 -1
 h
 0
julia> R, (x, y, z) = polynomial_ring(QQ, [:x, :y, :z]);

julia> I = ideal(R, [z^2-y^2*(y+1)]);

julia> A, _ = quo(R, I);

julia> B, (s,t) =  polynomial_ring(QQ, [:s, :t]);

julia> F = hom(A,B, [s, t^2-1, t*(t^2-1)])
Ring homomorphism
  from quotient of multivariate polynomial ring by ideal (-y^3 - y^2 + z^2)
  to multivariate polynomial ring in 2 variables over QQ
defined by
  x -> s
  y -> t^2 - 1
  z -> t^3 - t

julia> gs, PM, sect = present_finite_extension_ring(F);

julia> gs
2-element Vector{QQMPolyRingElem}:
 t
 1

julia> PM
2×2 Matrix{QQMPolyRingElem}:
 y   -z
 -z  y^2 + y

julia> sect(t)
2-element Vector{QQMPolyRingElem}:
 1
 0

julia> sect(one(B))
2-element Vector{QQMPolyRingElem}:
 0
 1

julia> sect(s)
2-element Vector{QQMPolyRingElem}:
 0
 x
julia> A, (a, b, c) = polynomial_ring(QQ, [:a, :b, :c]);

julia> R, (x, y, z) = polynomial_ring(QQ, [:x, :y, :z]);

julia> I = ideal(R, [x*y]);

julia> B, _ = quo(R, I);

julia> (x, y, z) = gens(B);

julia> F = hom(A, B, [x^2+z, y^2-1, z^3])
Ring homomorphism
  from multivariate polynomial ring in 3 variables over QQ
  to quotient of multivariate polynomial ring by ideal (x*y)
defined by
  a -> x^2 + z
  b -> y^2 - 1
  c -> z^3

julia> gs, PM, sect = present_finite_extension_ring(F);

julia> gs
2-element Vector{QQMPolyRingElem}:
 y
 1

julia> PM
2×2 Matrix{QQMPolyRingElem}:
 a^3 - c  0
 0        a^3*b + a^3 - b*c - c

julia> sect(y)
2-element Vector{QQMPolyRingElem}:
 1
 0

julia> sect(one(B))
2-element Vector{QQMPolyRingElem}:
 0
 1
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
blowupMethod
  blowup(i::AbstractVarietyMap; symbol::String="e")

Given an inclusion i$ : $ X $\rightarrow$ Y, say, return the blowup of Y along X.

More precisely, return a tuple (Bl, E, j), say, where

  • Bl, an abstract variety, is the blowup,
  • E, an abstract variety, is the exceptional divisor, and
  • j, a map of abstract varieties, is the inclusion of E into Bl.
Note

The resulting maps Bl $\rightarrow$ Y and E $\rightarrow$ X are obtained entering structure_map(Bl) and structure_map(E), respectively.

Examples

julia> P2 = abstract_projective_space(2)
AbstractVariety of dim 2

julia> P5 = abstract_projective_space(5, symbol = "H")
AbstractVariety of dim 5

julia> h = gens(P2)[1]
h

julia> H = gens(P5)[1]
H

julia> i = hom(P2, P5, [2*h])
AbstractVarietyMap from AbstractVariety of dim 2 to AbstractVariety of dim 5

julia> Bl, E, j = blowup(i)
(AbstractVariety of dim 5, AbstractVariety of dim 4, AbstractVarietyMap from AbstractVariety of dim 4 to AbstractVariety of dim 5)

julia> e, HBl = gens(chow_ring(Bl))
2-element Vector{MPolyQuoRingElem{MPolyDecRingElem{QQFieldElem, QQMPolyRingElem}}}:
 e
 H

julia> integral((6*HBl-2*e)^5)
3264
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
blowup_pointsMethod
function blowup_points(X::AbstractVariety, n::Int; symbol::String = "e")

Return the blowup of X at n points.

Examples

julia> P2 = abstract_projective_space(2)
AbstractVariety of dim 2

julia> Bl = blowup_points(P2, 1)
AbstractVariety of dim 2

julia> chow_ring(Bl)
Quotient
  of multivariate polynomial ring in 2 variables over QQ graded by
    e -> [1]
    h -> [1]
  by ideal (e*h, e^2 + h^2)
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source