π 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 0x7d46e2c12b80>
(<galactic.algebras.concept.core.AttrPolarity object at 0x7d46e20e6da0>,
<galactic.algebras.concept.core.ItemPolarity object at 0x7d46e20e6dd0>)
(compose(<galactic.algebras.concept.core.ItemPolarity object at 0x7d46e20e6dd0>, <galactic.algebras.concept.core.AttrPolarity object at 0x7d46e20e6da0>),
compose(<galactic.algebras.concept.core.AttrPolarity object at 0x7d46e20e6da0>, <galactic.algebras.concept.core.ItemPolarity object at 0x7d46e20e6dd0>))
<galactic.algebras.concept.core.Context object at 0x7d46fc198310>
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 0x7d46e20e6dd0>, <galactic.algebras.concept.core.AttrPolarity object at 0x7d46e20e6da0>)
compose(<galactic.algebras.concept.core.AttrPolarity object at 0x7d46e20e6da0>, <galactic.algebras.concept.core.ItemPolarity object at 0x7d46e20e6dd0>)
<galactic.algebras.concept.core.Extent object at 0x7d46e2329500>
[Item(key='Fox', value=<list object at 0x7d46e20e8c80>),
Item(key='Dog', value=<list object at 0x7d46e20e8cc0>),
Item(key='Wolf', value=<list object at 0x7d46e20e8d00>),
Item(key='Cat', value=<list object at 0x7d46e20e8d40>),
Item(key='Tiger', value=<list object at 0x7d46e20e8d80>),
Item(key='Lion', value=<list object at 0x7d46e20e8dc0>),
Item(key='Horse', value=<list object at 0x7d46e20e8e00>),
Item(key='Zebra', value=<list object at 0x7d46e20e8e40>)]
8
<galactic.algebras.concept.core.Intent object at 0x7d46e2103040>
[<function twolegs at 0x7d46e20ec360>, <function feathers at 0x7d46e20cfb00>]
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 0x7d46e2243140>
[Item(key='Dove', value=<list object at 0x7d46e20c8bc0>),
Item(key='Hen', value=<list object at 0x7d46e20e8b00>),
Item(key='Duck', value=<list object at 0x7d46e20e8b40>),
Item(key='Goose', value=<list object at 0x7d46e20e8b80>),
Item(key='Owl', value=<list object at 0x7d46e20e8bc0>),
Item(key='Hawk', value=<list object at 0x7d46e20e8c00>),
Item(key='Eagle', value=<list object at 0x7d46e20e8c40>)]
7
<galactic.algebras.concept.core.Extent object at 0x7d46e2240a40>
[Item(key='Eagle', value=<list object at 0x7d46e20e8c40>),
Item(key='Fox', value=<list object at 0x7d46e20e8c80>),
Item(key='Dog', value=<list object at 0x7d46e20e8cc0>),
Item(key='Wolf', value=<list object at 0x7d46e20e8d00>)]
4
<galactic.algebras.concept.core.Extent object at 0x7d46e205d880>
[Item(key='Dove', value=<list object at 0x7d46e20c8bc0>),
Item(key='Hen', value=<list object at 0x7d46e20e8b00>),
Item(key='Duck', value=<list object at 0x7d46e20e8b40>),
Item(key='Goose', value=<list object at 0x7d46e20e8b80>),
Item(key='Owl', value=<list object at 0x7d46e20e8bc0>),
Item(key='Hawk', value=<list object at 0x7d46e20e8c00>),
Item(key='Eagle', value=<list object at 0x7d46e20e8c40>),
Item(key='Fox', value=<list object at 0x7d46e20e8c80>),
Item(key='Dog', value=<list object at 0x7d46e20e8cc0>),
Item(key='Wolf', value=<list object at 0x7d46e20e8d00>),
Item(key='Cat', value=<list object at 0x7d46e20e8d40>),
Item(key='Tiger', value=<list object at 0x7d46e20e8d80>),
Item(key='Lion', value=<list object at 0x7d46e20e8dc0>),
Item(key='Horse', value=<list object at 0x7d46e20e8e00>),
Item(key='Zebra', value=<list object at 0x7d46e20e8e40>),
Item(key='Cow', value=<list object at 0x7d46e20e8e80>)]
16
<galactic.algebras.concept.core.Extent object at 0x7d46e2276980>
[Item(key='Eagle', value=<list object at 0x7d46e20e8c40>)]
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 0x7d46e21037c0>
[<function big at 0x7d46e20cff60>,
<function fourlegs at 0x7d46e20ec720>,
<function hair at 0x7d46e20ecae0>,
<function run at 0x7d46e20ed940>,
<function mane at 0x7d46e20ee0c0>,
<function hooves at 0x7d46e20ee480>]
6
<galactic.algebras.concept.core.Intent object at 0x7d46e2103680>
[<function medium at 0x7d46e20cfe20>,
<function fourlegs at 0x7d46e20ec720>,
<function hair at 0x7d46e20ecae0>,
<function run at 0x7d46e20ed940>,
<function hunt at 0x7d46e20edd00>,
<function mane at 0x7d46e20ee0c0>]
6
<galactic.algebras.concept.core.Intent object at 0x7d46e2102540>
[<function small at 0x7d46e20ce660>,
<function medium at 0x7d46e20cfe20>,
<function big at 0x7d46e20cff60>,
<function twolegs at 0x7d46e20ec360>,
<function fourlegs at 0x7d46e20ec720>,
<function hair at 0x7d46e20ecae0>,
<function feathers at 0x7d46e20cfb00>,
<function fly at 0x7d46e20ed1c0>,
<function swim at 0x7d46e20ed580>,
<function run at 0x7d46e20ed940>,
<function hunt at 0x7d46e20edd00>,
<function mane at 0x7d46e20ee0c0>,
<function hooves at 0x7d46e20ee480>]
13
<galactic.algebras.concept.core.Intent object at 0x7d46e2102e00>
[<function fourlegs at 0x7d46e20ec720>,
<function hair at 0x7d46e20ecae0>,
<function run at 0x7d46e20ed940>,
<function mane at 0x7d46e20ee0c0>]
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 0x7d46e2101a40>
[Item(key='Horse', value=<list object at 0x7d46e20e8e00>),
Item(key='Zebra', value=<list object at 0x7d46e20e8e40>)]
2
<galactic.algebras.concept.core.Intent object at 0x7d46e21032c0>
[<function twolegs at 0x7d46e20ec360>, <function feathers at 0x7d46e20cfb00>]
2