π 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 0x74ea00d95980>
(<galactic.algebras.concept.core.AttrPolarity object at 0x74ea00c3b6a0>,
<galactic.algebras.concept.core.ItemPolarity object at 0x74ea00c3b730>)
(compose(<galactic.algebras.concept.core.ItemPolarity object at 0x74ea00c3b730>, <galactic.algebras.concept.core.AttrPolarity object at 0x74ea00c3b6a0>),
compose(<galactic.algebras.concept.core.AttrPolarity object at 0x74ea00c3b6a0>, <galactic.algebras.concept.core.ItemPolarity object at 0x74ea00c3b730>))
<galactic.algebras.concept.core.Context object at 0x74ea01754ef0>
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 0x74ea00c3b730>, <galactic.algebras.concept.core.AttrPolarity object at 0x74ea00c3b6a0>)
compose(<galactic.algebras.concept.core.AttrPolarity object at 0x74ea00c3b6a0>, <galactic.algebras.concept.core.ItemPolarity object at 0x74ea00c3b730>)
<galactic.algebras.concept.core.Extent object at 0x74ea01779fc0>
[Item(key='Fox', value=<tuple object at 0x74ea00c2bb50>),
Item(key='Dog', value=<tuple object at 0x74ea01755990>),
Item(key='Wolf', value=<tuple object at 0x74ea01738760>),
Item(key='Cat', value=<tuple object at 0x74ea00c2bba0>),
Item(key='Tiger', value=<tuple object at 0x74ea00c2bbf0>),
Item(key='Lion', value=<tuple object at 0x74ea00c211e0>),
Item(key='Horse', value=<tuple object at 0x74ea00c22800>),
Item(key='Zebra', value=<tuple object at 0x74ea00c22800>)]
8
<galactic.algebras.concept.core.Intent object at 0x74ea00c66a00>
[<function twolegs at 0x74ea00c3de40>, <function feathers at 0x74ea00c3d620>]
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 0x74ea01796d00>
[Item(key='Dove', value=<tuple object at 0x74ea017558f0>),
Item(key='Hen', value=<tuple object at 0x74ea01774340>),
Item(key='Duck', value=<tuple object at 0x74ea00c2ba60>),
Item(key='Goose', value=<tuple object at 0x74ea00c2ba60>),
Item(key='Owl', value=<tuple object at 0x74ea00c2bab0>),
Item(key='Hawk', value=<tuple object at 0x74ea00c2bab0>),
Item(key='Eagle', value=<tuple object at 0x74ea00c2bb00>)]
7
<galactic.algebras.concept.core.Extent object at 0x74ea01764580>
[Item(key='Eagle', value=<tuple object at 0x74ea00c2bb00>),
Item(key='Fox', value=<tuple object at 0x74ea00c2bb50>),
Item(key='Dog', value=<tuple object at 0x74ea01755990>),
Item(key='Wolf', value=<tuple object at 0x74ea01738760>)]
4
<galactic.algebras.concept.core.Extent object at 0x74ea01761000>
[Item(key='Dove', value=<tuple object at 0x74ea017558f0>),
Item(key='Hen', value=<tuple object at 0x74ea01774340>),
Item(key='Duck', value=<tuple object at 0x74ea00c2ba60>),
Item(key='Goose', value=<tuple object at 0x74ea00c2ba60>),
Item(key='Owl', value=<tuple object at 0x74ea00c2bab0>),
Item(key='Hawk', value=<tuple object at 0x74ea00c2bab0>),
Item(key='Eagle', value=<tuple object at 0x74ea00c2bb00>),
Item(key='Fox', value=<tuple object at 0x74ea00c2bb50>),
Item(key='Dog', value=<tuple object at 0x74ea01755990>),
Item(key='Wolf', value=<tuple object at 0x74ea01738760>),
Item(key='Cat', value=<tuple object at 0x74ea00c2bba0>),
Item(key='Tiger', value=<tuple object at 0x74ea00c2bbf0>),
Item(key='Lion', value=<tuple object at 0x74ea00c211e0>),
Item(key='Horse', value=<tuple object at 0x74ea00c22800>),
Item(key='Zebra', value=<tuple object at 0x74ea00c22800>),
Item(key='Cow', value=<tuple object at 0x74ea00c2b830>)]
16
<galactic.algebras.concept.core.Extent object at 0x74ea00c71200>
[Item(key='Eagle', value=<tuple object at 0x74ea00c2bb00>)]
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 0x74ea00c6fcc0>
[<function big at 0x74ea00c3da80>,
<function fourlegs at 0x74ea00c3e200>,
<function hair at 0x74ea00c3e5c0>,
<function run at 0x74ea00c3f420>,
<function mane at 0x74ea00c3fba0>,
<function hooves at 0x74ea00c3ff60>]
6
<galactic.algebras.concept.core.Intent object at 0x74ea00c6f880>
[<function medium at 0x74ea00c3d940>,
<function fourlegs at 0x74ea00c3e200>,
<function hair at 0x74ea00c3e5c0>,
<function run at 0x74ea00c3f420>,
<function hunt at 0x74ea00c3f7e0>,
<function mane at 0x74ea00c3fba0>]
6
<galactic.algebras.concept.core.Intent object at 0x74ea00de9bc0>
[<function small at 0x74ea00c3c2c0>,
<function medium at 0x74ea00c3d940>,
<function big at 0x74ea00c3da80>,
<function twolegs at 0x74ea00c3de40>,
<function fourlegs at 0x74ea00c3e200>,
<function hair at 0x74ea00c3e5c0>,
<function feathers at 0x74ea00c3d620>,
<function fly at 0x74ea00c3eca0>,
<function swim at 0x74ea00c3f060>,
<function run at 0x74ea00c3f420>,
<function hunt at 0x74ea00c3f7e0>,
<function mane at 0x74ea00c3fba0>,
<function hooves at 0x74ea00c3ff60>]
13
<galactic.algebras.concept.core.Intent object at 0x74ea12f42fc0>
[<function fourlegs at 0x74ea00c3e200>,
<function hair at 0x74ea00c3e5c0>,
<function run at 0x74ea00c3f420>,
<function mane at 0x74ea00c3fba0>]
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).
<galactic.algebras.concept.core.Extent object at 0x74ea00c6e7c0>
[Item(key='Horse', value=<tuple object at 0x74ea00c22800>),
Item(key='Zebra', value=<tuple object at 0x74ea00c22800>)]
2
<galactic.algebras.concept.core.Intent object at 0x74ea00c72d00>
[<function twolegs at 0x74ea00c3de40>, <function feathers at 0x74ea00c3d620>]
2