πŸ“˜ Moore families

Contents

πŸ“˜ Moore families#

In mathematics, a Moore family (or a closure system) on a set \(E\) is a family \(\mathcal{F}\) of subsets of \(E\) that:

  1. Contains \(E\) itself: \(E \in \mathcal{F}\)

  2. Is closed under arbitrary intersections: for any subfamily

\(\mathcal{G} \subseteq \mathcal{F}\), we have \(\bigcap \mathcal{G} \in \mathcal{F}\)

The intersection property ensures that for any subset \(A \subseteq E\), there exists a smallest element of \(\mathcal{F}\) containing \(A\), called the closure of \(A\).

Examples#

Using the ExtensibleMooreFamily (or the frozen FrozenMooreFamily) from the galactic.algebras.closure.core module, you can create Moore families:

from IPython.display import HTML
from galactic.algebras.closure.core import ExtensibleMooreFamily
from galactic.algebras.lattice.examples.color.core import Color
from galactic.algebras.closure.examples.color.core import Colors
family = ExtensibleMooreFamily()
family.extend(
    [
        Colors([Color(red=1, blue=0.5), Color(blue=1, red=0.5)]),
        Colors([Color(blue=1, green=0.5), Color(green=1)]),
    ],
)
display(*family.essentials)
../_images/060888dbd8890e8455bca42214a63c9a1aacddc4d7a1c3a81ab60bf5b59905e8.svg ../_images/5a299d185fd09333d523dbaac53efd4a27eb8d334716ff58c5791d03488ac42e.svg ../_images/6887fb67fb49fdc62c78e735bb655666a88a95b019ae8f19f01a4e47da9bab49.svg ../_images/cdf5e20549e31547adf02af52474a3178a143958654cb27182c1bab006cdc70a.svg ../_images/35adf4c51a6a0758685dab7e9a1751d937ab7113ec0c83bab4b9954477ed36d7.svg ../_images/df695e9a530aa5aae0381126ece1cfa4427d020d88702ddc46ca17ccc020ee64.svg

Moore families are lattices of closed sets and can be visualized in the GALACTIC framework:

from galactic.algebras.closure.examples.color.viewer import ColorsRenderer
from galactic.algebras.poset.viewer import HasseDiagram
diagram = HasseDiagram[Colors](family, domain_renderer=ColorsRenderer())
diagram
../_images/40bc7b2ec7a8a9a758118a2bfb945ccc7efdfb8f18d8be10df293a9b2afa64b7.svg

In the GALACTIC framework, you can get the join-irreducible and meet-irreducible closed sets of a Moore family using the join_irreducible and meet_irreducible properties:

display(*family.join_irreducible, HTML("<br>"))
display(*family.meet_irreducible)
../_images/b8c82ceedda89967934fd82ebb594c6db27e993cd42bd58411d8bb62f77b50b1.svg ../_images/74ee9b3368639a2fe40565d4acaab52db1734e59af997866cff6a1cc2e6ee2ec.svg

../_images/b8c82ceedda89967934fd82ebb594c6db27e993cd42bd58411d8bb62f77b50b1.svg ../_images/74ee9b3368639a2fe40565d4acaab52db1734e59af997866cff6a1cc2e6ee2ec.svg

It’s possible to get the principal closed set where an element appears for the first time using the principals property:

for elem, closed in family.principals.items():
    display(elem, closed, HTML("<br>"))
../_images/060888dbd8890e8455bca42214a63c9a1aacddc4d7a1c3a81ab60bf5b59905e8.svg ../_images/b8c82ceedda89967934fd82ebb594c6db27e993cd42bd58411d8bb62f77b50b1.svg

../_images/5a299d185fd09333d523dbaac53efd4a27eb8d334716ff58c5791d03488ac42e.svg ../_images/b8c82ceedda89967934fd82ebb594c6db27e993cd42bd58411d8bb62f77b50b1.svg

../_images/df695e9a530aa5aae0381126ece1cfa4427d020d88702ddc46ca17ccc020ee64.svg ../_images/74ee9b3368639a2fe40565d4acaab52db1734e59af997866cff6a1cc2e6ee2ec.svg

../_images/cdf5e20549e31547adf02af52474a3178a143958654cb27182c1bab006cdc70a.svg ../_images/e2a5096e4ecaa458f6a1f36ab7d332c2cb48acfc4c8191c7f6acc7e54d5b645e.svg

../_images/6887fb67fb49fdc62c78e735bb655666a88a95b019ae8f19f01a4e47da9bab49.svg ../_images/e2a5096e4ecaa458f6a1f36ab7d332c2cb48acfc4c8191c7f6acc7e54d5b645e.svg

../_images/35adf4c51a6a0758685dab7e9a1751d937ab7113ec0c83bab4b9954477ed36d7.svg ../_images/74ee9b3368639a2fe40565d4acaab52db1734e59af997866cff6a1cc2e6ee2ec.svg

family.extend(
    [
        Colors([Color(red=1), Color(green=0.5)]),
    ]
)
for elem, closed in family.principals.items():
    display(elem, closed, HTML("<br>"))
diagram
../_images/060888dbd8890e8455bca42214a63c9a1aacddc4d7a1c3a81ab60bf5b59905e8.svg ../_images/b8c82ceedda89967934fd82ebb594c6db27e993cd42bd58411d8bb62f77b50b1.svg

../_images/5a299d185fd09333d523dbaac53efd4a27eb8d334716ff58c5791d03488ac42e.svg ../_images/b8c82ceedda89967934fd82ebb594c6db27e993cd42bd58411d8bb62f77b50b1.svg

