Indexed Monoids#

AUTHORS:

  • Travis Scrimshaw (2013-10-15)

class sage.monoids.indexed_free_monoid.IndexedFreeAbelianMonoid(indices, prefix, category=None, names=None, **kwds)[source]#

Bases: IndexedMonoid

Free abelian monoid with an indexed set of generators.

INPUT:

  • indices – the indices for the generators

For the optional arguments that control the printing, see IndexedGenerators.

EXAMPLES:

sage: F = FreeAbelianMonoid(index_set=ZZ)
sage: F.gen(15)^3 * F.gen(2) * F.gen(15)
F[2]*F[15]^4
sage: F.gen(1)
F[1]
>>> from sage.all import *
>>> F = FreeAbelianMonoid(index_set=ZZ)
>>> F.gen(Integer(15))**Integer(3) * F.gen(Integer(2)) * F.gen(Integer(15))
F[2]*F[15]^4
>>> F.gen(Integer(1))
F[1]

Now we examine some of the printing options:

sage: F = FreeAbelianMonoid(index_set=Partitions(), prefix='A', bracket=False, scalar_mult='%')
sage: F.gen([3,1,1]) * F.gen([2,2])
A[2, 2]%A[3, 1, 1]
>>> from sage.all import *
>>> F = FreeAbelianMonoid(index_set=Partitions(), prefix='A', bracket=False, scalar_mult='%')
>>> F.gen([Integer(3),Integer(1),Integer(1)]) * F.gen([Integer(2),Integer(2)])
A[2, 2]%A[3, 1, 1]
Element[source]#

alias of IndexedFreeAbelianMonoidElement

gen(x)[source]#

The generator indexed by x of self.

EXAMPLES:

sage: F = FreeAbelianMonoid(index_set=ZZ)
sage: F.gen(0)
F[0]
sage: F.gen(2)
F[2]
>>> from sage.all import *
>>> F = FreeAbelianMonoid(index_set=ZZ)
>>> F.gen(Integer(0))
F[0]
>>> F.gen(Integer(2))
F[2]
one()[source]#

Return the identity element of self.

EXAMPLES:

sage: F = FreeAbelianMonoid(index_set=ZZ)
sage: F.one()
1
>>> from sage.all import *
>>> F = FreeAbelianMonoid(index_set=ZZ)
>>> F.one()
1
class sage.monoids.indexed_free_monoid.IndexedFreeAbelianMonoidElement(F, x)[source]#

Bases: IndexedMonoidElement

An element of an indexed free abelian monoid.

dict()[source]#

Return self as a dictionary.

EXAMPLES:

sage: F = FreeAbelianMonoid(index_set=ZZ)
sage: a,b,c,d,e = [F.gen(i) for i in range(5)]
sage: (a*c^3).dict()
{0: 1, 2: 3}
>>> from sage.all import *
>>> F = FreeAbelianMonoid(index_set=ZZ)
>>> a,b,c,d,e = [F.gen(i) for i in range(Integer(5))]
>>> (a*c**Integer(3)).dict()
{0: 1, 2: 3}
divides(m)[source]#

Return whether self divides m.

EXAMPLES:

sage: F = FreeAbelianMonoid(index_set=ZZ)
sage: a,b,c,d,e = [F.gen(i) for i in range(5)]
sage: elt = a*b*c^3*d^2
sage: a.divides(elt)
True
sage: c.divides(elt)
True
sage: (a*b*d^2).divides(elt)
True
sage: (a^4).divides(elt)
False
sage: e.divides(elt)
False
>>> from sage.all import *
>>> F = FreeAbelianMonoid(index_set=ZZ)
>>> a,b,c,d,e = [F.gen(i) for i in range(Integer(5))]
>>> elt = a*b*c**Integer(3)*d**Integer(2)
>>> a.divides(elt)
True
>>> c.divides(elt)
True
>>> (a*b*d**Integer(2)).divides(elt)
True
>>> (a**Integer(4)).divides(elt)
False
>>> e.divides(elt)
False
length()[source]#

Return the length of self.

EXAMPLES:

