Associated Graded Algebras To Filtered Algebras¶
AUTHORS:
 Travis Scrimshaw (20141008): Initial version

class
sage.algebras.associated_graded.
AssociatedGradedAlgebra
(A, category=None)¶ Bases:
sage.combinat.free_module.CombinatorialFreeModule
The associated graded algebra/module \(\operatorname{gr} A\) of a filtered algebra/module with basis \(A\).
Let \(A\) be a filtered module over a commutative ring \(R\). Let \((F_i)_{i \in I}\) be the filtration of \(A\), with \(I\) being a totally ordered set. Define
\[G_i = F_i / \sum_{j < i} F_j\]for every \(i \in I\), and then
\[\operatorname{gr} A = \bigoplus_{i \in I} G_i.\]There are canonical projections \(p_i : F_i \to G_i\) for every \(i \in I\). Moreover \(\operatorname{gr} A\) is naturally a graded \(R\)module with \(G_i\) being the \(i\)th graded component. This graded \(R\)module is known as the associated graded module (or, for short, just graded module) of \(A\).
Now, assume that \(A\) (endowed with the filtration \((F_i)_{i \in I}\)) is not just a filtered \(R\)module, but also a filtered \(R\)algebra. Let \(u \in G_i\) and \(v \in G_j\), and let \(u' \in F_i\) and \(v' \in F_j\) be lifts of \(u\) and \(v\), respectively (so that \(u = p_i(u')\) and \(v = p_j(v')\)). Then, we define a multiplication \(*\) on \(\operatorname{gr} A\) (not to be mistaken for the multiplication of the original algebra \(A\)) by
\[u * v = p_{i+j} (u' v').\]The associated graded algebra (or, for short, just graded algebra) of \(A\) is the graded algebra \(\operatorname{gr} A\) (endowed with this multiplication).
Now, assume that \(A\) is a filtered \(R\)algebra with basis. Let \((b_x)_{x \in X}\) be the basis of \(A\), and consider the partition \(X = \bigsqcup_{i \in I} X_i\) of the set \(X\), which is part of the data of a filtered algebra with basis. We know (see
FilteredModulesWithBasis
) that \(A\) (being a filtered \(R\)module with basis) is canonically (when the basis is considered to be part of the data) isomorphic to \(\operatorname{gr} A\) as an \(R\)module. Therefore the \(k\)th graded component \(G_k\) can be identified with the span of \((b_x)_{x \in X_k}\), or equivalently the \(k\)th homogeneous component of \(A\). Suppose that \(u' v' = \sum_{k \leq i+j} m_k\) where \(m_k \in G_k\) (which has been identified with the \(k\)th homogeneous component of \(A\)). Then \(u * v = m_{i+j}\). We also note that the choice of identification of \(G_k\) with the \(k\)th homogeneous component of \(A\) depends on the given basis.The basis \((b_x)_{x \in X}\) of \(A\) gives rise to a basis of \(\operatorname{gr} A\). This latter basis is still indexed by the elements of \(X\), and consists of the images of the \(b_x\) under the \(R\)module isomorphism from \(A\) to \(\operatorname{gr} A\). It makes \(\operatorname{gr} A\) into a graded \(R\)algebra with basis.
In this class, the \(R\)module isomorphism from \(A\) to \(\operatorname{gr} A\) is implemented as
to_graded_conversion()
and also as the default conversion from \(A\) to \(\operatorname{gr} A\). Its inverse map is implemented asfrom_graded_conversion()
. The projection \(p_i : F_i \to G_i\) is implemented asprojection()
(i)
.INPUT:
A
– a filtered module (or algebra) with basis
OUTPUT:
The associated graded module of \(A\), if \(A\) is just a filtered \(R\)module. The associated graded algebra of \(A\), if \(A\) is a filtered \(R\)algebra.
EXAMPLES:
Associated graded module of a filtered module:
sage: A = Modules(QQ).WithBasis().Filtered().example() sage: grA = A.graded_algebra() sage: grA.category() Category of graded vector spaces with basis over Rational Field sage: x = A.basis()[Partition([3,2,1])] sage: grA(x) Bbar[[3, 2, 1]]
Associated graded algebra of a filtered algebra:
sage: A = Algebras(QQ).WithBasis().Filtered().example() sage: grA = A.graded_algebra() sage: grA.category() Category of graded algebras with basis over Rational Field sage: x,y,z = [grA.algebra_generators()[s] for s in ['x','y','z']] sage: x bar(U['x']) sage: y * x + z bar(U['x']*U['y']) + bar(U['z']) sage: A(y) * A(x) + A(z) U['x']*U['y']
We note that the conversion between
A
andgrA
is the canonicalQQ
module isomorphism stemming from the fact that the underlyingQQ
modules ofA
andgrA
are isomorphic:sage: grA(A.an_element()) bar(U['x']^2*U['y']^2*U['z']^3) + 2*bar(U['x']) + 3*bar(U['y']) + bar(1) sage: elt = A.an_element() + A.algebra_generators()['x'] + 2 sage: grelt = grA(elt); grelt bar(U['x']^2*U['y']^2*U['z']^3) + 3*bar(U['x']) + 3*bar(U['y']) + 3*bar(1) sage: A(grelt) == elt True
Todo
The algebra
A
must currently be an instance of (a subclass of)CombinatorialFreeModule
. This should work with any filtered algebra with a basis.Todo
Implement a version of associated graded algebra for filtered algebras without a distinguished basis.
REFERENCES:

algebra_generators
()¶ Return the algebra generators of
self
.This assumes that the algebra generators of \(A\) provided by its
algebra_generators
method are homogeneous.EXAMPLES:
sage: A = Algebras(QQ).WithBasis().Filtered().example() sage: grA = A.graded_algebra() sage: grA.algebra_generators() Finite family {'x': bar(U['x']), 'y': bar(U['y']), 'z': bar(U['z'])}

degree_on_basis
(x)¶ Return the degree of the basis element indexed by
x
.EXAMPLES:
sage: A = Algebras(QQ).WithBasis().Filtered().example() sage: grA = A.graded_algebra() sage: all(A.degree_on_basis(x) == grA.degree_on_basis(x) ....: for g in grA.algebra_generators() for x in g.support()) True

gen
(*args, **kwds)¶ Return a generator of
self
.EXAMPLES:
sage: A = Algebras(QQ).WithBasis().Filtered().example() sage: grA = A.graded_algebra() sage: grA.gen('x') bar(U['x'])

one_basis
()¶ Return the basis index of the element \(1\) of \(\operatorname{gr} A\).
This assumes that the unity \(1\) of \(A\) belongs to \(F_0\).
EXAMPLES:
sage: A = Algebras(QQ).WithBasis().Filtered().example() sage: grA = A.graded_algebra() sage: grA.one_basis() 1

product_on_basis
(x, y)¶ Return the product on basis elements given by the indices
x
andy
.EXAMPLES:
sage: A = Algebras(QQ).WithBasis().Filtered().example() sage: grA = A.graded_algebra() sage: G = grA.algebra_generators() sage: x,y,z = G['x'], G['y'], G['z'] sage: x * y # indirect doctest bar(U['x']*U['y']) sage: y * x bar(U['x']*U['y']) sage: z * y * x bar(U['x']*U['y']*U['z'])