π 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 ConceptGaloisConnection class from
the 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 (
ConceptGaloisConnection,
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 = ConceptGaloisConnection(context)
display(connection, connection.polarities, connection.closures, connection.context)
<galactic.algebras.concept.core.ConceptGaloisConnection object at 0x7a719c1b60c0>
(<galactic.algebras.concept.core.AttrPolarity object at 0x7a718ce20ac0>,
<galactic.algebras.concept.core.ItemPolarity object at 0x7a718ce20af0>)
(compose(<galactic.algebras.concept.core.ItemPolarity object at 0x7a718ce20af0>, <galactic.algebras.concept.core.AttrPolarity object at 0x7a718ce20ac0>),
compose(<galactic.algebras.concept.core.AttrPolarity object at 0x7a718ce20ac0>, <galactic.algebras.concept.core.ItemPolarity object at 0x7a718ce20af0>))
<galactic.algebras.concept.core.Context object at 0x7a719c1818f0>
The closures operators can be accessed using the
ConceptGaloisConnectionclosures attribute of the
ConceptGaloisConnection 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 0x7a718ce20af0>, <galactic.algebras.concept.core.AttrPolarity object at 0x7a718ce20ac0>)
compose(<galactic.algebras.concept.core.AttrPolarity object at 0x7a718ce20ac0>, <galactic.algebras.concept.core.ItemPolarity object at 0x7a718ce20af0>)
<galactic.algebras.concept.core.Extent object at 0x7a718ce1a6c0>
[Item(key='Fox', value=<tuple object at 0x7a718cfefd30>),
Item(key='Dog', value=<tuple object at 0x7a719c1813f0>),
Item(key='Wolf', value=<tuple object at 0x7a719c333940>),
Item(key='Cat', value=<tuple object at 0x7a718cfefd80>),
Item(key='Tiger', value=<tuple object at 0x7a718cfefdd0>),
Item(key='Lion', value=<tuple object at 0x7a718cfb7a60>),
Item(key='Horse', value=<tuple object at 0x7a718ce0cd00>),
Item(key='Zebra', value=<tuple object at 0x7a718ce0cd00>)]
8
<galactic.algebras.concept.core.Intent object at 0x7a718ce39140>
[<function twolegs at 0x7a718ce09da0>, <function feathers at 0x7a718ce09580>]
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
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 0x7a718ce39f80>
[Item(key='Dove', value=<tuple object at 0x7a719c1814e0>),
Item(key='Hen', value=<tuple object at 0x7a719c19fc00>),
Item(key='Duck', value=<tuple object at 0x7a718cfefc40>),
Item(key='Goose', value=<tuple object at 0x7a718cfefc40>),
Item(key='Owl', value=<tuple object at 0x7a718cfefc90>),
Item(key='Hawk', value=<tuple object at 0x7a718cfefc90>),
Item(key='Eagle', value=<tuple object at 0x7a718cfefce0>)]
7
<galactic.algebras.concept.core.Extent object at 0x7a718ce3a0c0>
[Item(key='Eagle', value=<tuple object at 0x7a718cfefce0>),
Item(key='Fox', value=<tuple object at 0x7a718cfefd30>),
Item(key='Dog', value=<tuple object at 0x7a719c1813f0>),
Item(key='Wolf', value=<tuple object at 0x7a719c333940>)]
4
<galactic.algebras.concept.core.Extent object at 0x7a719c1cd840>
[Item(key='Dove', value=<tuple object at 0x7a719c1814e0>),
Item(key='Hen', value=<tuple object at 0x7a719c19fc00>),
Item(key='Duck', value=<tuple object at 0x7a718cfefc40>),
Item(key='Goose', value=<tuple object at 0x7a718cfefc40>),
Item(key='Owl', value=<tuple object at 0x7a718cfefc90>),
Item(key='Hawk', value=<tuple object at 0x7a718cfefc90>),
Item(key='Eagle', value=<tuple object at 0x7a718cfefce0>),
Item(key='Fox', value=<tuple object at 0x7a718cfefd30>),
Item(key='Dog', value=<tuple object at 0x7a719c1813f0>),
Item(key='Wolf', value=<tuple object at 0x7a719c333940>),
Item(key='Cat', value=<tuple object at 0x7a718cfefd80>),
Item(key='Tiger', value=<tuple object at 0x7a718cfefdd0>),
Item(key='Lion', value=<tuple object at 0x7a718cfb7a60>),
Item(key='Horse', value=<tuple object at 0x7a718ce0cd00>),
Item(key='Zebra', value=<tuple object at 0x7a718ce0cd00>),
Item(key='Cow', value=<tuple object at 0x7a718cfefa10>)]
16
<galactic.algebras.concept.core.Extent object at 0x7a718cfd5680>
[Item(key='Eagle', value=<tuple object at 0x7a718cfefce0>)]
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 0x7a718ce3bdc0>
[<function big at 0x7a718ce099e0>,
<function fourlegs at 0x7a718ce0a160>,
<function hair at 0x7a718ce0a520>,
<function run at 0x7a718ce0b380>,
<function mane at 0x7a718ce0bb00>,
<function hooves at 0x7a718ce0bec0>]
6
<galactic.algebras.concept.core.Intent object at 0x7a718ce3be00>
[<function medium at 0x7a718ce098a0>,
<function fourlegs at 0x7a718ce0a160>,
<function hair at 0x7a718ce0a520>,
<function run at 0x7a718ce0b380>,
<function hunt at 0x7a718ce0b740>,
<function mane at 0x7a718ce0bb00>]
6
<galactic.algebras.concept.core.Intent object at 0x7a718ce3ab00>
[<function small at 0x7a718ce082c0>,
<function medium at 0x7a718ce098a0>,
<function big at 0x7a718ce099e0>,
<function twolegs at 0x7a718ce09da0>,
<function fourlegs at 0x7a718ce0a160>,
<function hair at 0x7a718ce0a520>,
<function feathers at 0x7a718ce09580>,
<function fly at 0x7a718ce0ac00>,
<function swim at 0x7a718ce0afc0>,
<function run at 0x7a718ce0b380>,
<function hunt at 0x7a718ce0b740>,
<function mane at 0x7a718ce0bb00>,
<function hooves at 0x7a718ce0bec0>]
13
<galactic.algebras.concept.core.Intent object at 0x7a718ce3ac00>
[<function fourlegs at 0x7a718ce0a160>,
<function hair at 0x7a718ce0a520>,
<function run at 0x7a718ce0b380>,
<function mane at 0x7a718ce0bb00>]
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 0x7a718ce39bc0>
[Item(key='Horse', value=<tuple object at 0x7a718ce0cd00>),
Item(key='Zebra', value=<tuple object at 0x7a718ce0cd00>)]
2
<galactic.algebras.concept.core.Intent object at 0x7a718ce3a900>
[<function twolegs at 0x7a718ce09da0>, <function feathers at 0x7a718ce09580>]
2