../_images/df695e9a530aa5aae0381126ece1cfa4427d020d88702ddc46ca17ccc020ee64.svg ../_images/74ee9b3368639a2fe40565d4acaab52db1734e59af997866cff6a1cc2e6ee2ec.svg

../_images/cdf5e20549e31547adf02af52474a3178a143958654cb27182c1bab006cdc70a.svg ../_images/e2a5096e4ecaa458f6a1f36ab7d332c2cb48acfc4c8191c7f6acc7e54d5b645e.svg

../_images/6887fb67fb49fdc62c78e735bb655666a88a95b019ae8f19f01a4e47da9bab49.svg ../_images/0960a74e6d416e1fe8b9f6f1eb52845ea04929658c9b79839998a6145421041b.svg

../_images/35adf4c51a6a0758685dab7e9a1751d937ab7113ec0c83bab4b9954477ed36d7.svg ../_images/4a39495e144da1d3f973185cd84dfb1753ded2eb0e2e673c45e689b032311a20.svg

../_images/56b75fe4618b352611fc774b2e48a190f2d2b25ad6f3d5ec3bed328218660f72.svg ../_images/0960a74e6d416e1fe8b9f6f1eb52845ea04929658c9b79839998a6145421041b.svg

../_images/f6241d69cf6bd4e75763dd3fd68d840ef21d5cb30c0bce8713346ff59e9fa0b8.svg ../_images/53b4e6583cbbd386d96a787213aed97de6add9e86369579eed5e2ebbac97efee.svg

../_images/263960d6c5c7edfbfd2a599557f18cee98a71869141a333e1a6ce645f35f8ce9.svg ../_images/b39980f2fb10c2690c355627c490eb662351d6390dc25df3867151fdff8661ff.svg

../_images/021082dd542532f9fd564e718867c2b80902e718ff82cbfef39e31bda5c63394.svg

The irreducibles are:

display(*family.join_irreducible, HTML("<br>"))
display(*family.meet_irreducible)
../_images/b39980f2fb10c2690c355627c490eb662351d6390dc25df3867151fdff8661ff.svg ../_images/4a39495e144da1d3f973185cd84dfb1753ded2eb0e2e673c45e689b032311a20.svg ../_images/b8c82ceedda89967934fd82ebb594c6db27e993cd42bd58411d8bb62f77b50b1.svg ../_images/74ee9b3368639a2fe40565d4acaab52db1734e59af997866cff6a1cc2e6ee2ec.svg ../_images/0960a74e6d416e1fe8b9f6f1eb52845ea04929658c9b79839998a6145421041b.svg

../_images/b8c82ceedda89967934fd82ebb594c6db27e993cd42bd58411d8bb62f77b50b1.svg ../_images/0960a74e6d416e1fe8b9f6f1eb52845ea04929658c9b79839998a6145421041b.svg ../_images/74ee9b3368639a2fe40565d4acaab52db1734e59af997866cff6a1cc2e6ee2ec.svg ../_images/53b4e6583cbbd386d96a787213aed97de6add9e86369579eed5e2ebbac97efee.svg

It’s also possible to get the elements introduced by a closed set in the family using the introduced_elems() method:

for closed in family:
    display(closed, *family.introduced_elems(closed), HTML("<br>"))
../_images/e2a5096e4ecaa458f6a1f36ab7d332c2cb48acfc4c8191c7f6acc7e54d5b645e.svg ../_images/cdf5e20549e31547adf02af52474a3178a143958654cb27182c1bab006cdc70a.svg

../_images/53b4e6583cbbd386d96a787213aed97de6add9e86369579eed5e2ebbac97efee.svg ../_images/f6241d69cf6bd4e75763dd3fd68d840ef21d5cb30c0bce8713346ff59e9fa0b8.svg

../_images/74ee9b3368639a2fe40565d4acaab52db1734e59af997866cff6a1cc2e6ee2ec.svg ../_images/df695e9a530aa5aae0381126ece1cfa4427d020d88702ddc46ca17ccc020ee64.svg

../_images/b39980f2fb10c2690c355627c490eb662351d6390dc25df3867151fdff8661ff.svg ../_images/263960d6c5c7edfbfd2a599557f18cee98a71869141a333e1a6ce645f35f8ce9.svg

../_images/0960a74e6d416e1fe8b9f6f1eb52845ea04929658c9b79839998a6145421041b.svg ../_images/6887fb67fb49fdc62c78e735bb655666a88a95b019ae8f19f01a4e47da9bab49.svg ../_images/56b75fe4618b352611fc774b2e48a190f2d2b25ad6f3d5ec3bed328218660f72.svg

../_images/4a39495e144da1d3f973185cd84dfb1753ded2eb0e2e673c45e689b032311a20.svg ../_images/35adf4c51a6a0758685dab7e9a1751d937ab7113ec0c83bab4b9954477ed36d7.svg

../_images/b8c82ceedda89967934fd82ebb594c6db27e993cd42bd58411d8bb62f77b50b1.svg ../_images/060888dbd8890e8455bca42214a63c9a1aacddc4d7a1c3a81ab60bf5b59905e8.svg ../_images/5a299d185fd09333d523dbaac53efd4a27eb8d334716ff58c5791d03488ac42e.svg

../_images/c9f6dc1e630275fac3800ac8be95ee2e28a6d6a744c6d41b8191c19023bff115.svg