πŸ“˜ Antitone Galois connections

πŸ“˜ Antitone Galois connections#

Antitone Galois connections are a fundamental concept in order theory and lattice theory, establishing a relationship between two partially ordered sets (posets) through a pair of antitone functions that are adjoint to each other.

In the GALACTIC framework, antitone Galois connections are implemented using specific classes and methods.

Closure operators#

The GaloisConnection class from the galactic.algebras.concept.core module represents an antitone Galois connection between two posets (parts of two universes). It provides methods to create and manipulate antitone Galois connections, as well as to compute the associated closure operators.

from galactic.algebras.concept.core import (
    GaloisConnection,
    create_context_from_dataset
)
from galactic.algebras.concept.examples.animals.core import ANIMAL_ATTRS, ANIMAL_DATA
context = create_context_from_dataset(ANIMAL_DATA, ANIMAL_ATTRS)
connection = GaloisConnection(context)
display(connection, connection.polarities, connection.closures, connection.context)
<galactic.algebras.concept.core.GaloisConnection object at 0x7353a963c6c0>
(<galactic.algebras.concept.core.AttrPolarity object at 0x7353a9666e30>,
 <galactic.algebras.concept.core.ItemPolarity object at 0x7353a9666f50>)
(compose(<galactic.algebras.concept.core.ItemPolarity object at 0x7353a9666f50>, <galactic.algebras.concept.core.AttrPolarity object at 0x7353a9666e30>),
 compose(<galactic.algebras.concept.core.AttrPolarity object at 0x7353a9666e30>, <galactic.algebras.concept.core.ItemPolarity object at 0x7353a9666f50>))
<galactic.algebras.concept.core.Context object at 0x7353a9f3db20>

The closures operators can be accessed using the closures attribute of the GaloisConnection instance. These operators allow for the computation of the closure of a collection of items or attributes within the context of the antitone Galois connection.

item_closure = connection.closures[0]
attr_closure = connection.closures[1]
display(item_closure, attr_closure)
closed_items = item_closure(
    [
        context.domain.item(key='Cat'),
        context.domain.item(key='Dog'),
    ],
)
display(closed_items, list(closed_items), len(closed_items))
closed_attrs = attr_closure(
    [
        context.co_domain.attr(name='feathers'),
    ],
)
display(closed_attrs, list(closed_attrs), len(closed_attrs))
compose(<galactic.algebras.concept.core.ItemPolarity object at 0x7353a9666f50>, <galactic.algebras.concept.core.AttrPolarity object at 0x7353a9666e30>)
compose(<galactic.algebras.concept.core.AttrPolarity object at 0x7353a9666e30>, <galactic.algebras.concept.core.ItemPolarity object at 0x7353a9666f50>)
<galactic.algebras.concept.core.Extent object at 0x7353a9ef1280>
[Item(key='Fox', value=<list object at 0x7353a966ce00>),
 Item(key='Dog', value=<list object at 0x7353a966ce40>),
 Item(key='Wolf', value=<list object at 0x7353a966ce80>),
 Item(key='Cat', value=<list object at 0x7353a966cec0>),
 Item(key='Tiger', value=<list object at 0x7353a966cf00>),
 Item(key='Lion', value=<list object at 0x7353a966cf40>),
 Item(key='Horse', value=<list object at 0x7353a966cf80>),
 Item(key='Zebra', value=<list object at 0x7353a966cfc0>)]
8
<galactic.algebras.concept.core.Intent object at 0x7353a967ec80>
[<function twolegs at 0x7353a9670900>, <function feathers at 0x7353a9656f20>]
2

Closed sets of items and attributes#

The application of the closure operators demonstrates how the antitone Galois connection can be used to derive closed sets of items and attributes based on the relationships defined in the context. The first closure operation computes the closure of the items β€œCat” and β€œDog”, resulting in a closed set that includes all items sharing the same attributes using the Extent class. The second closure operation computes the closure of the attribute β€œfeathers”, resulting in a closed set of attributes that are common to all items possessing that attribute using the Intent class.

The Extent and Intent classes implement the Closed protocol from the galactic.algebras.closure.core module, providing a structured way to represent closed sets of items and attributes within the framework of antitone Galois connections.

from galactic.algebras.concept.core import Intent, Extent
extent_1 = Extent(
    connection=connection,
    attrs=[context.co_domain.attr(name='feathers')],
)
extent_2 = Extent(
    connection=connection,
    attrs=[context.co_domain.attr(name='medium')],
)
join = extent_1 | extent_2
meet = extent_1 & extent_2
display(extent_1, list(extent_1), len(extent_1))
display(extent_2, list(extent_2), len(extent_2))
display(join, list(join), len(join))
display(meet, list(meet), len(meet))
<galactic.algebras.concept.core.Extent object at 0x7353a968e700>
[Item(key='Dove', value=<list object at 0x7353a966c980>),
 Item(key='Hen', value=<list object at 0x7353a966ccc0>),
 Item(key='Duck', value=<list object at 0x7353a966c9c0>),
 Item(key='Goose', value=<list object at 0x7353a966cd00>),
 Item(key='Owl', value=<list object at 0x7353a966cd40>),
 Item(key='Hawk', value=<list object at 0x7353a966cd80>),
 Item(key='Eagle', value=<list object at 0x7353a966cdc0>)]
