We will illustrate the use of the structure classes using the “balls and bars” model for integer compositions. An integer composition of 6 such as [2, 1, 3] can be represented in this model as ‘oooooo’ where the 6 o’s correspond to the balls and the 2 ‘s correspond to the bars. If BB is our species for this model, the it satisfies the following recursive definition:
BB = o + o*BB + o*|*BB
Here we define this species using the default structures:
sage: ball = species.SingletonSpecies(); o = var('o')
sage: bar = species.EmptySetSpecies()
sage: BB = CombinatorialSpecies()
sage: BB.define(ball + ball*BB + ball*bar*BB)
sage: BB.isotypes([o]*3).list()
[o*(o*o), o*((o*{})*o), (o*{})*(o*o), (o*{})*((o*{})*o)]
If we ignore the parentheses, we can read off that the integer compositions are [3], [2, 1], [1, 2], and [1, 1, 1].
Bases: sage.combinat.combinat.CombinatorialObject, sage.combinat.species.structure.SpeciesStructure
EXAMPLES:
sage: P = species.SubsetSpecies()
sage: S = P.structures(["a", "b", "c"])
sage: [s.change_labels([1,2,3]) for s in S]
[{}, {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}]
EXAMPLES:
sage: S = species.SetSpecies()
sage: a = S.structures([1,2,3]).random_element(); a
{1, 2, 3}
sage: b = S.structures(['a','b','c']).random_element(); b
{'a', 'b', 'c'}
sage: a.is_isomorphic(b)
True
EXAMPLES:
sage: P = species.SubsetSpecies()
sage: S = P.structures(["a", "b", "c"])
sage: [s.labels() for s in S]
[[], ['a'], ['b'], ['c'], ['a', 'b'], ['a', 'c'], ['b', 'c'], ['a', 'b', 'c']]
Bases: sage.structure.sage_object.SageObject
Returns the species that this structure is associated with.
EXAMPLES:
sage: L = species.LinearOrderSpecies()
sage: a,b = L.structures([1,2])
sage: a.parent()
Linear order species
Bases: sage.combinat.species.structure.GenericSpeciesStructure
EXAMPLES:
sage: P = species.PartitionSpecies()
sage: s = (P+P).structures([1,2,3]).random_element(); s
{{1, 3}, {2}}
sage: s.canonical_label()
{{1, 2}, {3}}
EXAMPLES:
sage: P = species.PartitionSpecies()
sage: s = (P+P).structures([1,2,3]).random_element(); s
{{1, 3}, {2}}
sage: s.labels()
[{1, 3}, {2}]
sage: type(_)
<type 'list'>
EXAMPLES:
sage: P = species.PartitionSpecies()
sage: s = (P+P).structures([1,2,3]).random_element(); s
{{1, 3}, {2}}
sage: s.transport(PermutationGroupElement((2,3)))
{{1, 2}, {3}}
Bases: sage.combinat.combinat.CombinatorialClass
EXAMPLES:
sage: F = species.SetSpecies()
sage: F.structures([1,2,3]).cardinality()
1