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 current Algebras 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:

Wikipedia article Derivation_(differential_algebra)

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 of self

Return the product of the two corresponding basis elements indexed by i and j.

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.

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