7
<galactic.algebras.concept.core.Extent object at 0x7353a968e5c0>
[Item(key='Eagle', value=<list object at 0x7353a966cdc0>),
 Item(key='Fox', value=<list object at 0x7353a966ce00>),
 Item(key='Dog', value=<list object at 0x7353a966ce40>),
 Item(key='Wolf', value=<list object at 0x7353a966ce80>)]
4
<galactic.algebras.concept.core.Extent object at 0x7353a9effac0>
[Item(key='Dove', value=<list object at 0x7353a966c980>),
 Item(key='Hen', value=<list object at 0x7353a966ccc0>),
 Item(key='Duck', value=<list object at 0x7353a966c9c0>),
 Item(key='Goose', value=<list object at 0x7353a966cd00>),
 Item(key='Owl', value=<list object at 0x7353a966cd40>),
 Item(key='Hawk', value=<list object at 0x7353a966cd80>),
 Item(key='Eagle', value=<list object at 0x7353a966cdc0>),
 Item(key='Fox', value=<list object at 0x7353a966ce00>),
 Item(key='Dog', value=<list object at 0x7353a966ce40>),
 Item(key='Wolf', value=<list object at 0x7353a966ce80>),
 Item(key='Cat', value=<list object at 0x7353a966cec0>),
 Item(key='Tiger', value=<list object at 0x7353a966cf00>),
 Item(key='Lion', value=<list object at 0x7353a966cf40>),
 Item(key='Horse', value=<list object at 0x7353a966cf80>),
 Item(key='Zebra', value=<list object at 0x7353a966cfc0>),
 Item(key='Cow', value=<list object at 0x7353a966d000>)]
16
<galactic.algebras.concept.core.Extent object at 0x7353a968e240>
[Item(key='Eagle', value=<list object at 0x7353a966cdc0>)]
1
intent_1 = Intent(
    connection=connection,
    items=[context.domain.item(key='Zebra')],
)
intent_2 = Intent(
    connection=connection,
    items=[context.domain.item(key='Wolf')],
)
join = intent_1 | intent_2
meet = intent_1 & intent_2
display(intent_1, list(intent_1), len(intent_1))
display(intent_2, list(intent_2), len(intent_2))
display(join, list(join), len(join))
display(meet, list(meet), len(meet))
<galactic.algebras.concept.core.Intent object at 0x7353a968da80>
[<function big at 0x7353a9670540>,
 <function fourlegs at 0x7353a9670cc0>,
 <function hair at 0x7353a9671080>,
 <function run at 0x7353a9671ee0>,
 <function mane at 0x7353a9672660>,
 <function hooves at 0x7353a9672a20>]
6
<galactic.algebras.concept.core.Intent object at 0x7353a968da00>
[<function medium at 0x7353a9670400>,
 <function fourlegs at 0x7353a9670cc0>,
 <function hair at 0x7353a9671080>,
 <function run at 0x7353a9671ee0>,
 <function hunt at 0x7353a96722a0>,
 <function mane at 0x7353a9672660>]
6
<galactic.algebras.concept.core.Intent object at 0x7353a98b1f80>
[<function small at 0x7353a9f2ca40>,
 <function medium at 0x7353a9670400>,
 <function big at 0x7353a9670540>,
 <function twolegs at 0x7353a9670900>,
 <function fourlegs at 0x7353a9670cc0>,
 <function hair at 0x7353a9671080>,
 <function feathers at 0x7353a9656f20>,
 <function fly at 0x7353a9671760>,
 <function swim at 0x7353a9671b20>,
 <function run at 0x7353a9671ee0>,
 <function hunt at 0x7353a96722a0>,
 <function mane at 0x7353a9672660>,
 <function hooves at 0x7353a9672a20>]
13
<galactic.algebras.concept.core.Intent object at 0x7353a966ffc0>
[<function fourlegs at 0x7353a9670cc0>,
 <function hair at 0x7353a9671080>,
 <function run at 0x7353a9671ee0>,
 <function mane at 0x7353a9672660>]
4

Iterable given in arguments to constructors can be any iterable including instance of the other closed set class (in that case, the operation is optimized since intents and extents are represented by bitmaps).

extent_from_intent = Extent(
    connection=connection,
    attrs=intent_1,
)
display(extent_from_intent, list(extent_from_intent), len(extent_from_intent))
intent_from_extent = Intent(
    connection=connection,
    items=extent_1,
)
display(intent_from_extent, list(intent_from_extent), len(intent_from_extent))
<galactic.algebras.concept.core.Extent object at 0x7353a967d040>
[Item(key='Horse', value=<list object at 0x7353a966cf80>),
 Item(key='Zebra', value=<list object at 0x7353a966cfc0>)]
2
<galactic.algebras.concept.core.Intent object at 0x7353a967f740>
[<function twolegs at 0x7353a9670900>, <function feathers at 0x7353a9656f20>]
2