Monoids¶
- class sage.categories.monoids.Monoids(base_category)[source]¶
- Bases: - CategoryWithAxiom_singleton- The category of (multiplicative) monoids. - A monoid is a unital - semigroup, that is a set endowed with a multiplicative binary operation \(*\) which is associative and admits a unit (see Wikipedia article Monoid).- EXAMPLES: - sage: Monoids() Category of monoids sage: Monoids().super_categories() [Category of semigroups, Category of unital magmas] sage: Monoids().all_super_categories() [Category of monoids, Category of semigroups, Category of unital magmas, Category of magmas, Category of sets, Category of sets with partial maps, Category of objects] sage: Monoids().axioms() frozenset({'Associative', 'Unital'}) sage: Semigroups().Unital() Category of monoids sage: Monoids().example() An example of a monoid: the free monoid generated by ('a', 'b', 'c', 'd') - >>> from sage.all import * >>> Monoids() Category of monoids >>> Monoids().super_categories() [Category of semigroups, Category of unital magmas] >>> Monoids().all_super_categories() [Category of monoids, Category of semigroups, Category of unital magmas, Category of magmas, Category of sets, Category of sets with partial maps, Category of objects] >>> Monoids().axioms() frozenset({'Associative', 'Unital'}) >>> Semigroups().Unital() Category of monoids >>> Monoids().example() An example of a monoid: the free monoid generated by ('a', 'b', 'c', 'd') - class Algebras(category, *args)[source]¶
- Bases: - AlgebrasCategory- class ElementMethods[source]¶
- Bases: - object- is_central()[source]¶
- Return whether the element - selfis central.- EXAMPLES: - sage: SG4 = SymmetricGroupAlgebra(ZZ,4) # needs sage.groups sage.modules sage: SG4(1).is_central() # needs sage.groups sage.modules True sage: SG4(Permutation([1,3,2,4])).is_central() # needs sage.groups sage.modules False sage: A = GroupAlgebras(QQ).example(); A # needs sage.groups sage.modules Algebra of Dihedral group of order 8 as a permutation group over Rational Field sage: sum(A.basis()).is_central() # needs sage.groups sage.modules True - >>> from sage.all import * >>> SG4 = SymmetricGroupAlgebra(ZZ,Integer(4)) # needs sage.groups sage.modules >>> SG4(Integer(1)).is_central() # needs sage.groups sage.modules True >>> SG4(Permutation([Integer(1),Integer(3),Integer(2),Integer(4)])).is_central() # needs sage.groups sage.modules False >>> A = GroupAlgebras(QQ).example(); A # needs sage.groups sage.modules Algebra of Dihedral group of order 8 as a permutation group over Rational Field >>> sum(A.basis()).is_central() # needs sage.groups sage.modules True 
 
 - class ParentMethods[source]¶