sage: F = FreeAbelianMonoid(index_set=ZZ)
sage: a,b,c,d,e = [F.gen(i) for i in range(5)]
sage: elt = a*c^3*b^2*a
sage: elt.length()
7
sage: len(elt)
7
>>> from sage.all import *
>>> F = FreeAbelianMonoid(index_set=ZZ)
>>> a,b,c,d,e = [F.gen(i) for i in range(Integer(5))]
>>> elt = a*c**Integer(3)*b**Integer(2)*a
>>> elt.length()
7
>>> len(elt)
7
class sage.monoids.indexed_free_monoid.IndexedFreeMonoid(indices, prefix, category=None, names=None, **kwds)[source]#

Bases: IndexedMonoid

Free monoid with an indexed set of generators.

INPUT:

  • indices – the indices for the generators

For the optional arguments that control the printing, see IndexedGenerators.

EXAMPLES:

sage: F = FreeMonoid(index_set=ZZ)
sage: F.gen(15)^3 * F.gen(2) * F.gen(15)
F[15]^3*F[2]*F[15]
sage: F.gen(1)
F[1]
>>> from sage.all import *
>>> F = FreeMonoid(index_set=ZZ)
>>> F.gen(Integer(15))**Integer(3) * F.gen(Integer(2)) * F.gen(Integer(15))
F[15]^3*F[2]*F[15]
>>> F.gen(Integer(1))
F[1]

Now we examine some of the printing options:

sage: F = FreeMonoid(index_set=ZZ, prefix='X', bracket=['|','>'])
sage: F.gen(2) * F.gen(12)
X|2>*X|12>
>>> from sage.all import *
>>> F = FreeMonoid(index_set=ZZ, prefix='X', bracket=['|','>'])
>>> F.gen(Integer(2)) * F.gen(Integer(12))
X|2>*X|12>
Element[source]#

alias of IndexedFreeMonoidElement

gen(x)[source]#

The generator indexed by x of self.

EXAMPLES:

sage: F = FreeMonoid(index_set=ZZ)
sage: F.gen(0)
F[0]
sage: F.gen(2)
F[2]
>>> from sage.all import *
>>> F = FreeMonoid(index_set=ZZ)
>>> F.gen(Integer(0))
F[0]
>>> F.gen(Integer(2))
F[2]
one()[source]#

Return the identity element of self.

EXAMPLES:

sage: F = FreeMonoid(index_set=ZZ)
sage: F.one()
1
>>> from sage.all import *
>>> F = FreeMonoid(index_set=ZZ)
>>> F.one()
1
class sage.monoids.indexed_free_monoid.IndexedFreeMonoidElement(F, x)[source]#

Bases: IndexedMonoidElement

An element of an indexed free abelian monoid.

length()[source]#

Return the length of self.

EXAMPLES:

sage: F = FreeMonoid(index_set=ZZ)
sage: a,b,c,d,e = [F.gen(i) for i in range(5)]
sage: elt = a*c^3*b^2*a
sage: elt.length()
7
sage: len(elt)
7
>>> from sage.all import *
>>> F = FreeMonoid(index_set=ZZ)
>>> a,b,c,d,e = [F.gen(i) for i in range(Integer(5))]
>>> elt = a*c**Integer(3)*b**Integer(2)*a
>>> elt.length()
7
>>> len(elt)
7
class sage.monoids.indexed_free_monoid.IndexedMonoid(indices, prefix, category=None, names=None, **kwds)[source]#

Bases: Parent, IndexedGenerators, UniqueRepresentation

Base class for monoids with an indexed set of generators.

INPUT:

  • indices – the indices for the generators

For the optional arguments that control the printing, see IndexedGenerators.

cardinality()[source]#

Return the cardinality of self, which is \(\infty\) unless this is the trivial monoid.

EXAMPLES:

sage: F = FreeMonoid(index_set=ZZ)
sage: F.cardinality()
+Infinity
sage: F = FreeMonoid(index_set=())
sage: F.cardinality()
1

