π 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 0x7c4c599ca200>
(<galactic.algebras.concept.core.AttrPolarity object at 0x7c4c5917d8d0>,
<galactic.algebras.concept.core.ItemPolarity object at 0x7c4c5917da20>)
(compose(<galactic.algebras.concept.core.ItemPolarity object at 0x7c4c5917da20>, <galactic.algebras.concept.core.AttrPolarity object at 0x7c4c5917d8d0>),
compose(<galactic.algebras.concept.core.AttrPolarity object at 0x7c4c5917d8d0>, <galactic.algebras.concept.core.ItemPolarity object at 0x7c4c5917da20>))
<galactic.algebras.concept.core.Context object at 0x7c4c5ab331a0>
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 0x7c4c5917da20>, <galactic.algebras.concept.core.AttrPolarity object at 0x7c4c5917d8d0>)
compose(<galactic.algebras.concept.core.AttrPolarity object at 0x7c4c5917d8d0>, <galactic.algebras.concept.core.ItemPolarity object at 0x7c4c5917da20>)
<galactic.algebras.concept.core.Extent object at 0x7c4c59190500>
[Item(key='Fox', value=<list object at 0x7c4c59165f80>),
Item(key='Dog', value=<list object at 0x7c4c59165fc0>),
Item(key='Wolf', value=<list object at 0x7c4c59166000>),
Item(key='Cat', value=<list object at 0x7c4c59166040>),
Item(key='Tiger', value=<list object at 0x7c4c59166080>),
Item(key='Lion', value=<list object at 0x7c4c591660c0>),
Item(key='Horse', value=<list object at 0x7c4c59166100>),
Item(key='Zebra', value=<list object at 0x7c4c59166140>)]
8
<galactic.algebras.concept.core.Intent object at 0x7c4c591938c0>
[<function twolegs at 0x7c4c59180400>, <function feathers at 0x7c4c5915ea20>]
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=connection,
attrs=[context.co_domain.attr(name='feathers')],
)
extent_2 = Extent(
connection=connection,
attrs=[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 0x7c4c5919a600>
[Item(key='Dove', value=<list object at 0x7c4c59165b00>),
Item(key='Hen', value=<list object at 0x7c4c59165e40>),
Item(key='Duck', value=<list object at 0x7c4c59165b40>),
Item(key='Goose', value=<list object at 0x7c4c59165e80>),
Item(key='Owl', value=<list object at 0x7c4c59165ec0>),
Item(key='Hawk', value=<list object at 0x7c4c59165f00>),
Item(key='Eagle', value=<list object at 0x7c4c59165f40>)]
7
<galactic.algebras.concept.core.Extent object at 0x7c4c5919a4c0>
[Item(key='Eagle', value=<list object at 0x7c4c59165f40>),
Item(key='Fox', value=<list object at 0x7c4c59165f80>),
Item(key='Dog', value=<list object at 0x7c4c59165fc0>),
Item(key='Wolf', value=<list object at 0x7c4c59166000>)]
4
<galactic.algebras.concept.core.Extent object at 0x7c4c5919a180>
[Item(key='Dove', value=<list object at 0x7c4c59165b00>),
Item(key='Hen', value=<list object at 0x7c4c59165e40>),
Item(key='Duck', value=<list object at 0x7c4c59165b40>),
Item(key='Goose', value=<list object at 0x7c4c59165e80>),
Item(key='Owl', value=<list object at 0x7c4c59165ec0>),
Item(key='Hawk', value=<list object at 0x7c4c59165f00>),
Item(key='Eagle', value=<list object at 0x7c4c59165f40>),
Item(key='Fox', value=<list object at 0x7c4c59165f80>),
Item(key='Dog', value=<list object at 0x7c4c59165fc0>),
Item(key='Wolf', value=<list object at 0x7c4c59166000>),
Item(key='Cat', value=<list object at 0x7c4c59166040>),
Item(key='Tiger', value=<list object at 0x7c4c59166080>),
Item(key='Lion', value=<list object at 0x7c4c591660c0>),
Item(key='Horse', value=<list object at 0x7c4c59166100>),
Item(key='Zebra', value=<list object at 0x7c4c59166140>),
Item(key='Cow', value=<list object at 0x7c4c59166180>)]
16
<galactic.algebras.concept.core.Extent object at 0x7c4c599ab340>
[Item(key='Eagle', value=<list object at 0x7c4c59165f40>)]
1
intent_1 = Intent(
connection=connection,
items=[context.domain.item(key='Zebra')],
)
intent_2 = Intent(
connection=connection,
items=[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 0x7c4c599eb8c0>
[<function big at 0x7c4c59180040>,
<function fourlegs at 0x7c4c591807c0>,
<function hair at 0x7c4c59180b80>,
<function run at 0x7c4c591819e0>,
<function mane at 0x7c4c59182160>,
<function hooves at 0x7c4c59182520>]
6
<galactic.algebras.concept.core.Intent object at 0x7c4c5919b440>
[<function medium at 0x7c4c5915fec0>,
<function fourlegs at 0x7c4c591807c0>,
<function hair at 0x7c4c59180b80>,
<function run at 0x7c4c591819e0>,
<function hunt at 0x7c4c59181da0>,
<function mane at 0x7c4c59182160>]
6
<galactic.algebras.concept.core.Intent object at 0x7c4c5919b5c0>
[<function small at 0x7c4c599c2f20>,
<function medium at 0x7c4c5915fec0>,
<function big at 0x7c4c59180040>,
<function twolegs at 0x7c4c59180400>,
<function fourlegs at 0x7c4c591807c0>,
<function hair at 0x7c4c59180b80>,
<function feathers at 0x7c4c5915ea20>,
<function fly at 0x7c4c59181260>,
<function swim at 0x7c4c59181620>,
<function run at 0x7c4c591819e0>,
<function hunt at 0x7c4c59181da0>,
<function mane at 0x7c4c59182160>,
<function hooves at 0x7c4c59182520>]
13
<galactic.algebras.concept.core.Intent object at 0x7c4c5919b8c0>
[<function fourlegs at 0x7c4c591807c0>,
<function hair at 0x7c4c59180b80>,
<function run at 0x7c4c591819e0>,
<function mane at 0x7c4c59182160>]
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 0x7c4c59193640>
[Item(key='Horse', value=<list object at 0x7c4c59166100>),
Item(key='Zebra', value=<list object at 0x7c4c59166140>)]
2
<galactic.algebras.concept.core.Intent object at 0x7c4c599ebf80>
[<function twolegs at 0x7c4c59180400>, <function feathers at 0x7c4c5915ea20>]
2