- Bases: - object- algebra_generators()[source]¶
- Return generators for this algebra. - For a monoid algebra, the algebra generators are built from the monoid generators if available and from the semigroup generators otherwise. - See also - EXAMPLES: - sage: M = Monoids().example(); M An example of a monoid: the free monoid generated by ('a', 'b', 'c', 'd') sage: M.monoid_generators() Finite family {'a': 'a', 'b': 'b', 'c': 'c', 'd': 'd'} sage: M.algebra(ZZ).algebra_generators() # needs sage.modules Finite family {'a': B['a'], 'b': B['b'], 'c': B['c'], 'd': B['d']} sage: Z12 = Monoids().Finite().example(); Z12 An example of a finite multiplicative monoid: the integers modulo 12 sage: Z12.monoid_generators() Traceback (most recent call last): ... AttributeError: 'IntegerModMonoid_with_category' object has no attribute 'monoid_generators'... sage: Z12.semigroup_generators() Family (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) sage: Z12.algebra(QQ).algebra_generators() # needs sage.modules Family (B[0], B[1], B[2], B[3], B[4], B[5], B[6], B[7], B[8], B[9], B[10], B[11]) sage: A10 = AlternatingGroup(10) # needs sage.groups sage: GroupAlgebras(QQ).example(A10).algebra_generators() # needs sage.groups sage.modules Family ((1,2,3,4,5,6,7,8,9), (8,9,10)) sage: A = DihedralGroup(3).algebra(QQ); A # needs sage.groups sage.modules Algebra of Dihedral group of order 6 as a permutation group over Rational Field sage: A.algebra_generators() # needs sage.groups sage.modules Family ((1,2,3), (1,3)) - >>> from sage.all import * >>> M = Monoids().example(); M An example of a monoid: the free monoid generated by ('a', 'b', 'c', 'd') >>> M.monoid_generators() Finite family {'a': 'a', 'b': 'b', 'c': 'c', 'd': 'd'} >>> M.algebra(ZZ).algebra_generators() # needs sage.modules Finite family {'a': B['a'], 'b': B['b'], 'c': B['c'], 'd': B['d']} >>> Z12 = Monoids().Finite().example(); Z12 An example of a finite multiplicative monoid: the integers modulo 12 >>> Z12.monoid_generators() Traceback (most recent call last): ... AttributeError: 'IntegerModMonoid_with_category' object has no attribute 'monoid_generators'... >>> Z12.semigroup_generators() Family (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) >>> Z12.algebra(QQ).algebra_generators() # needs sage.modules Family (B[0], B[1], B[2], B[3], B[4], B[5], B[6], B[7], B[8], B[9], B[10], B[11]) >>> A10 = AlternatingGroup(Integer(10)) # needs sage.groups >>> GroupAlgebras(QQ).example(A10).algebra_generators() # needs sage.groups sage.modules Family ((1,2,3,4,5,6,7,8,9), (8,9,10)) >>> A = DihedralGroup(Integer(3)).algebra(QQ); A # needs sage.groups sage.modules Algebra of Dihedral group of order 6 as a permutation group over Rational Field >>> A.algebra_generators() # needs sage.groups sage.modules Family ((1,2,3), (1,3)) 
 - one_basis()[source]¶
- Return the unit of the monoid, which indexes the unit of this algebra, as per - AlgebrasWithBasis.ParentMethods.one_basis().- EXAMPLES: - sage: # needs sage.modules sage: A = Monoids().example().algebra(ZZ) sage: A.one_basis() '' sage: A.one() B[''] sage: A(3) 3*B[''] - >>> from sage.all import * >>> # needs sage.modules >>> A = Monoids().example().algebra(ZZ) >>> A.one_basis() '' >>> A.one() B[''] >>> A(Integer(3)) 3*B[''] 
 
 - extra_super_categories()[source]¶
- The algebra of a monoid is a bialgebra and a monoid. - EXAMPLES: - sage: C = Monoids().Algebras(QQ) sage: C.extra_super_categories() [Category of bialgebras over Rational Field, Category of monoids] sage: Monoids().Algebras(QQ).super_categories() [Category of bialgebras with basis over Rational Field, Category of semigroup algebras over Rational Field, Category of unital magma algebras over Rational Field] - >>> from sage.all import * >>> C = Monoids().Algebras(QQ) >>> C.extra_super_categories() [Category of bialgebras over Rational Field, Category of monoids] >>> Monoids().Algebras(QQ).super_categories() [Category of bialgebras with basis over Rational Field, Category of semigroup algebras over Rational Field, Category of unital magma algebras over Rational Field] 
 
 - class CartesianProducts(category, *args)[source]¶
