Skip to content

Commit df3a3af

Browse files
committed
use the finer new categories for some lattice posets in library
1 parent 4cdd703 commit df3a3af

File tree

6 files changed

+41
-21
lines changed

6 files changed

+41
-21
lines changed

src/sage/categories/finite_coxeter_groups.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -570,6 +570,7 @@ def m_cambrian_lattice(self, c, m=1, on_roots=False):
570570
sage: CoxeterGroup(["A",2]).m_cambrian_lattice((1,2),2)
571571
Finite lattice containing 12 elements
572572
"""
573+
from sage.categories.finite_lattice_posets import FiniteLatticePosets
573574
from sage.combinat.posets.lattices import LatticePoset
574575
if hasattr(c, "reduced_word"):
575576
c = c.reduced_word()
@@ -627,7 +628,11 @@ def m_cambrian_lattice(self, c, m=1, on_roots=False):
627628
if cov_element not in elements:
628629
new.add(cov_element)
629630
covers.append((new_element, cov_element))
630-
return LatticePoset([elements, covers], cover_relations=True)
631+
cat = FiniteLatticePosets()
632+
if m == 1:
633+
cat = cat.CongruenceUniform().Trim()
634+
return LatticePoset([elements, covers], cover_relations=True,
635+
category=cat)
631636

632637
def cambrian_lattice(self, c, on_roots=False):
633638
"""

src/sage/combinat/nu_tamari_lattice.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
#
6767
# https://www.gnu.org/licenses/
6868
# ****************************************************************************
69+
from sage.categories.finite_lattice_posets import FiniteLatticePosets
6970
from sage.combinat.nu_dyck_word import NuDyckWords, NuDyckWord
7071
from sage.combinat.posets.lattices import LatticePoset
7172

@@ -111,7 +112,8 @@ def NuTamariLattice(nu):
111112
new_ndw = ndw.mutate(i)
112113
if new_ndw is not None:
113114
covers.append([ndw, new_ndw])
114-
return LatticePoset([elements, covers])
115+
cat = FiniteLatticePosets().Trim()
116+
return LatticePoset([elements, covers], cover_relations=True, category=cat)
115117

116118

117119
def delta_swap(p, k, delta):
@@ -220,7 +222,7 @@ def AltNuTamariLattice(nu, delta=None):
220222
Finite lattice containing 7 elements
221223
sage: AltNuTamariLattice('01001') == AltNuTamariLattice('01001', [2, 0])
222224
True
223-
sage: nu = '00100100101'; P = AltNuTamariLattice(nu); Q = NuTamariLattice(nu); P == Q
225+
sage: nu = '00100100101'; P = AltNuTamariLattice(nu); Q = NuTamariLattice(nu); P.is_isomorphic(Q)
224226
True
225227
226228
TESTS::

src/sage/combinat/posets/bubble_shuffle.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"""
1717
from typing import Iterator
1818

19+
from sage.categories.finite_lattice_posets import FiniteLatticePosets
1920
from sage.combinat.posets.lattices import LatticePoset
2021
from sage.combinat.subset import subsets
2122
from sage.combinat.shuffle import ShuffleProduct
@@ -169,7 +170,8 @@ def BubblePoset(m, n) -> LatticePoset:
169170

170171
dg = DiGraph([(x, y) for x in bubbles for y in bubble_coverings(m, n, x)])
171172
# here we have more than just the cover relations
172-
return LatticePoset(dg)
173+
cat = FiniteLatticePosets().CongruenceUniform().Extremal()
174+
return LatticePoset(dg, category=cat)
173175

174176

175177
def ShufflePoset(m, n) -> LatticePoset:

src/sage/combinat/posets/hochschild_lattice.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
"""
1919
from typing import Iterator
2020

21+
from sage.categories.finite_lattice_posets import FiniteLatticePosets
2122
from sage.combinat.posets.lattices import LatticePoset
2223
from sage.graphs.digraph import DiGraph
2324
from sage.topology.simplicial_complex import SimplicialComplex
@@ -101,7 +102,8 @@ def cover_relations(a):
101102

102103
dg = DiGraph({a: list(cover_relations(a)) for a in verts},
103104
format="dict_of_lists")
104-
return LatticePoset(dg.reverse(), cover_relations=True, check=False)
105+
return LatticePoset(dg.reverse(), cover_relations=True, check=False,
106+
category=FiniteLatticePosets().CongruenceUniform())
105107

106108

107109
def hochschild_fan(n):

src/sage/combinat/posets/lattices.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,7 @@ def atoms(self):
336336
return []
337337
return self.upper_covers(self.bottom())
338338

339-
def submeetsemilattice(self, elms):
339+
def submeetsemilattice(self, elms, **kwds):
340340
r"""
341341
Return the smallest meet-subsemilattice containing elements on the given list.
342342
@@ -376,9 +376,9 @@ def submeetsemilattice(self, elms):
376376
gens_remaining.add(self.meet(x, g))
377377
current_set.add(g)
378378

379-
return MeetSemilattice(self.subposet(current_set))
379+
return MeetSemilattice(self.subposet(current_set), **kwds)
380380

381-
def subjoinsemilattice(self, elms):
381+
def subjoinsemilattice(self, elms, **kwds):
382382
r"""
383383
Return the smallest join-subsemilattice containing elements on the given list.
384384
@@ -418,7 +418,7 @@ def subjoinsemilattice(self, elms):
418418
gens_remaining.add(self.join(x, g))
419419
current_set.add(g)
420420

421-
return JoinSemilattice(self.subposet(current_set))
421+
return JoinSemilattice(self.subposet(current_set), **kwds)
422422

