Ext group¶
This module implements the ExtGroup and ExtGroupElement classes used for building extensions of vector bundles.
AUTHORS:
_Mickaël Montessinos: initial implementation
- class vector_bundle.ext_group.ExtGroup(left, right, precompute_basis=False)¶
Bases:
SageObject
The group of extensions of
left
byright
.The group
is
. Its elements may be represented as matrices of infinite répartitions lying in
or as vectors of length
self.dim()
with coefficients in the coefficient field, representing linear forms on, where
is the canonical bundle of the function field of
left
andright
The two representations are related via Serre duality.If
precompute_basis
is set toTrue
, a basis of répartition matrices is computed. Its element represent the linear formsvector([0,...,0,1,0,...,0])
. Otherwise, linear forms are converted to elements of theon the fly. You should set
precompute_basis
toTrue
only if you plan to create several extensions with this group.INPUT:
left
– VectorBundleright
– VectorBundle; must have the same function field as leftprecompute_basis
– boolean
EXAMPLES
sage: from vector_bundle import VectorBundle, trivial_bundle sage: F.<x> = FunctionField(GF(3)) sage: triv = trivial_bundle(F) sage: triv.extension_group(triv) Extension group of Vector bundle of rank 1 over Rational function field in x over Finite Field of size 3 by Vector bundle of rank 1 over Rational function field in x over Finite Field of size 3.
- basis()¶
Return a basis of
group. Its element are matrices of infinite répartitions represented by field elements.
Computes and stores the basis if it was not precomputed yet.
EXAMPLES
sage: from vector_bundle import VectorBundle sage: F.<x> = FunctionField(GF(11)) sage: R.<y> = F[] sage: K.<y> = F.extension(y^2 - x^5 - 1) sage: ksi = VectorBundle(K, K.places_finite()[0].divisor()) sage: ext = ksi.extension_group(ksi.dual()); ext.basis() [[(x^9/(x^10 + 2*x^5 + 1))*y], [(x^3/(x^5 + 1))*y], [x^6/(x^5 + 1)]]
- dim()¶
Return the dimension of the extension group as a vector space over the base coefficient field
EXAMPLES
sage: from vector_bundle import VectorBundle sage: F.<x> = FunctionField(GF(11)) sage: R.<y> = F[] sage: K.<y> = F.extension(y^2 - x^5 - 1) sage: ksi = VectorBundle(K, K.places_finite()[0].divisor()) sage: ext = ksi.extension_group(ksi.dual()); ext.dim() 3
- dual_basis()¶
This is the same as
self.dual_bundle().h0()
The output basis is dual toself.basis()
under Serre duality.EXAMPLES
sage: from vector_bundle import VectorBundle sage: F.<x> = FunctionField(GF(11)) sage: R.<y> = F[] sage: K.<y> = F.extension(y^2 - x^5 - 1) sage: ksi = VectorBundle(K, K.places_finite()[0].divisor()) sage: ext = ksi.extension_group(ksi.dual()); ext.dual_basis() [[x^4/(x^5 + 6)], [x^5/(x^5 + 6)], [(x^2/(x^5 + 6))*y + 10*x^2/(x^5 + 6)]]
- dual_bundle()¶
Return the dual bundle of the
bundle. This bundle is
, where
is a canonical line bundle of
.
EXAMPLES
sage: from vector_bundle import VectorBundle sage: F.<x> = FunctionField(GF(11)) sage: R.<y> = F[] sage: K.<y> = F.extension(y^2 - x^5 - 1) sage: ksi = VectorBundle(K, K.places_finite()[0].divisor()) sage: ext = ksi.extension_group(ksi.dual()); ext.dual_bundle() Homomorphism bundle from Vector bundle of rank 1 over Function field in y defined by y^2 + 10*x^5 + 10 to Vector bundle of rank 1 over Function field in y defined by y^2 + 10*x^5 + 10
- extension(ext=None)¶
Return the extension of
self.left()
byself.right()
encoded byext
.ext
can be a matrix of elements ofself._function_field
which represents the constant value over the infinite places of a répartition matrix with support at infinity representing an element of. Such an element encodes an extension
:
ext
can also be a vector of lengthrepresenting an extension in the basis of the Ext vector space.
By default,
ext
is chosen as any non trivial extension.EXAMPLES
sage: from vector_bundle import VectorBundle, trivial_bundle sage: F.<x> = FunctionField(GF(11)) sage: R.<y> = F[] sage: K.<y> = F.extension(y^2 - x^3 - x) sage: triv = trivial_bundle(K) sage: ext = triv.extension_group(triv) sage: V = ext.extension() sage: V.rank() 2 sage: V.determinant() == triv True sage: V.h0() [(1, 0)] sage: V.end().h0() [ [0 1] [1 0] [0 0], [0 1] ]
- left()¶
Return the left vector bundle of
self
.EXAMPLES
sage: from vector_bundle import VectorBundle sage: F.<x> = FunctionField(GF(3)) sage: L1 = VectorBundle(F, x.zeros()[0].divisor()) sage: L2 = VectorBundle(F, x.poles()[0].divisor()) sage: ext = L1.extension_group(L2); ext.left() == L1 True
- right()¶
Return the right vector bundle of
self
.EXAMPLES
sage: from vector_bundle import VectorBundle sage: F.<x> = FunctionField(GF(3)) sage: L1 = VectorBundle(F, x.zeros()[0].divisor()) sage: L2 = VectorBundle(F, x.poles()[0].divisor()) sage: ext = L1.extension_group(L2); ext.right() == L2 True