Bubble and Shuffle lattices

Shuffle lattices were defined by Greene in [Gre1988].

Bubble lattices were introduced by McConville and Mühle in [MacCM2022].

The Bubble lattice \(B_{m,n}\) and the Shuffle lattice \(S_{m,n}\) share the same underlying set, namely all shuffles of two subwords of the two words \(X = (x_1,x_2,\ldots,x_{m})\) and \(Y = (y_1,y_2,\ldots,y_n)\).

Note

In the implementation here, the underlying set is the set of all shuffles of subsets of \(\{-m,\ldots,-1\}\) with subsets of \(\{1,\ldots,n\}\).

sage.combinat.posets.bubble_shuffle.BubblePoset(m, n)[source]

Return the Bubble lattice \(B_{m,n}\).

Bubble lattices were introduced by McConville and Mühle in [MacCM2022].

The Bubble lattice \(B_{m,n}\) and the Shuffle lattice \(S_{m,n}\) share the same underlying set, namely all shuffles of two subwords of the two words \(X = (x_1,x_2,\ldots,x_{m})\) and \(Y = (y_1,y_2,\ldots,y_n)\).

The Bubble poset is an extension of the Shuffle poset, by adding the exchange of adjacent letters from \(X\) and \(Y\), from \(xy\) to \(yx\).

EXAMPLES:

sage: P = posets.BubblePoset(2,1); P
Finite lattice containing 12 elements
sage: P.zeta_polynomial()
1/40*q^5 + 7/24*q^4 + 23/24*q^3 - 7/24*q^2 + 1/60*q
>>> from sage.all import *
>>> P = posets.BubblePoset(Integer(2),Integer(1)); P
Finite lattice containing 12 elements
>>> P.zeta_polynomial()
1/40*q^5 + 7/24*q^4 + 23/24*q^3 - 7/24*q^2 + 1/60*q
sage.combinat.posets.bubble_shuffle.ShufflePoset(m, n)[source]

Return the Shuffle lattice \(S_{m,n}\).

Shuffle lattices were defined by Greene in [Gre1988].

The Bubble lattice \(B_{m,n}\) and the Shuffle lattice \(S_{m,n}\) share the same underlying set, namely all shuffles of two subwords of the two words \(X = (x_1,x_2,\ldots,x_{m})\) and \(Y = (y_1,y_2,\ldots,y_n)\).

The partial order in the Shuffle poset is defined by either inserting a letter from \(Y\) or deleting a letter from \(X\).

See also

BubblePoset()

EXAMPLES:

sage: P = posets.ShufflePoset(2,1); P
Finite lattice containing 12 elements
sage: P.zeta_polynomial()
2*q^3 - q^2
>>> from sage.all import *
>>> P = posets.ShufflePoset(Integer(2),Integer(1)); P
Finite lattice containing 12 elements
>>> P.zeta_polynomial()
2*q^3 - q^2
sage.combinat.posets.bubble_shuffle.bubble_cardinality(m, n)[source]

Return the cardinality of the Bubble lattice \(B_{m,n}\).

We have

\[|B_{m,n}| = \sum_{i=0}^m \sum_{j=0}^n \binom{i+j}{j} \binom{m}{i} \binom{n}{j}.\]

This is also the cardinality of the Shuffle lattice \(S_{m,n}\).

INPUT:

  • m – integer

  • n – integer

EXAMPLES:

sage: from sage.combinat.posets.bubble_shuffle import bubble_cardinality
sage: bubble_cardinality(2,1)
12
>>> from sage.all import *
>>> from sage.combinat.posets.bubble_shuffle import bubble_cardinality
>>> bubble_cardinality(Integer(2),Integer(1))
12
sage.combinat.posets.bubble_shuffle.bubble_coverings(m, n, mot, transpose=True)[source]

Return generating relations of the Bubble lattice \(B_{m,n}\).

Note that these relations include the cover relations, but not only them.

This can also produce covers in the Shuffle lattice \(S_{m,n}\).

INPUT:

  • m – integer

  • n – integer

  • mot – element of \(B_{m,n}\) as a tuple

  • transpose – boolean (default: True) whether to return covers in the Bubble lattice or in the Shuffle lattice

EXAMPLES:

sage: from sage.combinat.posets.bubble_shuffle import bubble_coverings
sage: list(bubble_coverings(2, 1, (-2, 1)))
[(1,), (1, -2)]
sage: list(bubble_coverings(2, 1, (-2, 1), False))
[(1,)]
>>> from sage.all import *
>>> from sage.combinat.posets.bubble_shuffle import bubble_coverings
>>> list(bubble_coverings(Integer(2), Integer(1), (-Integer(2), Integer(1))))
[(1,), (1, -2)]
>>> list(bubble_coverings(Integer(2), Integer(1), (-Integer(2), Integer(1)), False))
[(1,)]
sage.combinat.posets.bubble_shuffle.bubble_set(m, n)[source]

Return the underlying set of the Bubble lattice \(B_{m,n}\).

This is the set of all shuffles of subsets of \(\{-m,\ldots,-1\}\) with subsets of \(\{1,\ldots,n\}\).

This is also the underlying set of the Shuffle lattice \(S_{m,n}\).

INPUT:

  • m – integer

  • n – integer

EXAMPLES:

sage: from sage.combinat.posets.bubble_shuffle import bubble_set
sage: list(bubble_set(2,1))
[(),
 (1,),
 (-1,),
 (-1, 1),
 (1, -1),
 (-2,),
 (-2, 1),
 (1, -2),
 (-1, -2),
 (-1, -2, 1),
 (1, -1, -2),
 (-1, 1, -2)]
>>> from sage.all import *
>>> from sage.combinat.posets.bubble_shuffle import bubble_set
>>> list(bubble_set(Integer(2),Integer(1)))
[(),
 (1,),
 (-1,),
 (-1, 1),
 (1, -1),
 (-2,),
 (-2, 1),
 (1, -2),
 (-1, -2),
 (-1, -2, 1),
 (1, -1, -2),
 (-1, 1, -2)]
sage.combinat.posets.bubble_shuffle.noncrossing_bipartite_complex(m, n)[source]

Return a simplicial complex related to the Bubble lattice \(B_{m,n}\).

This is a pure spherical simplicial complex, whose flip graph is isomorphic to the Hasse diagram of \(B_{m,n}\).

See also

BubblePoset()

EXAMPLES:

sage: C = simplicial_complexes.NoncrossingBipartiteComplex(2,1)
sage: H = C.flip_graph()
sage: P = posets.BubblePoset(2,1)
sage: H.is_isomorphic(P.hasse_diagram().to_undirected())
True
>>> from sage.all import *
>>> C = simplicial_complexes.NoncrossingBipartiteComplex(Integer(2),Integer(1))
>>> H = C.flip_graph()
>>> P = posets.BubblePoset(Integer(2),Integer(1))
>>> H.is_isomorphic(P.hasse_diagram().to_undirected())
True