- Bases: - CartesianProductsCategory- The category of monoids constructed as Cartesian products of monoids. - This construction gives the direct product of monoids. See Wikipedia article Direct_product for more information. - class ElementMethods[source]¶
- Bases: - object- multiplicative_order()[source]¶
- Return the multiplicative order of this element. - EXAMPLES: - sage: # needs sage.groups sage.modules sage: G1 = SymmetricGroup(3) sage: G2 = SL(2, 3) sage: G = cartesian_product([G1, G2]) sage: G((G1.gen(0), G2.gen(1))).multiplicative_order() 12 - >>> from sage.all import * >>> # needs sage.groups sage.modules >>> G1 = SymmetricGroup(Integer(3)) >>> G2 = SL(Integer(2), Integer(3)) >>> G = cartesian_product([G1, G2]) >>> G((G1.gen(Integer(0)), G2.gen(Integer(1)))).multiplicative_order() 12 
 
 - class ParentMethods[source]¶
- Bases: - object- monoid_generators()[source]¶
- Return the generators of - self.- EXAMPLES: - sage: # needs sage.combinat sage.groups sage: M = Monoids.free([1, 2, 3]) sage: N = Monoids.free(['a', 'b']) sage: C = cartesian_product([M, N]) sage: C.monoid_generators() Family ((F[1], 1), (F[2], 1), (F[3], 1), (1, F['a']), (1, F['b'])) - >>> from sage.all import * >>> # needs sage.combinat sage.groups >>> M = Monoids.free([Integer(1), Integer(2), Integer(3)]) >>> N = Monoids.free(['a', 'b']) >>> C = cartesian_product([M, N]) >>> C.monoid_generators() Family ((F[1], 1), (F[2], 1), (F[3], 1), (1, F['a']), (1, F['b'])) - An example with an infinitely generated group (a better output is needed): - sage: N = Monoids.free(ZZ) # needs sage.combinat sage: C = cartesian_product([M, N]) # needs sage.combinat sage.groups sage: C.monoid_generators() # needs sage.combinat sage.groups Lazy family (gen(i))_{i in The Cartesian product of (...)} - >>> from sage.all import * >>> N = Monoids.free(ZZ) # needs sage.combinat >>> C = cartesian_product([M, N]) # needs sage.combinat sage.groups >>> C.monoid_generators() # needs sage.combinat sage.groups Lazy family (gen(i))_{i in The Cartesian product of (...)} 
 
 - extra_super_categories()[source]¶
- A Cartesian product of monoids is endowed with a natural group structure. - EXAMPLES: - sage: C = Monoids().CartesianProducts() sage: C.extra_super_categories() [Category of monoids] sage: sorted(C.super_categories(), key=str) [Category of Cartesian products of semigroups, Category of Cartesian products of unital magmas, Category of monoids] - >>> from sage.all import * >>> C = Monoids().CartesianProducts() >>> C.extra_super_categories() [Category of monoids] >>> sorted(C.super_categories(), key=str) [Category of Cartesian products of semigroups, Category of Cartesian products of unital magmas, Category of monoids] 
 
 - class Commutative(base_category)[source]¶
- Bases: - CategoryWithAxiom_singleton- Category of commutative (abelian) monoids. - A monoid \(M\) is commutative if \(xy = yx\) for all \(x,y \in M\). - static free(index_set=None, names=None, **kwds)[source]¶
- Return a free abelian monoid on \(n\) generators or with the generators indexed by a set \(I\). - A free monoid is constructed by specifying either: - the number of generators and/or the names of the generators, or 
- the indexing set for the generators. 
 - INPUT: - index_set– (optional) an index set for the generators; if an integer, then this represents \(\{0, 1, \ldots, n-1\}\)
- names– string or list/tuple/iterable of strings (default:- 'x'); the generator names or name prefix
 - EXAMPLES: - sage: Monoids.Commutative.free(index_set=ZZ) # needs sage.combinat Free abelian monoid indexed by Integer Ring sage: Monoids().Commutative().free(ZZ) # needs sage.combinat Free abelian monoid indexed by Integer Ring sage: F.<x,y,z> = Monoids().Commutative().free(); F # needs sage.combinat Free abelian monoid indexed by {'x', 'y', 'z'} - >>> from sage.all import * >>> Monoids.Commutative.free(index_set=ZZ) # needs sage.combinat Free abelian monoid indexed by Integer Ring >>> Monoids().Commutative().free(ZZ) # needs sage.combinat Free abelian monoid indexed by Integer Ring >>> F = Monoids().Commutative().free(names=('x', 'y', 'z',)); (x, y, z,) = F._first_ngens(3); F # needs sage.combinat Free abelian monoid indexed by {'x', 'y', 'z'} 
 
 - class ElementMethods[source]¶
