Mobile posets¶
- class sage.combinat.posets.mobile.MobilePoset(hasse_diagram, elements, category, facade, key, ribbon=None, check=True)[source]¶
Bases:
FinitePoset
A mobile poset.
Mobile posets are an extension of d-complete posets which permit a determinant formula for counting linear extensions. They are formed by having a ribbon poset with d-complete posets ‘hanging’ below it and at most one d-complete poset above it, known as the anchor. See [GGMM2020] for the definition.
EXAMPLES:
sage: P = posets.MobilePoset(posets.RibbonPoset(7, [1,3]), # needs sage.combinat sage.modules ....: {1: [posets.YoungDiagramPoset([3, 2], dual=True)], ....: 3: [posets.DoubleTailedDiamond(6)]}, ....: anchor=(4, 2, posets.ChainPoset(6))) sage: len(P._ribbon) # needs sage.combinat sage.modules 8 sage: P._anchor # needs sage.combinat sage.modules (4, 5)
>>> from sage.all import * >>> P = posets.MobilePoset(posets.RibbonPoset(Integer(7), [Integer(1),Integer(3)]), # needs sage.combinat sage.modules ... {Integer(1): [posets.YoungDiagramPoset([Integer(3), Integer(2)], dual=True)], ... Integer(3): [posets.DoubleTailedDiamond(Integer(6))]}, ... anchor=(Integer(4), Integer(2), posets.ChainPoset(Integer(6)))) >>> len(P._ribbon) # needs sage.combinat sage.modules 8 >>> P._anchor # needs sage.combinat sage.modules (4, 5)
This example is Example 5.9 in [GGMM2020]:
sage: P1 = posets.MobilePoset(posets.RibbonPoset(8, [2,3,4]), ....: {4: [posets.ChainPoset(1)]}, ....: anchor=(3, 0, posets.ChainPoset(1))) sage: sorted([P1._element_to_vertex(i) for i in P1._ribbon]) [0, 1, 2, 6, 7, 9] sage: P1._anchor (3, 2) sage: P2 = posets.MobilePoset(posets.RibbonPoset(15, [1,3,5,7,9,11,13]), ....: {}, anchor=(8, 0, posets.ChainPoset(1))) sage: sorted(P2._ribbon) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13] sage: P2._anchor (8, (8, 0)) sage: P2.linear_extensions().cardinality() # needs sage.modules 21399440939 sage: EP = posets.MobilePoset(posets.ChainPoset(0), {}) Traceback (most recent call last): ... ValueError: the empty poset is not a mobile poset
>>> from sage.all import * >>> P1 = posets.MobilePoset(posets.RibbonPoset(Integer(8), [Integer(2),Integer(3),Integer(4)]), ... {Integer(4): [posets.ChainPoset(Integer(1))]}, ... anchor=(Integer(3), Integer(0), posets.ChainPoset(Integer(1)))) >>> sorted([P1._element_to_vertex(i) for i in P1._ribbon]) [0, 1, 2, 6, 7, 9] >>> P1._anchor (3, 2) >>> P2 = posets.MobilePoset(posets.RibbonPoset(Integer(15), [Integer(1),Integer(3),Integer(5),Integer(7),Integer(9),Integer(11),Integer(13)]), ... {}, anchor=(Integer(8), Integer(0), posets.ChainPoset(Integer(1)))) >>> sorted(P2._ribbon) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13] >>> P2._anchor (8, (8, 0)) >>> P2.linear_extensions().cardinality() # needs sage.modules 21399440939 >>> EP = posets.MobilePoset(posets.ChainPoset(Integer(0)), {}) Traceback (most recent call last): ... ValueError: the empty poset is not a mobile poset
- anchor()[source]¶
Return the anchor of the mobile poset.
EXAMPLES:
sage: from sage.combinat.posets.mobile import MobilePoset sage: M2 = MobilePoset(Poset([[0,1,2,3,4,5,6,7,8], ....: [(1,0),(3,0),(2,1),(2,3),(4,3),(5,4),(7,4),(7,8)]])) sage: M2.anchor() (4, 3) sage: M3 = MobilePoset(Posets.RibbonPoset(5, [1,2])) sage: M3.anchor() is None True
>>> from sage.all import * >>> from sage.combinat.posets.mobile import MobilePoset >>> M2 = MobilePoset(Poset([[Integer(0),Integer(1),Integer(2),Integer(3),Integer(4),Integer(5),Integer(6),Integer(7),Integer(8)], ... [(Integer(1),Integer(0)),(Integer(3),Integer(0)),(Integer(2),Integer(1)),(Integer(2),Integer(3)),(Integer(4),Integer(3)),(Integer(5),Integer(4)),(Integer(7),Integer(4)),(Integer(7),Integer(8))]])) >>> M2.anchor() (4, 3) >>> M3 = MobilePoset(Posets.RibbonPoset(Integer(5), [Integer(1),Integer(2)])) >>> M3.anchor() is None True
- ribbon()[source]¶
Return the ribbon of the mobile poset.
EXAMPLES:
sage: from sage.combinat.posets.mobile import MobilePoset sage: M3 = MobilePoset(Posets.RibbonPoset(5, [1,2])) sage: sorted(M3.ribbon()) [1, 2, 3, 4]
>>> from sage.all import * >>> from sage.combinat.posets.mobile import MobilePoset >>> M3 = MobilePoset(Posets.RibbonPoset(Integer(5), [Integer(1),Integer(2)])) >>> sorted(M3.ribbon()) [1, 2, 3, 4]