sage: F = FreeAbelianMonoid(index_set=ZZ)
sage: F.cardinality()
+Infinity
sage: F = FreeAbelianMonoid(index_set=())
sage: F.cardinality()
1
>>> from sage.all import *
>>> F = FreeMonoid(index_set=ZZ)
>>> F.cardinality()
+Infinity
>>> F = FreeMonoid(index_set=())
>>> F.cardinality()
1

>>> F = FreeAbelianMonoid(index_set=ZZ)
>>> F.cardinality()
+Infinity
>>> F = FreeAbelianMonoid(index_set=())
>>> F.cardinality()
1
gens()[source]#

Return the monoid generators of self.

EXAMPLES:

sage: F = FreeAbelianMonoid(index_set=ZZ)
sage: F.monoid_generators()
Lazy family (Generator map from Integer Ring to
 Free abelian monoid indexed by Integer Ring(i))_{i in Integer Ring}
sage: F = FreeAbelianMonoid(index_set=tuple('abcde'))
sage: sorted(F.monoid_generators())
[F['a'], F['b'], F['c'], F['d'], F['e']]
>>> from sage.all import *
>>> F = FreeAbelianMonoid(index_set=ZZ)
>>> F.monoid_generators()
Lazy family (Generator map from Integer Ring to
 Free abelian monoid indexed by Integer Ring(i))_{i in Integer Ring}
>>> F = FreeAbelianMonoid(index_set=tuple('abcde'))
>>> sorted(F.monoid_generators())
[F['a'], F['b'], F['c'], F['d'], F['e']]
monoid_generators()[source]#

Return the monoid generators of self.

EXAMPLES:

sage: F = FreeAbelianMonoid(index_set=ZZ)
sage: F.monoid_generators()
Lazy family (Generator map from Integer Ring to
 Free abelian monoid indexed by Integer Ring(i))_{i in Integer Ring}
sage: F = FreeAbelianMonoid(index_set=tuple('abcde'))
sage: sorted(F.monoid_generators())
[F['a'], F['b'], F['c'], F['d'], F['e']]
>>> from sage.all import *
>>> F = FreeAbelianMonoid(index_set=ZZ)
>>> F.monoid_generators()
Lazy family (Generator map from Integer Ring to
 Free abelian monoid indexed by Integer Ring(i))_{i in Integer Ring}
>>> F = FreeAbelianMonoid(index_set=tuple('abcde'))
>>> sorted(F.monoid_generators())
[F['a'], F['b'], F['c'], F['d'], F['e']]
class sage.monoids.indexed_free_monoid.IndexedMonoidElement(F, x)[source]#

Bases: MonoidElement

An element of an indexed monoid.

This is an abstract class which uses the (abstract) method _sorted_items() for all of its functions. So to implement an element of an indexed monoid, one just needs to implement _sorted_items(), which returns a list of pairs (i, p) where i is the index and p is the corresponding power, sorted in some order. For example, in the free monoid there is no such choice, but for the free abelian monoid, one could want lex order or have the highest powers first.

Indexed monoid elements are ordered lexicographically with respect to the result of _sorted_items() (which for abelian free monoids is influenced by the order on the indexing set).

is_one()[source]#

Return if self is the identity element.

EXAMPLES:

sage: F = FreeMonoid(index_set=ZZ)
sage: a,b,c,d,e = [F.gen(i) for i in range(5)]
sage: (b*a*c^3*a).is_one()
False
sage: F.one().is_one()
True
>>> from sage.all import *
>>> F = FreeMonoid(index_set=ZZ)
>>> a,b,c,d,e = [F.gen(i) for i in range(Integer(5))]
>>> (b*a*c**Integer(3)*a).is_one()
False
>>> F.one().is_one()
True
sage: F = FreeAbelianMonoid(index_set=ZZ)
sage: a,b,c,d,e = [F.gen(i) for i in range(5)]
sage: (b*c^3*a).is_one()
False
sage: F.one().is_one()
True
>>> from sage.all import *
>>> F = FreeAbelianMonoid(index_set=ZZ)
>>> a,b,c,d,e = [F.gen(i) for i in range(Integer(5))]
>>> (b*c**Integer(3)*a).is_one()
False
>>> F.one().is_one()
True
leading_support()[source]#