- Bases: - object- inverse()[source]¶
- Return the multiplicative inverse of - self.- This is an alias for inversion, which can also be invoked by - ~xfor an element- x.- Nota Bene: Element classes should implement - __invert__only.- EXAMPLES: - sage: AA(sqrt(~2)).inverse() # needs sage.rings.number_field sage.symbolic 1.414213562373095? - >>> from sage.all import * >>> AA(sqrt(~Integer(2))).inverse() # needs sage.rings.number_field sage.symbolic 1.414213562373095? 
 - is_one()[source]¶
- Return whether - selfis the one of the monoid.- The default implementation is to compare with - self.one().
 - powers(n)[source]¶
- Return the list \([x^0, x^1, \ldots, x^{n-1}]\). - EXAMPLES: - sage: A = Matrix([[1, 1], [-1, 0]]) # needs sage.modules sage: A.powers(6) # needs sage.modules [ [1 0] [ 1 1] [ 0 1] [-1 0] [-1 -1] [ 0 -1] [0 1], [-1 0], [-1 -1], [ 0 -1], [ 1 0], [ 1 1] ] - >>> from sage.all import * >>> A = Matrix([[Integer(1), Integer(1)], [-Integer(1), Integer(0)]]) # needs sage.modules >>> A.powers(Integer(6)) # needs sage.modules [ [1 0] [ 1 1] [ 0 1] [-1 0] [-1 -1] [ 0 -1] [0 1], [-1 0], [-1 -1], [ 0 -1], [ 1 0], [ 1 1] ] 
 
 - Finite[source]¶
- alias of - FiniteMonoids
 - class ParentMethods[source]¶
- Bases: - object- prod(args)[source]¶
- n-ary product of elements of - self.- INPUT: - args– list (or iterable) of elements of- self
 - Returns the product of the elements in - args, as an element of- self.- EXAMPLES: - sage: S = Monoids().example() sage: S.prod([S('a'), S('b')]) 'ab' - >>> from sage.all import * >>> S = Monoids().example() >>> S.prod([S('a'), S('b')]) 'ab' 
 - semigroup_generators()[source]¶
- Return the generators of - selfas a semigroup.- The generators of a monoid \(M\) as a semigroup are the generators of \(M\) as a monoid and the unit. - EXAMPLES: - sage: M = Monoids().free([1,2,3]) # needs sage.combinat sage: M.semigroup_generators() # needs sage.combinat Family (1, F[1], F[2], F[3]) - >>> from sage.all import * >>> M = Monoids().free([Integer(1),Integer(2),Integer(3)]) # needs sage.combinat >>> M.semigroup_generators() # needs sage.combinat Family (1, F[1], F[2], F[3]) 
 - submonoid(generators, category=None)[source]¶
