Non-unital non-associative algebras#
- class sage.categories.magmatic_algebras.MagmaticAlgebras(base, name=None)[source]#
Bases:
Category_over_base_ring
The category of algebras over a given base ring.
An algebra over a ring \(R\) is a module over \(R\) endowed with a bilinear multiplication.
Warning
MagmaticAlgebras
will eventually replace the currentAlgebras
for consistency with e.g. Wikipedia article Algebras which assumes neither associativity nor the existence of a unit (see Issue #15043).EXAMPLES:
sage: from sage.categories.magmatic_algebras import MagmaticAlgebras sage: C = MagmaticAlgebras(ZZ); C Category of magmatic algebras over Integer Ring sage: C.super_categories() [Category of additive commutative additive associative additive unital distributive magmas and additive magmas, Category of modules over Integer Ring]
>>> from sage.all import * >>> from sage.categories.magmatic_algebras import MagmaticAlgebras >>> C = MagmaticAlgebras(ZZ); C Category of magmatic algebras over Integer Ring >>> C.super_categories() [Category of additive commutative additive associative additive unital distributive magmas and additive magmas, Category of modules over Integer Ring]
- Associative[source]#
alias of
AssociativeAlgebras
- class ParentMethods[source]#
Bases:
object
- algebra_generators()[source]#
Return a family of generators of this algebra.
EXAMPLES:
sage: F = AlgebrasWithBasis(QQ).example(); F # needs sage.combinat sage.modules An example of an algebra with basis: the free algebra on the generators ('a', 'b', 'c') over Rational Field sage: F.algebra_generators() # needs sage.combinat sage.modules Family (B[word: a], B[word: b], B[word: c])
>>> from sage.all import * >>> F = AlgebrasWithBasis(QQ).example(); F # needs sage.combinat sage.modules An example of an algebra with basis: the free algebra on the generators ('a', 'b', 'c') over Rational Field >>> F.algebra_generators() # needs sage.combinat sage.modules Family (B[word: a], B[word: b], B[word: c])
- Unital[source]#
alias of
UnitalAlgebras
- class WithBasis(base_category)[source]#
Bases:
CategoryWithAxiom_over_base_ring
- class FiniteDimensional(base_category)[source]#
Bases:
CategoryWithAxiom_over_base_ring
- class ParentMethods[source]#
Bases:
object
- derivations_basis()[source]#
Return a basis for the Lie algebra of derivations of
self
as matrices.A derivation \(D\) of an algebra is an endomorphism of \(A\) such that
\[D(ab) = D(a) b + a D(b)\]for all \(a, b \in A\). The set of all derivations form a Lie algebra.
EXAMPLES:
We construct the Heisenberg Lie algebra as a multiplicative algebra:
sage: # needs sage.combinat sage.modules sage: p_mult = matrix([[0,0,0], [0,0,-1], [0,0,0]]) sage: q_mult = matrix([[0,0,1], [0,0,0], [0,0,0]]) sage: A = algebras.FiniteDimensional(QQ, ....: [p_mult, q_mult, matrix(QQ, 3, 3)], 'p,q,z') sage: A.inject_variables() Defining p, q, z sage: p * q z sage: q * p -z sage: A.derivations_basis() ( [1 0 0] [0 1 0] [0 0 0] [0 0 0] [0 0 0] [0 0 0] [0 0 0] [0 0 0] [1 0 0] [0 1 0] [0 0 0] [0 0 0] [0 0 1], [0 0 0], [0 0 0], [0 0 1], [1 0 0], [0 1 0] )
>>> from sage.all import * >>> # needs sage.combinat sage.modules >>> p_mult = matrix([[Integer(0),Integer(0),Integer(0)], [Integer(0),Integer(0),-Integer(1)], [Integer(0),Integer(0),Integer(0)]]) >>> q_mult = matrix([[Integer(0),Integer(0),Integer(1)], [Integer(0),Integer(0),Integer(0)], [Integer(0),Integer(0),Integer(0)]]) >>> A = algebras.FiniteDimensional(QQ, ... [p_mult, q_mult, matrix(QQ, Integer(3), Integer(3))], 'p,q,z') >>> A.inject_variables() Defining p, q, z >>> p * q z >>> q * p -z >>> A.derivations_basis() ( [1 0 0] [0 1 0] [0 0 0] [0 0 0] [0 0 0] [0 0 0] [0 0 0] [0 0 0] [1 0 0] [0 1 0] [0 0 0] [0 0 0] [0 0 1], [0 0 0], [0 0 0], [0 0 1], [1 0 0], [0 1 0] )
We construct another example using the exterior algebra and verify we obtain a derivation:
sage: # needs sage.combinat sage.modules sage: A = algebras.Exterior(QQ, 1) sage: A.derivations_basis() ( [0 0] [0 1] ) sage: D = A.module_morphism(matrix=A.derivations_basis()[0], ....: codomain=A) sage: one, e = A.basis() sage: all(D(a*b) == D(a) * b + a * D(b) ....: for a in A.basis() for b in A.basis()) True
>>> from sage.all import * >>> # needs sage.combinat sage.modules >>> A = algebras.Exterior(QQ, Integer(1)) >>> A.derivations_basis() ( [0 0] [0 1] ) >>> D = A.module_morphism(matrix=A.derivations_basis()[Integer(0)], ... codomain=A) >>> one, e = A.basis() >>> all(D(a*b) == D(a) * b + a * D(b) ... for a in A.basis() for b in A.basis()) True
REFERENCES:
- class ParentMethods[source]#
Bases:
object
- algebra_generators()[source]#
Return generators for this algebra.
This default implementation returns the basis of this algebra.
OUTPUT: a family
EXAMPLES:
sage: D4 = DescentAlgebra(QQ, 4).B() # needs sage.combinat sage.groups sage.modules sage: D4.algebra_generators() # needs sage.combinat sage.groups sage.modules Lazy family (...)_{i in Compositions of 4} sage: R.<x> = ZZ[] sage: P = PartitionAlgebra(1, x, R) # needs sage.combinat sage.modules sage: P.algebra_generators() # needs sage.combinat sage.modules Lazy family (Term map from Partition diagrams of order 1 to Partition Algebra of rank 1 with parameter x over Univariate Polynomial Ring in x over Integer Ring(i))_{i in Partition diagrams of order 1}
>>> from sage.all import * >>> D4 = DescentAlgebra(QQ, Integer(4)).B() # needs sage.combinat sage.groups sage.modules >>> D4.algebra_generators() # needs sage.combinat sage.groups sage.modules Lazy family (...)_{i in Compositions of 4} >>> R = ZZ['x']; (x,) = R._first_ngens(1) >>> P = PartitionAlgebra(Integer(1), x, R) # needs sage.combinat sage.modules >>> P.algebra_generators() # needs sage.combinat sage.modules Lazy family (Term map from Partition diagrams of order 1 to Partition Algebra of rank 1 with parameter x over Univariate Polynomial Ring in x over Integer Ring(i))_{i in Partition diagrams of order 1}
- product()[source]#
The product of the algebra, as per
Magmas.ParentMethods.product()
By default, this is implemented using one of the following methods, in the specified order:
EXAMPLES:
sage: A = AlgebrasWithBasis(QQ).example() # needs sage.combinat sage.modules sage: a, b, c = A.algebra_generators() # needs sage.combinat sage.modules sage: A.product(a + 2*b, 3*c) # needs sage.combinat sage.modules 3*B[word: ac] + 6*B[word: bc]
>>> from sage.all import * >>> A = AlgebrasWithBasis(QQ).example() # needs sage.combinat sage.modules >>> a, b, c = A.algebra_generators() # needs sage.combinat sage.modules >>> A.product(a + Integer(2)*b, Integer(3)*c) # needs sage.combinat sage.modules 3*B[word: ac] + 6*B[word: bc]
- product_on_basis(i, j)[source]#
The product of the algebra on the basis (optional).
INPUT:
i
,j
– the indices of two elements of the basis ofself
Return the product of the two corresponding basis elements indexed by
i
andj
.If implemented,
product()
is defined from it by bilinearity.EXAMPLES:
sage: A = AlgebrasWithBasis(QQ).example() # needs sage.combinat sage.modules sage: Word = A.basis().keys() # needs sage.combinat sage.modules sage: A.product_on_basis(Word("abc"), Word("cba")) # needs sage.combinat sage.modules B[word: abccba]
>>> from sage.all import * >>> A = AlgebrasWithBasis(QQ).example() # needs sage.combinat sage.modules >>> Word = A.basis().keys() # needs sage.combinat sage.modules >>> A.product_on_basis(Word("abc"), Word("cba")) # needs sage.combinat sage.modules B[word: abccba]
- additional_structure()[source]#
Return
None
.Indeed, the category of (magmatic) algebras defines no new structure: a morphism of modules and of magmas between two (magmatic) algebras is a (magmatic) algebra morphism.
See also
Todo
This category should be a
CategoryWithAxiom
, the axiom specifying the compatibility between the magma and module structure.EXAMPLES:
sage: from sage.categories.magmatic_algebras import MagmaticAlgebras sage: MagmaticAlgebras(ZZ).additional_structure()
>>> from sage.all import * >>> from sage.categories.magmatic_algebras import MagmaticAlgebras >>> MagmaticAlgebras(ZZ).additional_structure()
- super_categories()[source]#
EXAMPLES:
sage: from sage.categories.magmatic_algebras import MagmaticAlgebras sage: MA = MagmaticAlgebras(ZZ) sage: MA.super_categories() [Category of additive commutative additive associative additive unital distributive magmas and additive magmas, Category of modules over Integer Ring] sage: from sage.categories.additive_semigroups import AdditiveSemigroups sage: MA.is_subcategory((AdditiveSemigroups() & Magmas()).Distributive()) True
>>> from sage.all import * >>> from sage.categories.magmatic_algebras import MagmaticAlgebras >>> MA = MagmaticAlgebras(ZZ) >>> MA.super_categories() [Category of additive commutative additive associative additive unital distributive magmas and additive magmas, Category of modules over Integer Ring] >>> from sage.categories.additive_semigroups import AdditiveSemigroups >>> MA.is_subcategory((AdditiveSemigroups() & Magmas()).Distributive()) True