πŸ“˜ 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 0x7f821b43e280>
(<galactic.algebras.concept.core.AttrPolarity object at 0x7f821b4578e0>,
 <galactic.algebras.concept.core.ItemPolarity object at 0x7f821b457910>)
(compose(<galactic.algebras.concept.core.ItemPolarity object at 0x7f821b457910>, <galactic.algebras.concept.core.AttrPolarity object at 0x7f821b4578e0>),
 compose(<galactic.algebras.concept.core.AttrPolarity object at 0x7f821b4578e0>, <galactic.algebras.concept.core.ItemPolarity object at 0x7f821b457910>))
<galactic.algebras.concept.core.Context object at 0x7f821c665260>

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 0x7f821b457910>, <galactic.algebras.concept.core.AttrPolarity object at 0x7f821b4578e0>)
compose(<galactic.algebras.concept.core.AttrPolarity object at 0x7f821b4578e0>, <galactic.algebras.concept.core.ItemPolarity object at 0x7f821b457910>)
<galactic.algebras.concept.core.Extent object at 0x7f821c66cb00>
[Item(key='Fox', value=<list object at 0x7f821b470e80>),
 Item(key='Dog', value=<list object at 0x7f821b470ec0>),
 Item(key='Wolf', value=<list object at 0x7f821b470f00>),
 Item(key='Cat', value=<list object at 0x7f821b470f40>),
 Item(key='Tiger', value=<list object at 0x7f821b470f80>),
 Item(key='Lion', value=<list object at 0x7f821b470fc0>),
 Item(key='Horse', value=<list object at 0x7f821b471000>),
 Item(key='Zebra', value=<list object at 0x7f821b471040>)]
8
<galactic.algebras.concept.core.Intent object at 0x7f821be69b40>
[<function twolegs at 0x7f821b4784a0>, <function feathers at 0x7f821b44aac0>]
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,
    [context.co_domain.attr(name='feathers')],
)
extent_2 = Extent(
    connection,
    [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 0x7f821b259640>
[Item(key='Dove', value=<list object at 0x7f821b470a00>),
 Item(key='Hen', value=<list object at 0x7f821b470d40>),
 Item(key='Duck', value=<list object at 0x7f821b470a40>),
 Item(key='Goose', value=<list object at 0x7f821b470d80>),
 Item(key='Owl', value=<list object at 0x7f821b470dc0>),
 Item(key='Hawk', value=<list object at 0x7f821b470e00>),
 Item(key='Eagle', value=<list object at 0x7f821b470e40>)]
7
<galactic.algebras.concept.core.Extent object at 0x7f821b2594c0>
[Item(key='Eagle', value=<list object at 0x7f821b470e40>),
 Item(key='Fox', value=<list object at 0x7f821b470e80>),
 Item(key='Dog', value=<list object at 0x7f821b470ec0>),
 Item(key='Wolf', value=<list object at 0x7f821b470f00>)]
4
<galactic.algebras.concept.core.Extent object at 0x7f821b418040>
[Item(key='Dove', value=<list object at 0x7f821b470a00>),
 Item(key='Hen', value=<list object at 0x7f821b470d40>),
 Item(key='Duck', value=<list object at 0x7f821b470a40>),
 Item(key='Goose', value=<list object at 0x7f821b470d80>),
 Item(key='Owl', value=<list object at 0x7f821b470dc0>),
 Item(key='Hawk', value=<list object at 0x7f821b470e00>),
 Item(key='Eagle', value=<list object at 0x7f821b470e40>),
 Item(key='Fox', value=<list object at 0x7f821b470e80>),
 Item(key='Dog', value=<list object at 0x7f821b470ec0>),
 Item(key='Wolf', value=<list object at 0x7f821b470f00>),
 Item(key='Cat', value=<list object at 0x7f821b470f40>),
 Item(key='Tiger', value=<list object at 0x7f821b470f80>),
 Item(key='Lion', value=<list object at 0x7f821b470fc0>),
 Item(key='Horse', value=<list object at 0x7f821b471000>),
 Item(key='Zebra', value=<list object at 0x7f821b471040>),
 Item(key='Cow', value=<list object at 0x7f821b471080>)]
16
<galactic.algebras.concept.core.Extent object at 0x7f821b25a500>
[Item(key='Eagle', value=<list object at 0x7f821b470e40>)]
1
intent_1 = Intent(
    connection,
    [context.domain.item(key='Zebra')],
)
intent_2 = Intent(
    connection,
    [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 0x7f821b264c40>
[<function big at 0x7f821b4780e0>,
 <function fourlegs at 0x7f821b478860>,
 <function hair at 0x7f821b478c20>,
 <function run at 0x7f821b479a80>,
 <function mane at 0x7f821b47a200>,
 <function hooves at 0x7f821b47a5c0>]
6
<galactic.algebras.concept.core.Intent object at 0x7f821b264cc0>
[<function medium at 0x7f821b44bf60>,
 <function fourlegs at 0x7f821b478860>,
 <function hair at 0x7f821b478c20>,
 <function run at 0x7f821b479a80>,
 <function hunt at 0x7f821b479e40>,
 <function mane at 0x7f821b47a200>]
6
<galactic.algebras.concept.core.Intent object at 0x7f821b7e3240>
[<function small at 0x7f821b76f9c0>,
 <function medium at 0x7f821b44bf60>,
 <function big at 0x7f821b4780e0>,
 <function twolegs at 0x7f821b4784a0>,
 <function fourlegs at 0x7f821b478860>,
 <function hair at 0x7f821b478c20>,
 <function feathers at 0x7f821b44aac0>,
 <function fly at 0x7f821b479300>,
 <function swim at 0x7f821b4796c0>,
 <function run at 0x7f821b479a80>,
 <function hunt at 0x7f821b479e40>,
 <function mane at 0x7f821b47a200>,
 <function hooves at 0x7f821b47a5c0>]
13
<galactic.algebras.concept.core.Intent object at 0x7f821b7e33c0>
[<function fourlegs at 0x7f821b478860>,
 <function hair at 0x7f821b478c20>,
 <function run at 0x7f821b479a80>,
 <function mane at 0x7f821b47a200>]
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,
    intent_1,
)
display(extent_from_intent, list(extent_from_intent), len(extent_from_intent))
intent_from_extent = Intent(
    connection,
    extent_1,
)
display(intent_from_extent, list(intent_from_extent), len(intent_from_extent))
<galactic.algebras.concept.core.Extent object at 0x7f821b25b940>
[Item(key='Horse', value=<list object at 0x7f821b471000>),
 Item(key='Zebra', value=<list object at 0x7f821b471040>)]
2
<galactic.algebras.concept.core.Intent object at 0x7f821b25b580>
[<function twolegs at 0x7f821b4784a0>, <function feathers at 0x7f821b44aac0>]
2