- Return the multiplicative submonoid generated by - generators.- INPUT: - generators– a finite family of elements of- self, or a list, iterable, … that can be converted into one (see- Family).
- category– a category
 - This is a shorthand for - Semigroups.ParentMethods.subsemigroup()that specifies that this is a submonoid, and in particular that the unit is- self.one().- EXAMPLES: - sage: R = IntegerModRing(15) sage: M = R.submonoid([R(3), R(5)]); M # needs sage.combinat A submonoid of (Ring of integers modulo 15) with 2 generators sage: M.list() # needs sage.combinat [1, 3, 5, 9, 0, 10, 12, 6] - >>> from sage.all import * >>> R = IntegerModRing(Integer(15)) >>> M = R.submonoid([R(Integer(3)), R(Integer(5))]); M # needs sage.combinat A submonoid of (Ring of integers modulo 15) with 2 generators >>> M.list() # needs sage.combinat [1, 3, 5, 9, 0, 10, 12, 6] - Not the presence of the unit, unlike in: - sage: S = R.subsemigroup([R(3), R(5)]); S # needs sage.combinat A subsemigroup of (Ring of integers modulo 15) with 2 generators sage: S.list() # needs sage.combinat [3, 5, 9, 0, 10, 12, 6] - >>> from sage.all import * >>> S = R.subsemigroup([R(Integer(3)), R(Integer(5))]); S # needs sage.combinat A subsemigroup of (Ring of integers modulo 15) with 2 generators >>> S.list() # needs sage.combinat [3, 5, 9, 0, 10, 12, 6] - This method is really a shorthand for subsemigroup: - sage: M2 = R.subsemigroup([R(3), R(5)], one=R.one()) # needs sage.combinat sage: M2 is M # needs sage.combinat True - >>> from sage.all import * >>> M2 = R.subsemigroup([R(Integer(3)), R(Integer(5))], one=R.one()) # needs sage.combinat >>> M2 is M # needs sage.combinat True 
 
 - class Subquotients(category, *args)[source]¶
- Bases: - SubquotientsCategory- class ParentMethods[source]¶
- Bases: - object- one()[source]¶
- Return the multiplicative unit of this monoid, obtained by retracting that of the ambient monoid. - EXAMPLES: - sage: S = Monoids().Subquotients().example() # todo: not implemented sage: S.one() # todo: not implemented - >>> from sage.all import * >>> S = Monoids().Subquotients().example() # todo: not implemented >>> S.one() # todo: not implemented 
 
 
 - class WithRealizations(category, *args)[source]¶
- Bases: - WithRealizationsCategory- class ParentMethods[source]¶
- Bases: - object- one()[source]¶
- Return the unit of this monoid. - This default implementation returns the unit of the realization of - selfgiven by- a_realization().- EXAMPLES: - sage: A = Sets().WithRealizations().example(); A # needs sage.modules The subset algebra of {1, 2, 3} over Rational Field sage: A.one.__module__ # needs sage.modules 'sage.categories.monoids' sage: A.one() # needs sage.modules F[{}] - >>> from sage.all import * >>> A = Sets().WithRealizations().example(); A # needs sage.modules The subset algebra of {1, 2, 3} over Rational Field >>> A.one.__module__ # needs sage.modules 'sage.categories.monoids' >>> A.one() # needs sage.modules F[{}] 
 
 
 - static free(index_set=None, names=None, **kwds)[source]¶
- Return a free monoid on \(n\) generators or with the generators indexed by a set \(I\). - A free monoid is constructed by specifying either: - the number of generators and/or the names of the generators 
- the indexing set for the generators 
 - INPUT: - index_set– (optional) an index set for the generators; if an integer, then this represents \(\{0, 1, \ldots, n-1\}\)
- names– string or list/tuple/iterable of strings (default:- 'x'); the generator names or name prefix
 - EXAMPLES: - sage: Monoids.free(index_set=ZZ) # needs sage.combinat Free monoid indexed by Integer Ring sage: Monoids().free(ZZ) # needs sage.combinat Free monoid indexed by Integer Ring sage: F.<x,y,z> = Monoids().free(); F # needs sage.combinat Free monoid indexed by {'x', 'y', 'z'} - >>> from sage.all import * >>> Monoids.free(index_set=ZZ) # needs sage.combinat Free monoid indexed by Integer Ring >>> Monoids().free(ZZ) # needs sage.combinat Free monoid indexed by Integer Ring >>> F = Monoids().free(names=('x', 'y', 'z',)); (x, y, z,) = F._first_ngens(3); F # needs sage.combinat Free monoid indexed by {'x', 'y', 'z'}