423423
def pseudocomplement(self, element):
424424
r"""
@@ -1124,6 +1124,9 @@ def is_stone(self, certificate=False) -> bool | tuple:
11241124
``(False, e)`` such that `e^* \vee e^{**} \neq \top`.
11251125
If ``certificate=False`` return ``True`` or ``False``.
11261126
1127+
If the lattice is not distributive, the result is either
1128+
``(False, None)`` or ``False``.
1129+
11271130
EXAMPLES:
11281131
11291132
Divisor lattices are canonical example::
@@ -1155,7 +1158,7 @@ def is_stone(self, certificate=False) -> bool | tuple:
11551158
# is extended to directed, use that; see comment below.
11561159

11571160
if not self.is_distributive():
1158-
raise ValueError("the lattice is not distributive")
1161+
return (False, None) if certificate else False
11591162

11601163
from sage.arith.misc import factor
11611164
ok = (True, None) if certificate else True
@@ -2264,7 +2267,8 @@ def skeleton(self):
22642267
return self
22652268
elms = [self._vertex_to_element(v) for v in
22662269
self._hasse_diagram.skeleton()]
2267-
return LatticePoset(self.subposet(elms))
2270+
return LatticePoset(self.subposet(elms),
2271+
category=FiniteLatticePosets().Stone())
22682272

22692273
def is_orthocomplemented(self, unique=False) -> bool:
22702274
"""
@@ -3150,7 +3154,7 @@ def is_vertically_decomposable(self, certificate=False) -> bool | tuple:
31503154
return (True, self._vertex_to_element(e))
31513155
return True
31523156

3153-
def sublattice(self, elms):
3157+
def sublattice(self, elms, **kwds):
31543158
r"""
31553159
Return the smallest sublattice containing elements on the given list.
31563160
@@ -3184,7 +3188,7 @@ def sublattice(self, elms):
31843188
gens_remaining.add(self.meet(x, g))
31853189
current_set.add(g)
31863190

3187-
return LatticePoset(self.subposet(current_set))
3191+
return LatticePoset(self.subposet(current_set), **kwds)
31883192

31893193
def is_sublattice(self, other) -> bool:
31903194
"""
@@ -3682,7 +3686,8 @@ def center(self):
36823686
"""
36833687
neutrals = self.neutral_elements()
36843688
comps = self.complements()
3685-
return self.sublattice([e for e in neutrals if e in comps])
3689+
return self.sublattice([e for e in neutrals if e in comps],
3690+
category=FiniteLatticePosets().Stone())
36863691

36873692
def is_dismantlable(self, certificate=False) -> bool | tuple:
36883693
r"""

src/sage/combinat/posets/poset_examples.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ def BooleanLattice(n, facade=None, use_subsets=False):
281281
for y in range(n) if v & (1 << y) == 0]
282282
for v in range(2**n)})
283283
return FiniteLatticePoset(hasse_diagram=D,
284-
category=FiniteLatticePosets(),
284+
category=FiniteLatticePosets().Stone(),
285285
facade=facade)
286286

287287
BubblePoset = staticmethod(bubble_shuffle.BubblePoset)
@@ -332,7 +332,7 @@ def ChainPoset(n, facade=None):
332332
D = DiGraph([range(n), [[x, x + 1] for x in range(n - 1)]],
333333
format='vertices_and_edges')
334334
return FiniteLatticePoset(hasse_diagram=D,
335-
category=FiniteLatticePosets(),
335+
category=FiniteLatticePosets().Stone(),
336336
facade=facade)
337337

338338
@staticmethod
@@ -413,7 +413,8 @@ def PentagonPoset(facade=None):
413413
sage: posets.DiamondPoset(5).is_distributive()
414414
False
415415
"""
416-
return LatticePoset([[1, 2], [4], [3], [4], []], facade=facade)
416+
return LatticePoset([[1, 2], [4], [3], [4], []], facade=facade,
417+
category=FiniteLatticePosets().CongruenceUniform())
417418

418419
@staticmethod
419420
def DiamondPoset(n, facade=None):
@@ -439,8 +440,10 @@ def DiamondPoset(n, facade=None):
439440
c[0] = list(range(1, n - 1))
440441
c[n - 1] = []
441442
D = DiGraph({v: c[v] for v in range(n)}, format='dict_of_lists')
442-
return FiniteLatticePoset(hasse_diagram=D,
443-
category=FiniteLatticePosets(),
443+
cat = FiniteLatticePosets()
444+
if n <= 4:
445+
cat = cat.Stone()
446+
return FiniteLatticePoset(hasse_diagram=D, category=cat,
444447
facade=facade)
445448

446449
@staticmethod
@@ -777,7 +780,8 @@ def ProductOfChains(chain_lengths, facade=None):
777780

778781
def compare(a, b):
779782
return all(x <= y for x, y in zip(a, b))
780-
return LatticePoset([elements, compare], facade=facade)
783+
return LatticePoset([elements, compare], facade=facade,
784+
category=FiniteLatticePosets().Distributive())
781785

782786
@staticmethod
783787
def RandomPoset(n, p):
@@ -1639,7 +1643,7 @@ def DoubleTailedDiamond(n):
16391643
edges.extend([(n, n + 1), (n, n + 2), (n + 1, n + 3), (n + 2, n + 3)])
16401644
edges.extend((i, i + 1) for i in range(n + 3, 2 * n + 2))
16411645
p = DiGraph([list(range(1, 2 * n + 3)), edges])
1642-
return DCompletePoset(p)
1646+
return DCompletePoset(p, category=FiniteLatticePosets().Distributive())
16431647

16441648
@staticmethod
16451649
def PermutationPattern(n):

0 commit comments

Comments
 (0)