πŸ“˜ 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 0x755d880752c0>
(<galactic.algebras.concept.core.AttrPolarity object at 0x755d886bddb0>,
 <galactic.algebras.concept.core.ItemPolarity object at 0x755d78ec5960>)
(compose(<galactic.algebras.concept.core.ItemPolarity object at 0x755d78ec5960>, <galactic.algebras.concept.core.AttrPolarity object at 0x755d886bddb0>),
 compose(<galactic.algebras.concept.core.AttrPolarity object at 0x755d886bddb0>, <galactic.algebras.concept.core.ItemPolarity object at 0x755d78ec5960>))
<galactic.algebras.concept.core.Context object at 0x755d88465350>

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 0x755d78ec5960>, <galactic.algebras.concept.core.AttrPolarity object at 0x755d886bddb0>)
compose(<galactic.algebras.concept.core.AttrPolarity object at 0x755d886bddb0>, <galactic.algebras.concept.core.ItemPolarity object at 0x755d78ec5960>)
<galactic.algebras.concept.core.Extent object at 0x755d88064500>
[Item(key='Fox', value=<list object at 0x755d78ebd680>),
 Item(key='Dog', value=<list object at 0x755d78ebd6c0>),
 Item(key='Wolf', value=<list object at 0x755d78ebd700>),
 Item(key='Cat', value=<list object at 0x755d78ebd740>),
 Item(key='Tiger', value=<list object at 0x755d78ebd780>),
 Item(key='Lion', value=<list object at 0x755d78ebd7c0>),
 Item(key='Horse', value=<list object at 0x755d78ebd800>),
 Item(key='Zebra', value=<list object at 0x755d78ebd840>)]
8
<galactic.algebras.concept.core.Intent object at 0x755d78ee2100>
[<function twolegs at 0x755d78ec8040>, <function feathers at 0x755d78eae660>]
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 0x755d88074540>
[Item(key='Dove', value=<list object at 0x755d78ea5700>),
 Item(key='Hen', value=<list object at 0x755d78ebd500>),
 Item(key='Duck', value=<list object at 0x755d78ebd540>),
 Item(key='Goose', value=<list object at 0x755d78ebd580>),
 Item(key='Owl', value=<list object at 0x755d78ebd5c0>),
 Item(key='Hawk', value=<list object at 0x755d78ebd600>),
 Item(key='Eagle', value=<list object at 0x755d78ebd640>)]
7
<galactic.algebras.concept.core.Extent object at 0x755d78ee4880>
[Item(key='Eagle', value=<list object at 0x755d78ebd640>),
 Item(key='Fox', value=<list object at 0x755d78ebd680>),
 Item(key='Dog', value=<list object at 0x755d78ebd6c0>),
 Item(key='Wolf', value=<list object at 0x755d78ebd700>)]
4
<galactic.algebras.concept.core.Extent object at 0x755d78ea7d00>
[Item(key='Dove', value=<list object at 0x755d78ea5700>),
 Item(key='Hen', value=<list object at 0x755d78ebd500>),
 Item(key='Duck', value=<list object at 0x755d78ebd540>),
 Item(key='Goose', value=<list object at 0x755d78ebd580>),
 Item(key='Owl', value=<list object at 0x755d78ebd5c0>),
 Item(key='Hawk', value=<list object at 0x755d78ebd600>),
 Item(key='Eagle', value=<list object at 0x755d78ebd640>),
 Item(key='Fox', value=<list object at 0x755d78ebd680>),
 Item(key='Dog', value=<list object at 0x755d78ebd6c0>),
 Item(key='Wolf', value=<list object at 0x755d78ebd700>),
 Item(key='Cat', value=<list object at 0x755d78ebd740>),
 Item(key='Tiger', value=<list object at 0x755d78ebd780>),
 Item(key='Lion', value=<list object at 0x755d78ebd7c0>),
 Item(key='Horse', value=<list object at 0x755d78ebd800>),
 Item(key='Zebra', value=<list object at 0x755d78ebd840>),
 Item(key='Cow', value=<list object at 0x755d78ebd880>)]
16
<galactic.algebras.concept.core.Extent object at 0x755d880bf180>
[Item(key='Eagle', value=<list object at 0x755d78ebd640>)]
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 0x755d78ee3200>
[<function big at 0x755d78eafc40>,
 <function fourlegs at 0x755d78ec8400>,
 <function hair at 0x755d78ec87c0>,
 <function run at 0x755d78ec9620>,
 <function mane at 0x755d78ec9da0>,
 <function hooves at 0x755d78eca160>]
6
<galactic.algebras.concept.core.Intent object at 0x755d78ee3140>
[<function medium at 0x755d78eafb00>,
 <function fourlegs at 0x755d78ec8400>,
 <function hair at 0x755d78ec87c0>,
 <function run at 0x755d78ec9620>,
 <function hunt at 0x755d78ec99e0>,
 <function mane at 0x755d78ec9da0>]
6
<galactic.algebras.concept.core.Intent object at 0x755d8806c440>
[<function small at 0x755d8823bc40>,
 <function medium at 0x755d78eafb00>,
 <function big at 0x755d78eafc40>,
 <function twolegs at 0x755d78ec8040>,
 <function fourlegs at 0x755d78ec8400>,
 <function hair at 0x755d78ec87c0>,
 <function feathers at 0x755d78eae660>,
 <function fly at 0x755d78ec8ea0>,
 <function swim at 0x755d78ec9260>,
 <function run at 0x755d78ec9620>,
 <function hunt at 0x755d78ec99e0>,
 <function mane at 0x755d78ec9da0>,
 <function hooves at 0x755d78eca160>]
13
<galactic.algebras.concept.core.Intent object at 0x755d78e95fc0>
[<function fourlegs at 0x755d78ec8400>,
 <function hair at 0x755d78ec87c0>,
 <function run at 0x755d78ec9620>,
 <function mane at 0x755d78ec9da0>]
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 0x755d78ee37c0>
[Item(key='Horse', value=<list object at 0x755d78ebd800>),
 Item(key='Zebra', value=<list object at 0x755d78ebd840>)]
2
<galactic.algebras.concept.core.Intent object at 0x755d78ee2bc0>
[<function twolegs at 0x755d78ec8040>, <function feathers at 0x755d78eae660>]
2