Alphabet¶
AUTHORS:
- Franco Saliola (2008-12-17) : merged into sage 
- Vincent Delecroix and Stepan Starosta (2012): remove classes for alphabet and use other Sage classes otherwise (TotallyOrderedFiniteSet, FiniteEnumeratedSet, …). More shortcut to standard alphabets. 
EXAMPLES:
sage: build_alphabet("ab")
{'a', 'b'}
sage: build_alphabet([0,1,2])
{0, 1, 2}
sage: build_alphabet(name='PP')
Positive integers
sage: build_alphabet(name='NN')
Non negative integers
sage: build_alphabet(name='lower')
{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'}
>>> from sage.all import *
>>> build_alphabet("ab")
{'a', 'b'}
>>> build_alphabet([Integer(0),Integer(1),Integer(2)])
{0, 1, 2}
>>> build_alphabet(name='PP')
Positive integers
>>> build_alphabet(name='NN')
Non negative integers
>>> build_alphabet(name='lower')
{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'}
- sage.combinat.words.alphabet.Alphabet(data=None, names=None, name=None)[source]¶
- Return an object representing an ordered alphabet. - INPUT: - data– the letters of the alphabet; it can be:- a list/tuple/iterable of letters; the iterable may be infinite 
- an integer \(n\) to represent \(\{1, \ldots, n\}\), or infinity to represent \(\NN\) 
 
- names– (optional) a list for the letters (i.e. variable names) or a string for prefix for all letters; if given a list, it must have the same cardinality as the set represented by- data
- name– (optional) if given, then return a named set and can be equal to :- 'lower', 'upper', 'space', 'underscore', 'punctuation', 'printable', 'binary', 'octal', 'decimal', 'hexadecimal', 'radix64'.- You can use many of them at once, separated by spaces : - 'lower punctuation'represents the union of the two alphabets- 'lower'and- 'punctuation'.- Alternatively, - namecan be set to- 'positive integers'(or- 'PP') or- 'natural numbers'(or- 'NN').- namecannot be combined with- data.
 - EXAMPLES: - If the argument is a Set, it just returns it: - sage: build_alphabet(ZZ) is ZZ True sage: F = FiniteEnumeratedSet('abc') sage: build_alphabet(F) is F True - >>> from sage.all import * >>> build_alphabet(ZZ) is ZZ True >>> F = FiniteEnumeratedSet('abc') >>> build_alphabet(F) is F True - If a list, tuple or string is provided, then it builds a proper Sage class ( - TotallyOrderedFiniteSet):- sage: build_alphabet([0,1,2]) {0, 1, 2} sage: F = build_alphabet('abc'); F {'a', 'b', 'c'} sage: print(type(F).__name__) TotallyOrderedFiniteSet_with_category - >>> from sage.all import * >>> build_alphabet([Integer(0),Integer(1),Integer(2)]) {0, 1, 2} >>> F = build_alphabet('abc'); F {'a', 'b', 'c'} >>> print(type(F).__name__) TotallyOrderedFiniteSet_with_category - If an integer and a set is given, then it constructs a - TotallyOrderedFiniteSet:- sage: build_alphabet(3, ['a','b','c']) {'a', 'b', 'c'} - >>> from sage.all import * >>> build_alphabet(Integer(3), ['a','b','c']) {'a', 'b', 'c'} - If an integer and a string is given, then it considers that string as a prefix: - sage: build_alphabet(3, 'x') {'x0', 'x1', 'x2'} - >>> from sage.all import * >>> build_alphabet(Integer(3), 'x') {'x0', 'x1', 'x2'} - If no data is provided, - namemay be a string which describe an alphabet. The available names decompose into two families. The first one are ‘positive integers’, ‘PP’, ‘natural numbers’ or ‘NN’ which refer to standard set of numbers:- sage: build_alphabet(name="positive integers") Positive integers sage: build_alphabet(name='PP') Positive integers sage: build_alphabet(name="natural numbers") Non negative integers sage: build_alphabet(name="NN") Non negative integers - >>> from sage.all import * >>> build_alphabet(name="positive integers") Positive integers >>> build_alphabet(name='PP') Positive integers >>> build_alphabet(name="natural numbers") Non negative integers >>> build_alphabet(name="NN") Non negative integers - The other families for the option - nameare among ‘lower’, ‘upper’, ‘space’, ‘underscore’, ‘punctuation’, ‘printable’, ‘binary’, ‘octal’, ‘decimal’, ‘hexadecimal’, ‘radix64’ which refer to standard set of characters. Theses names may be combined by separating them by a space:- sage: build_alphabet(name='lower') {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'} sage: build_alphabet(name='hexadecimal') {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'} sage: build_alphabet(name="decimal punctuation") {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ' ', ',', '.', ';', ':', '!', '?'} - >>> from sage.all import * >>> build_alphabet(name='lower') {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'} >>> build_alphabet(name='hexadecimal') {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'} >>> build_alphabet(name="decimal punctuation") {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ' ', ',', '.', ';', ':', '!', '?'} - In the case the alphabet is built from a list or a tuple, the order on the alphabet is given by the elements themselves: - sage: A = build_alphabet([0,2,1]) sage: A(0) < A(2) True sage: A(2) < A(1) False - >>> from sage.all import * >>> A = build_alphabet([Integer(0),Integer(2),Integer(1)]) >>> A(Integer(0)) < A(Integer(2)) True >>> A(Integer(2)) < A(Integer(1)) False - If a different order is needed, you may use - TotallyOrderedFiniteSetand set the option- facadeto- False. That way, the comparison fits the order of the input:- sage: A = TotallyOrderedFiniteSet([4,2,6,1], facade=False) sage: A(4) < A(2) True sage: A(1) < A(6) False - >>> from sage.all import * >>> A = TotallyOrderedFiniteSet([Integer(4),Integer(2),Integer(6),Integer(1)], facade=False) >>> A(Integer(4)) < A(Integer(2)) True >>> A(Integer(1)) < A(Integer(6)) False - Be careful, the element of the set in the last example are no more integers and do not compare equal with integers: - sage: type(A.an_element()) <class 'sage.sets.totally_ordered_finite_set.TotallyOrderedFiniteSet_with_category.element_class'> sage: A(1) == 1 False sage: 1 == A(1) False - >>> from sage.all import * >>> type(A.an_element()) <class 'sage.sets.totally_ordered_finite_set.TotallyOrderedFiniteSet_with_category.element_class'> >>> A(Integer(1)) == Integer(1) False >>> Integer(1) == A(Integer(1)) False - We give an example of an infinite alphabet indexed by the positive integers and the prime numbers: - sage: build_alphabet(oo, 'x') Lazy family (x(i))_{i in Non negative integers} sage: build_alphabet(Primes(), 'y') Lazy family (y(i))_{i in Set of all prime numbers: 2, 3, 5, 7, ...} - >>> from sage.all import * >>> build_alphabet(oo, 'x') Lazy family (x(i))_{i in Non negative integers} >>> build_alphabet(Primes(), 'y') Lazy family (y(i))_{i in Set of all prime numbers: 2, 3, 5, 7, ...} 
- sage.combinat.words.alphabet.build_alphabet(data=None, names=None, name=None)[source]¶
- Return an object representing an ordered alphabet. - INPUT: - data– the letters of the alphabet; it can be:- a list/tuple/iterable of letters; the iterable may be infinite 
- an integer \(n\) to represent \(\{1, \ldots, n\}\), or infinity to represent \(\NN\) 
 
- names– (optional) a list for the letters (i.e. variable names) or a string for prefix for all letters; if given a list, it must have the same cardinality as the set represented by- data
- name– (optional) if given, then return a named set and can be equal to :- 'lower', 'upper', 'space', 'underscore', 'punctuation', 'printable', 'binary', 'octal', 'decimal', 'hexadecimal', 'radix64'.- You can use many of them at once, separated by spaces : - 'lower punctuation'represents the union of the two alphabets- 'lower'and- 'punctuation'.- Alternatively, - namecan be set to- 'positive integers'(or- 'PP') or- 'natural numbers'(or- 'NN').- namecannot be combined with- data.
 - EXAMPLES: - If the argument is a Set, it just returns it: - sage: build_alphabet(ZZ) is ZZ True sage: F = FiniteEnumeratedSet('abc') sage: build_alphabet(F) is F True - >>> from sage.all import * >>> build_alphabet(ZZ) is ZZ True >>> F = FiniteEnumeratedSet('abc') >>> build_alphabet(F) is F True - If a list, tuple or string is provided, then it builds a proper Sage class ( - TotallyOrderedFiniteSet):- sage: build_alphabet([0,1,2]) {0, 1, 2} sage: F = build_alphabet('abc'); F {'a', 'b', 'c'} sage: print(type(F).__name__) TotallyOrderedFiniteSet_with_category - >>> from sage.all import * >>> build_alphabet([Integer(0),Integer(1),Integer(2)]) {0, 1, 2} >>> F = build_alphabet('abc'); F {'a', 'b', 'c'} >>> print(type(F).__name__) TotallyOrderedFiniteSet_with_category - If an integer and a set is given, then it constructs a - TotallyOrderedFiniteSet:- sage: build_alphabet(3, ['a','b','c']) {'a', 'b', 'c'} - >>> from sage.all import * >>> build_alphabet(Integer(3), ['a','b','c']) {'a', 'b', 'c'} - If an integer and a string is given, then it considers that string as a prefix: - sage: build_alphabet(3, 'x') {'x0', 'x1', 'x2'} - >>> from sage.all import * >>> build_alphabet(Integer(3), 'x') {'x0', 'x1', 'x2'} - If no data is provided, - namemay be a string which describe an alphabet. The available names decompose into two families. The first one are ‘positive integers’, ‘PP’, ‘natural numbers’ or ‘NN’ which refer to standard set of numbers:- sage: build_alphabet(name="positive integers") Positive integers sage: build_alphabet(name='PP') Positive integers sage: build_alphabet(name="natural numbers") Non negative integers sage: build_alphabet(name="NN") Non negative integers - >>> from sage.all import * >>> build_alphabet(name="positive integers") Positive integers >>> build_alphabet(name='PP') Positive integers >>> build_alphabet(name="natural numbers") Non negative integers >>> build_alphabet(name="NN") Non negative integers - The other families for the option - nameare among ‘lower’, ‘upper’, ‘space’, ‘underscore’, ‘punctuation’, ‘printable’, ‘binary’, ‘octal’, ‘decimal’, ‘hexadecimal’, ‘radix64’ which refer to standard set of characters. Theses names may be combined by separating them by a space:- sage: build_alphabet(name='lower') {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'} sage: build_alphabet(name='hexadecimal') {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'} sage: build_alphabet(name="decimal punctuation") {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ' ', ',', '.', ';', ':', '!', '?'} - >>> from sage.all import * >>> build_alphabet(name='lower') {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'} >>> build_alphabet(name='hexadecimal') {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'} >>> build_alphabet(name="decimal punctuation") {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ' ', ',', '.', ';', ':', '!', '?'} - In the case the alphabet is built from a list or a tuple, the order on the alphabet is given by the elements themselves: - sage: A = build_alphabet([0,2,1]) sage: A(0) < A(2) True sage: A(2) < A(1) False - >>> from sage.all import * >>> A = build_alphabet([Integer(0),Integer(2),Integer(1)]) >>> A(Integer(0)) < A(Integer(2)) True >>> A(Integer(2)) < A(Integer(1)) False - If a different order is needed, you may use - TotallyOrderedFiniteSetand set the option- facadeto- False. That way, the comparison fits the order of the input:- sage: A = TotallyOrderedFiniteSet([4,2,6,1], facade=False) sage: A(4) < A(2) True sage: A(1) < A(6) False - >>> from sage.all import * >>> A = TotallyOrderedFiniteSet([Integer(4),Integer(2),Integer(6),Integer(1)], facade=False) >>> A(Integer(4)) < A(Integer(2)) True >>> A(Integer(1)) < A(Integer(6)) False - Be careful, the element of the set in the last example are no more integers and do not compare equal with integers: - sage: type(A.an_element()) <class 'sage.sets.totally_ordered_finite_set.TotallyOrderedFiniteSet_with_category.element_class'> sage: A(1) == 1 False sage: 1 == A(1) False - >>> from sage.all import * >>> type(A.an_element()) <class 'sage.sets.totally_ordered_finite_set.TotallyOrderedFiniteSet_with_category.element_class'> >>> A(Integer(1)) == Integer(1) False >>> Integer(1) == A(Integer(1)) False - We give an example of an infinite alphabet indexed by the positive integers and the prime numbers: - sage: build_alphabet(oo, 'x') Lazy family (x(i))_{i in Non negative integers} sage: build_alphabet(Primes(), 'y') Lazy family (y(i))_{i in Set of all prime numbers: 2, 3, 5, 7, ...} - >>> from sage.all import * >>> build_alphabet(oo, 'x') Lazy family (x(i))_{i in Non negative integers} >>> build_alphabet(Primes(), 'y') Lazy family (y(i))_{i in Set of all prime numbers: 2, 3, 5, 7, ...}