Return the support of the leading generator of self.

EXAMPLES:

sage: F = FreeMonoid(index_set=ZZ)
sage: a,b,c,d,e = [F.gen(i) for i in range(5)]
sage: (b*a*c^3*a).leading_support()
1
>>> from sage.all import *
>>> F = FreeMonoid(index_set=ZZ)
>>> a,b,c,d,e = [F.gen(i) for i in range(Integer(5))]
>>> (b*a*c**Integer(3)*a).leading_support()
1
sage: F = FreeAbelianMonoid(index_set=ZZ)
sage: a,b,c,d,e = [F.gen(i) for i in range(5)]
sage: (b*c^3*a).leading_support()
0
>>> from sage.all import *
>>> F = FreeAbelianMonoid(index_set=ZZ)
>>> a,b,c,d,e = [F.gen(i) for i in range(Integer(5))]
>>> (b*c**Integer(3)*a).leading_support()
0
support()[source]#

Return a list of the objects indexing self with non-zero exponents.

EXAMPLES:

sage: F = FreeMonoid(index_set=ZZ)
sage: a,b,c,d,e = [F.gen(i) for i in range(5)]
sage: (b*a*c^3*b).support()
[0, 1, 2]
>>> from sage.all import *
>>> F = FreeMonoid(index_set=ZZ)
>>> a,b,c,d,e = [F.gen(i) for i in range(Integer(5))]
>>> (b*a*c**Integer(3)*b).support()
[0, 1, 2]
sage: F = FreeAbelianMonoid(index_set=ZZ)
sage: a,b,c,d,e = [F.gen(i) for i in range(5)]
sage: (a*c^3).support()
[0, 2]
>>> from sage.all import *
>>> F = FreeAbelianMonoid(index_set=ZZ)
>>> a,b,c,d,e = [F.gen(i) for i in range(Integer(5))]
>>> (a*c**Integer(3)).support()
[0, 2]
to_word_list()[source]#

Return self as a word represented as a list whose entries are indices of self.

EXAMPLES:

sage: F = FreeMonoid(index_set=ZZ)
sage: a,b,c,d,e = [F.gen(i) for i in range(5)]
sage: (b*a*c^3*a).to_word_list()
[1, 0, 2, 2, 2, 0]
>>> from sage.all import *
>>> F = FreeMonoid(index_set=ZZ)
>>> a,b,c,d,e = [F.gen(i) for i in range(Integer(5))]
>>> (b*a*c**Integer(3)*a).to_word_list()
[1, 0, 2, 2, 2, 0]
sage: F = FreeAbelianMonoid(index_set=ZZ)
sage: a,b,c,d,e = [F.gen(i) for i in range(5)]
sage: (b*c^3*a).to_word_list()
[0, 1, 2, 2, 2]
>>> from sage.all import *
>>> F = FreeAbelianMonoid(index_set=ZZ)
>>> a,b,c,d,e = [F.gen(i) for i in range(Integer(5))]
>>> (b*c**Integer(3)*a).to_word_list()
[0, 1, 2, 2, 2]
trailing_support()[source]#

Return the support of the trailing generator of self.

EXAMPLES:

sage: F = FreeMonoid(index_set=ZZ)
sage: a,b,c,d,e = [F.gen(i) for i in range(5)]
sage: (b*a*c^3*a).trailing_support()
0
>>> from sage.all import *
>>> F = FreeMonoid(index_set=ZZ)
>>> a,b,c,d,e = [F.gen(i) for i in range(Integer(5))]
>>> (b*a*c**Integer(3)*a).trailing_support()
0
sage: F = FreeAbelianMonoid(index_set=ZZ)
sage: a,b,c,d,e = [F.gen(i) for i in range(5)]
sage: (b*c^3*a).trailing_support()
2
>>> from sage.all import *
>>> F = FreeAbelianMonoid(index_set=ZZ)
>>> a,b,c,d,e = [F.gen(i) for i in range(Integer(5))]
>>> (b*c**Integer(3)*a).trailing_support()
2