Multiple \(\ZZ\)-Graded Filtrations of a Single Vector Space¶
See filtered_vector_space
for simply graded vector spaces. This
module implements the analog but for a collection of filtrations of
the same vector space.
The basic syntax to use it is a dictionary whose keys are some
arbitrary indexing set and values are
FilteredVectorSpace()
sage: F1 = FilteredVectorSpace(2, 1)
sage: F2 = FilteredVectorSpace({0:[(1,0)], 2:[(2,3)]})
sage: V = MultiFilteredVectorSpace({'first':F1, 'second':F2})
sage: V
Filtrations
first: QQ^2 >= QQ^2 >= 0 >= 0
second: QQ^2 >= QQ^1 >= QQ^1 >= 0
sage: V.index_set() # random output
{'second', 'first'}
sage: sorted(V.index_set())
['first', 'second']
sage: V.get_filtration('first')
QQ^2 >= 0
sage: V.get_degree('second', 1)
Vector space of degree 2 and dimension 1 over Rational Field
Basis matrix:
[ 1 3/2]
-
sage.modules.multi_filtered_vector_space.
MultiFilteredVectorSpace
(arg, base_ring=None, check=True)¶ Contstruct a multi-filtered vector space.
INPUT:
arg
– either a non-empty dictionary of filtrations or an integer. The latter is interpreted as the vector space dimension, and the indexing set of the filtrations is empty.base_ring
– a field (optional, default'None'
). The base field of the vector space. Must be a field. If not specified, the base field is derived from the filtrations.check
– boolean (optional; default:True
). Whether to perform consistency checks.
EXAMPLES:
sage: MultiFilteredVectorSpace(3, QQ) Unfiltered QQ^3 sage: F1 = FilteredVectorSpace(2, 1) sage: F2 = FilteredVectorSpace(2, 3) sage: V = MultiFilteredVectorSpace({1:F1, 2:F2}); V Filtrations 1: QQ^2 >= 0 >= 0 >= 0 2: QQ^2 >= QQ^2 >= QQ^2 >= 0
-
class
sage.modules.multi_filtered_vector_space.
MultiFilteredVectorSpace_class
(base_ring, dim, filtrations, check=True)¶ Bases:
sage.modules.free_module.FreeModule_ambient_field
Python constructor.
Warning
Use
MultiFilteredVectorSpace()
to construct multi-filtered vector spaces.INPUT:
base_ring
– a ring. the base ring.dim
– integer. The dimension of the ambient vector space.filtrations
– a dictionary whose values are filtrations.check
– boolean (optional). Whether to perform additional consistency checks.
EXAMPLES:
sage: F1 = FilteredVectorSpace(2, 1) sage: F2 = FilteredVectorSpace(2, 3) sage: V = MultiFilteredVectorSpace({1:F1, 2:F2}); V Filtrations 1: QQ^2 >= 0 >= 0 >= 0 2: QQ^2 >= QQ^2 >= QQ^2 >= 0
-
ambient_vector_space
()¶ Return the ambient (unfiltered) vector space.
OUTPUT:
A vector space.
EXAMPLES:
sage: V = FilteredVectorSpace(2, 0) sage: W = FilteredVectorSpace(2, 2) sage: F = MultiFilteredVectorSpace({'a':V, 'b':W}) sage: F.ambient_vector_space() Vector space of dimension 2 over Rational Field
-
change_ring
(base_ring)¶ Return the same multi-filtration over a different base ring.
INPUT:
base_ring
– a ring. The new base ring.
OUTPUT:
This method returns a new multi-filtered vector space whose subspaces are defined by the same generators but over a different base ring.
EXAMPLES:
sage: V = FilteredVectorSpace(2, 0) sage: W = FilteredVectorSpace(2, 2) sage: F = MultiFilteredVectorSpace({'a':V, 'b':W}); F Filtrations a: QQ^2 >= 0 >= 0 >= 0 b: QQ^2 >= QQ^2 >= QQ^2 >= 0 sage: F.change_ring(RDF) Filtrations a: RDF^2 >= 0 >= 0 >= 0 b: RDF^2 >= RDF^2 >= RDF^2 >= 0 sage: MultiFilteredVectorSpace(3, base_ring=QQ).change_ring(RR) Unfiltered RR^3
-
direct_sum
(other)¶ Return the direct sum.
INPUT:
other
– a multi-filtered vector space with the sameindex_set()
.
OUTPUT:
The direct sum as a multi-filtered vector space. See
direct_sum()
.EXAMPLES:
sage: F1 = FilteredVectorSpace(2, 1) sage: F2 = FilteredVectorSpace(1, 3) + FilteredVectorSpace(1,0) sage: V = MultiFilteredVectorSpace({'a':F1, 'b':F2}) sage: G1 = FilteredVectorSpace(1, 1) sage: G2 = FilteredVectorSpace(1, 3) sage: W = MultiFilteredVectorSpace({'a':G1, 'b':G2}) sage: V.direct_sum(W) Filtrations a: QQ^3 >= QQ^3 >= 0 >= 0 >= 0 b: QQ^3 >= QQ^2 >= QQ^2 >= QQ^2 >= 0 sage: V + W # syntactic sugar Filtrations a: QQ^3 >= QQ^3 >= 0 >= 0 >= 0 b: QQ^3 >= QQ^2 >= QQ^2 >= QQ^2 >= 0
-
dual
()¶ Return the dual.
OUTPUT:
The dual as a multi-filtered vector space. See
dual()
.EXAMPLES:
sage: F1 = FilteredVectorSpace(2, 1) sage: F2 = FilteredVectorSpace(1, 3) + FilteredVectorSpace(1,0) sage: V = MultiFilteredVectorSpace({'a':F1, 'b':F2}) sage: V.dual() Filtrations a: QQ^2 >= QQ^2 >= QQ^2 >= 0 >= 0 b: QQ^2 >= QQ^1 >= QQ^1 >= QQ^1 >= 0
-
exterior_power
(n)¶ Return the \(n\)-th graded exterior power.
INPUT:
n
– integer. Exterior product of how many copies ofself
.
OUTPUT:
The exterior power as a multi-filtered vector space. See
exterior_power()
.EXAMPLES:
sage: F1 = FilteredVectorSpace(2, 1) sage: F2 = FilteredVectorSpace(1, 3) + FilteredVectorSpace(1,0) sage: V = MultiFilteredVectorSpace({'a':F1, 'b':F2}) sage: V.exterior_power(2) # long time Filtrations a: QQ^1 >= 0 >= 0 b: QQ^1 >= QQ^1 >= 0
-
get_degree
(key, deg)¶ Return one filtered vector space.
INPUT:
key
– an element of theindex_set()
. Specifies which filtration.d
– Integer. The desired degree of the filtration.
OUTPUT:
The vector space of degree
deg
in the filtration indexed bykey
as subspace of the ambient space.EXAMPLES:
sage: F1 = FilteredVectorSpace(2, 1) sage: F2 = FilteredVectorSpace(2, 3) sage: V = MultiFilteredVectorSpace({1:F1, 2:F2}) sage: V.get_degree(2, 0) Vector space of degree 2 and dimension 2 over Rational Field Basis matrix: [1 0] [0 1]
-
get_filtration
(key)¶ Return the filtration indexed by
key
.OUTPUT:
A filtered vector space.
EXAMPLES:
sage: F1 = FilteredVectorSpace(2, 1) sage: F2 = FilteredVectorSpace(2, 3) sage: V = MultiFilteredVectorSpace({1:F1, 2:F2}) sage: V.get_filtration(2) QQ^2 >= 0
-
graded
(key, deg)¶ Return the associated graded vector space.
INPUT:
key
– an element of theindex_set()
. Specifies which filtration.d
– Integer. The desired degree of the filtration.
OUTPUT:
The quotient \(G_d = F_d / F_{d+1}\) of the filtration \(F\) corresponding to
key
.EXAMPLES:
sage: F1 = FilteredVectorSpace(2, 1) sage: F2 = FilteredVectorSpace(1, 3) + FilteredVectorSpace(1,0) sage: V = MultiFilteredVectorSpace({1:F1, 2:F2}) sage: V.graded(2, 3) Vector space quotient V/W of dimension 1 over Rational Field where V: Vector space of degree 2 and dimension 1 over Rational Field Basis matrix: [1 0] W: Vector space of degree 2 and dimension 0 over Rational Field Basis matrix: []
-
index_set
()¶ Return the allowed indices for the different filtrations.
OUTPUT:
Set.
EXAMPLES:
sage: F1 = FilteredVectorSpace(2, 1) sage: F2 = FilteredVectorSpace(2, 3) sage: V = MultiFilteredVectorSpace({1:F1, 2:F2}) sage: V.index_set() {1, 2}
-
is_constant
()¶ Return whether the multi-filtration is constant.
OUTPUT:
Boolean. Whether the each filtration is constant, see
is_constant()
.EXAMPLES:
sage: V = FilteredVectorSpace(2, 0) sage: W = FilteredVectorSpace(2, 2) sage: F = MultiFilteredVectorSpace({'a':V, 'b':W}); F Filtrations a: QQ^2 >= 0 >= 0 >= 0 b: QQ^2 >= QQ^2 >= QQ^2 >= 0 sage: F.is_constant() False
-
is_exhaustive
()¶ Return whether the multi-filtration is exhaustive.
A filtration \(\{F_d\}\) in an ambient vector space \(V\) is exhaustive if \(\cup F_d = V\). See also
is_separating()
.OUTPUT:
Boolean. Whether each filtration is constant, see
is_exhaustive()
.EXAMPLES:
sage: F1 = FilteredVectorSpace(2, 1) sage: F2 = FilteredVectorSpace(2, 3) sage: V = MultiFilteredVectorSpace({1:F1, 2:F2}) sage: V.is_exhaustive() True
-
is_separating
()¶ Return whether the multi-filtration is separating.
A filtration \(\{F_d\}\) in an ambient vector space \(V\) is exhaustive if \(\cap F_d = 0\). See also
is_exhaustive()
.OUTPUT:
Boolean. Whether each filtration is separating, see
is_separating()
.EXAMPLES:
sage: F1 = FilteredVectorSpace(2, 1) sage: F2 = FilteredVectorSpace(2, 3) sage: V = MultiFilteredVectorSpace({1:F1, 2:F2}) sage: V.is_separating() True
-
max_degree
()¶ Return the highest degree of the filtration.
OUTPUT:
Integer or minus infinity. The smallest degree of the filtrations such that the filtrations are constant to the right.
EXAMPLES:
sage: F1 = FilteredVectorSpace(2, 1) sage: F2 = FilteredVectorSpace(2, 3) sage: V = MultiFilteredVectorSpace({1:F1, 2:F2}) sage: V.max_degree() 4
-
min_degree
()¶ Return the lowest degree of the filtration.
OUTPUT:
Integer or plus infinity. The largest degree \(d\) of the (descending) filtrations such that, for each individual filtration, the filtered vector space \(F_d\) still equal to \(F_{-\infty}\).
EXAMPLES:
sage: F1 = FilteredVectorSpace(2, 1) sage: F2 = FilteredVectorSpace(2, 3) sage: V = MultiFilteredVectorSpace({1:F1, 2:F2}) sage: V.min_degree() 1
-
random_deformation
(epsilon=None)¶ Return a random deformation
INPUT:
epsilon
– a number in the base ring.
OUTPUT:
A new multi-filtered vector space where the generating vectors of subspaces are moved by
epsilon
times a random vector.EXAMPLES:
sage: F1 = FilteredVectorSpace(2, 1) sage: F2 = FilteredVectorSpace(1, 3) + FilteredVectorSpace(1,0) sage: V = MultiFilteredVectorSpace({'a':F1, 'b':F2}) sage: V.get_degree('b',1) Vector space of degree 2 and dimension 1 over Rational Field Basis matrix: [1 0] sage: V.random_deformation(1/100).get_degree('b',1) Vector space of degree 2 and dimension 1 over Rational Field Basis matrix: [ 1 8/1197]
-
shift
(deg)¶ Return a filtered vector space with degrees shifted by a constant.
OUTPUT:
The shift of
self
. Seeshift()
.EXAMPLES:
sage: F1 = FilteredVectorSpace(2, 1) sage: F2 = FilteredVectorSpace(1, 3) + FilteredVectorSpace(1,0) sage: V = MultiFilteredVectorSpace({'a':F1, 'b':F2}) sage: V.support() (0, 1, 3) sage: V.shift(-5).support() (-5, -4, -2)
-
support
()¶ Return the degrees in which there are non-trivial generators.
OUTPUT:
A tuple of integers (and plus infinity) in ascending order. The last entry is plus infinity if and only if the filtration is not separating (see
is_separating()
).EXAMPLES:
sage: F1 = FilteredVectorSpace(2, 1) sage: F2 = FilteredVectorSpace(2, 3) sage: V = MultiFilteredVectorSpace({1:F1, 2:F2}) sage: V.support() (1, 3)
-
symmetric_power
(n)¶ Return the \(n\)-th graded symmetric power.
INPUT:
n
– integer. Symmetric product of how many copies ofself
.
OUTPUT:
The symmetric power as a multi-filtered vector space. See
symmetric_power()
.EXAMPLES:
sage: F1 = FilteredVectorSpace(2, 1) sage: F2 = FilteredVectorSpace(1, 3) + FilteredVectorSpace(1,0) sage: V = MultiFilteredVectorSpace({'a':F1, 'b':F2}) sage: V.symmetric_power(2) Filtrations a: QQ^3 >= QQ^3 >= QQ^3 >= 0 >= 0 >= 0 >= 0 >= 0 b: QQ^3 >= QQ^2 >= QQ^2 >= QQ^2 >= QQ^1 >= QQ^1 >= QQ^1 >= 0
-
tensor_product
(other)¶ Return the graded tensor product.
INPUT:
other
– a multi-filtered vector space with the sameindex_set()
.
OUTPUT:
The tensor product of
self
andother
as a multi-filtered vector space. Seetensor_product()
.EXAMPLES:
sage: F1 = FilteredVectorSpace(2, 1) sage: F2 = FilteredVectorSpace(1, 3) + FilteredVectorSpace(1,0) sage: V = MultiFilteredVectorSpace({'a':F1, 'b':F2}) sage: G1 = FilteredVectorSpace(1, 1) sage: G2 = FilteredVectorSpace(1, 3) sage: W = MultiFilteredVectorSpace({'a':G1, 'b':G2}) sage: V.tensor_product(W) Filtrations a: QQ^2 >= 0 >= 0 >= 0 >= 0 >= 0 b: QQ^2 >= QQ^2 >= QQ^1 >= QQ^1 >= QQ^1 >= 0 sage: V * W # syntactic sugar Filtrations a: QQ^2 >= 0 >= 0 >= 0 >= 0 >= 0 b: QQ^2 >= QQ^2 >= QQ^1 >= QQ^1 >= QQ^1 >= 0
-
wedge
(n)¶ Return the \(n\)-th graded exterior power.
INPUT:
n
– integer. Exterior product of how many copies ofself
.
OUTPUT:
The exterior power as a multi-filtered vector space. See
exterior_power()
.EXAMPLES:
sage: F1 = FilteredVectorSpace(2, 1) sage: F2 = FilteredVectorSpace(1, 3) + FilteredVectorSpace(1,0) sage: V = MultiFilteredVectorSpace({'a':F1, 'b':F2}) sage: V.exterior_power(2) # long time Filtrations a: QQ^1 >= 0 >= 0 b: QQ^1 >= QQ^1 >= 0