AUTHORS:
Sage supports free monoids on any prescribed finite number
of generators. Use the FreeMonoid
function to create a free monoid, and the gen and
gens functions to obtain the corresponding
generators. You can print the generators as arbitrary strings using
the optional names argument to the
FreeMonoid function.
Returns a free monoid on
generators.
INPUT:
OUTPUT: free abelian monoid
EXAMPLES:
sage: FreeMonoid(0,'')
Free monoid on 0 generators ()
sage: F.<a,b,c,d,e> = FreeMonoid(5); F
Free monoid on 5 generators (a, b, c, d, e)
sage: F(1)
1
sage: mul([ a, b, a, c, b, d, c, d ], F(1))
a*b*a*c*b*d*c*d
The free monoid on
generators.
Return
coerced into this free monoid.
One can create a free monoid from the integer 1 and from a list of
2-tuples of integers
, where
corresponds to
, where
is the
`i`th generator.
EXAMPLES:
sage: F = FreeMonoid(3, 'a')
sage: F(1)
1
sage: F(F.gen(0))
a0
sage: F(0)
...
TypeError: Argument x (= 0) is of the wrong type.
sage: F([(0,5),(1,2),(0,10),(0,2),(1,2)])
a0^5*a1^2*a0^12*a1^2
Create free monoid on
generators.
INPUT:
EXAMPLES:
sage: F = FreeMonoid(3,'x'); F
Free monoid on 3 generators (x0, x1, x2)
sage: x = F.gens()
sage: x[0]*x[1]**5 * (x[0]*x[2])
x0*x1^5*x0*x2
sage: F = FreeMonoid(3, 'a')
sage: F
Free monoid on 3 generators (a0, a1, a2)
sage: M = FreeMonoid(3, names=['a','b','c'])
sage: loads(M.dumps()) == M
True
The
-th generator of the monoid.
INPUT:
EXAMPLES:
sage: F = FreeMonoid(3, 'a')
sage: F.gen(1)
a1
sage: F.gen(2)
a2
sage: F.gen(5)
...
IndexError: Argument i (= 5) must be between 0 and 2.
The number of free generators of the monoid.
EXAMPLES:
sage: F = FreeMonoid(2005, 'a')
sage: F.ngens()
2005
Return True if
is a free monoid.
EXAMPLES:
sage: from sage.monoids.free_monoid import is_FreeMonoid
sage: is_FreeMonoid(5)
False
sage: is_FreeMonoid(FreeMonoid(7,'a'))
True
sage: is_FreeMonoid(FreeAbelianMonoid(7,'a'))
False
sage: is_FreeMonoid(FreeAbelianMonoid(0,''))
False