|
11 | 11 |
|
12 | 12 | from sage.categories.category_with_axiom import CategoryWithAxiom
|
13 | 13 | from sage.misc.cachefunc import cached_method
|
14 |
| -from sage.categories.category_singleton import Category_singleton |
| 14 | + |
15 | 15 |
|
16 | 16 | class FiniteLatticePosets(CategoryWithAxiom):
|
17 | 17 | r"""
|
@@ -242,264 +242,3 @@ def is_lattice_morphism(self, f, codomain) -> bool:
|
242 | 242 | if f(self.meet(x, y)) != codomain.meet(f(x), f(y)):
|
243 | 243 | return False
|
244 | 244 | return True
|
245 |
| - |
246 |
| - class SubcategoryMethods: |
247 |
| - def Stone(self): |
248 |
| - r""" |
249 |
| - A Stone lattice `(L, \vee, \wedge)` is a pseudo-complemented |
250 |
| - distributive lattice such that `a^* \vee a^{**} = 1`. |
251 |
| -
|
252 |
| - See :wikipedia:`Stone algebra`. |
253 |
| -
|
254 |
| - EXAMPLES:: |
255 |
| -
|
256 |
| - sage: P = posets.DivisorLattice(24) |
257 |
| - sage: P in FiniteLatticePosets().Stone() |
258 |
| - True |
259 |
| - """ |
260 |
| - return self._with_axioms(("Semidistributive", "CongruenceUniform", |
261 |
| - "Distributive", "Stone")) |
262 |
| - |
263 |
| - def Distributive(self): |
264 |
| - r""" |
265 |
| - A lattice `(L, \vee, \wedge)` is distributive if meet |
266 |
| - distributes over join: `x \wedge (y \vee z) = (x \wedge y) |
267 |
| - \vee (x \wedge z)` for every `x,y,z \in L`. |
268 |
| -
|
269 |
| - From duality in lattices, it follows that then also join |
270 |
| - distributes over meet. |
271 |
| -
|
272 |
| - See :wikipedia:`Distributive lattice`. |
273 |
| -
|
274 |
| - EXAMPLES:: |
275 |
| -
|
276 |
| - sage: P = posets.ChainPoset(2).order_ideals_lattice() |
277 |
| - sage: P in FiniteLatticePosets().Distributive() |
278 |
| - True |
279 |
| - """ |
280 |
| - return self._with_axioms(("Semidistributive", "CongruenceUniform", |
281 |
| - "Distributive")) |
282 |
| - |
283 |
| - def CongruenceUniform(self): |
284 |
| - r""" |
285 |
| - A finite lattice `(L, \vee, \wedge)` is congruence uniform if it |
286 |
| - can be constructed by a sequence of interval doublings |
287 |
| - starting with the lattice with one element. |
288 |
| -
|
289 |
| - EXAMPLES:: |
290 |
| -
|
291 |
| - sage: P = posets.TamariLattice(2) |
292 |
| - sage: P in FiniteLatticePosets().CongruenceUniform() |
293 |
| - True |
294 |
| - """ |
295 |
| - return self._with_axioms(("Semidistributive", "CongruenceUniform")) |
296 |
| - |
297 |
| - def Semidistributive(self): |
298 |
| - r""" |
299 |
| - A finite lattice `(L, \vee, \wedge)` is semidistributive if |
300 |
| - it is both join-semidistributive and meet-semidistributive. |
301 |
| -
|
302 |
| - A finite lattice is join-semidistributive if |
303 |
| - for all elements `e, x, y` in the lattice we have |
304 |
| -
|
305 |
| - .. MATH:: |
306 |
| -
|
307 |
| - e \vee x = e \vee y \implies e \vee x = e \vee (x \wedge y) |
308 |
| -
|
309 |
| - Meet-semidistributivity is the dual property. |
310 |
| -
|
311 |
| - EXAMPLES:: |
312 |
| -
|
313 |
| - sage: P = posets.TamariLattice(2) |
314 |
| - sage: P in FiniteLatticePosets().Semidistributive() |
315 |
| - True |
316 |
| - """ |
317 |
| - return self._with_axiom("Semidistributive") |
318 |
| - |
319 |
| - def Trim(self): |
320 |
| - r""" |
321 |
| - A finite lattice `(L, \vee, \wedge)` is trim if it is extremal |
322 |
| - and left modular. |
323 |
| -
|
324 |
| - This notion is defined in [Thom2006]_. |
325 |
| -
|
326 |
| - EXAMPLES:: |
327 |
| -
|
328 |
| - sage: P = posets.TamariLattice(2) |
329 |
| - sage: P in FiniteLatticePosets().Trim() |
330 |
| - True |
331 |
| - """ |
332 |
| - return self._with_axioms(["Extremal", "Trim"]) |
333 |
| - |
334 |
| - def Extremal(self): |
335 |
| - r""" |
336 |
| - A finite lattice `(L, \vee, \wedge)` is extremal if |
337 |
| - if it has a chain of length `n` (containing `n+1` elements) |
338 |
| - and exactly `n` join-irreducibles and `n` meet-irreducibles. |
339 |
| -
|
340 |
| - This notion was defined by George Markowsky. |
341 |
| -
|
342 |
| - EXAMPLES:: |
343 |
| -
|
344 |
| - sage: P = posets.TamariLattice(2) |
345 |
| - sage: P in FiniteLatticePosets().Extremal() |
346 |
| - True |
347 |
| - """ |
348 |
| - return self._with_axiom("Extremal") |
349 |
| - |
350 |
| - class Semidistributive(CategoryWithAxiom): |
351 |
| - """ |
352 |
| - The category of semidistributive lattices. |
353 |
| -
|
354 |
| - EXAMPLES:: |
355 |
| -
|
356 |
| - sage: cat = FiniteLatticePosets().Semidistributive(); cat |
357 |
| - Category of finite semidistributive lattice posets |
358 |
| -
|
359 |
| - sage: cat.super_categories() |
360 |
| - [Category of finite lattice posets] |
361 |
| - """ |
362 |
| - class ParentMethods: |
363 |
| - def is_semidistributive(self): |
364 |
| - """ |
365 |
| - Return whether ``self`` is a semidistributive lattice. |
366 |
| -
|
367 |
| - EXAMPLES:: |
368 |
| -
|
369 |
| - sage: posets.TamariLattice(4).is_semidistributive() |
370 |
| - True |
371 |
| - """ |
372 |
| - return True |
373 |
| - |
374 |
| - class CongruenceUniform(CategoryWithAxiom): |
375 |
| - """ |
376 |
| - The category of congruence uniform lattices. |
377 |
| -
|
378 |
| - EXAMPLES:: |
379 |
| -
|
380 |
| - sage: cat = FiniteLatticePosets().CongruenceUniform(); cat |
381 |
| - Category of finite congruence uniform semidistributive lattice posets |
382 |
| - sage: cat.super_categories() |
383 |
| - [Category of finite semidistributive lattice posets] |
384 |
| - """ |
385 |
| - class ParentMethods: |
386 |
| - def is_congruence_uniform(self): |
387 |
| - """ |
388 |
| - Return whether ``self`` is a congruence uniform lattice. |
389 |
| -
|
390 |
| - EXAMPLES:: |
391 |
| -
|
392 |
| - sage: posets.TamariLattice(4).is_congruence_uniform() |
393 |
| - True |
394 |
| - """ |
395 |
| - return True |
396 |
| - |
397 |
| - class Distributive(CategoryWithAxiom): |
398 |
| - """ |
399 |
| - The category of distributive lattices. |
400 |
| -
|
401 |
| - EXAMPLES:: |
402 |
| -
|
403 |
| - sage: cat = FiniteLatticePosets().Distributive(); cat |
404 |
| - Category of finite distributive lattice posets |
405 |
| -
|
406 |
| - sage: cat.super_categories() |
407 |
| - [Category of finite lattice posets] |
408 |
| - """ |
409 |
| - @cached_method |
410 |
| - def extra_super_categories(self): |
411 |
| - r""" |
412 |
| - Return a list of the super categories of ``self``. |
413 |
| -
|
414 |
| - This encode implications between properties. |
415 |
| -
|
416 |
| - EXAMPLES:: |
417 |
| -
|
418 |
| - sage: FiniteLatticePosets().Distributive().super_categories() |
419 |
| - [Category of finite lattice posets] |
420 |
| - """ |
421 |
| - return [FiniteLatticePosets().Trim()] |
422 |
| - |
423 |
| - class ParentMethods: |
424 |
| - def is_distributive(self): |
425 |
| - """ |
426 |
| - Return whether ``self`` is a distributive lattice. |
427 |
| -
|
428 |
| - EXAMPLES:: |
429 |
| -
|
430 |
| - sage: P = posets.Crown(4).order_ideals_lattice() |
431 |
| - sage: P.is_distributive() |
432 |
| - True |
433 |
| - """ |
434 |
| - return True |
435 |
| - |
436 |
| - class Stone(CategoryWithAxiom): |
437 |
| - """ |
438 |
| - The category of Stone lattices. |
439 |
| -
|
440 |
| - EXAMPLES:: |
441 |
| -
|
442 |
| - sage: cat = FiniteLatticePosets().Stone(); cat |
443 |
| - Category of finite distributive stone lattice posets |
444 |
| -
|
445 |
| - sage: cat.super_categories() |
446 |
| - [Category of finite distributive lattice posets] |
447 |
| - """ |
448 |
| - class ParentMethods: |
449 |
| - def is_stone(self): |
450 |
| - """ |
451 |
| - Return whether ``self`` is a Stone lattice. |
452 |
| -
|
453 |
| - EXAMPLES:: |
454 |
| -
|
455 |
| - sage: posets.DivisorLattice(12).is_stone() |
456 |
| - True |
457 |
| - """ |
458 |
| - return True |
459 |
| - |
460 |
| - class Extremal(CategoryWithAxiom): |
461 |
| - """ |
462 |
| - The category of extremal uniform lattices. |
463 |
| -
|
464 |
| - EXAMPLES:: |
465 |
| -
|
466 |
| - sage: cat = FiniteLatticePosets().Extremal(); cat |
467 |
| - Category of finite extremal lattice posets |
468 |
| -
|
469 |
| - sage: cat.super_categories() |
470 |
| - [Category of finite lattice posets] |
471 |
| - """ |
472 |
| - class ParentMethods: |
473 |
| - def is_extremal(self): |
474 |
| - """ |
475 |
| - Return whether ``self`` is an extremal lattice. |
476 |
| -
|
477 |
| - EXAMPLES:: |
478 |
| -
|
479 |
| - sage: posets.TamariLattice(4).is_extremal() |
480 |
| - True |
481 |
| - """ |
482 |
| - return True |
483 |
| - |
484 |
| - class Trim(CategoryWithAxiom): |
485 |
| - """ |
486 |
| - The category of trim uniform lattices. |
487 |
| -
|
488 |
| - EXAMPLES:: |
489 |
| -
|
490 |
| - sage: cat = FiniteLatticePosets().Trim(); cat |
491 |
| - Category of finite trim extremal lattice posets |
492 |
| - sage: cat.super_categories() |
493 |
| - [Category of finite extremal lattice posets] |
494 |
| - """ |
495 |
| - class ParentMethods: |
496 |
| - def is_trim(self): |
497 |
| - """ |
498 |
| - Return whether ``self`` is a trim lattice. |
499 |
| -
|
500 |
| - EXAMPLES:: |
501 |
| -
|
502 |
| - sage: posets.TamariLattice(4).is_trim() |
503 |
| - True |
504 |
| - """ |
505 |
| - return True |
0 commit comments