📘 Formal concepts

📘 Formal concepts#

Formal concepts are the building blocks of formal concept analysis (FCA), representing the relationships between a set of items and their attributes. In the GALACTIC framework, formal concepts are implemented using the Concept class of the galactic.algebras.concept.core module, which allows for the creation, manipulation, and analysis of these concepts within a given antitone Galois connection.

Creating concepts#

The constructor of the Concept class takes an instance of the GaloisConnection class as input, which defines the context in which the concepts are formed and optionnally an iterable of items or attributes to initialize the concept. When neither items nor attributes are provided, the concept is initialized as the top concept (with full extent and smallest intent).

<galactic.algebras.concept.core.Concept object at 0x753bf8cd2380>

The extent and intent of the concept can be accessed using the extent and intent attributes, respectively. They are closed sets of items and attributes within the context of the antitone Galois connection.

display(top.extent, list(top.extent))
display(top.intent, list(top.intent))
display(bottom.extent, list(bottom.extent))
display(bottom.intent, list(bottom.intent))
<galactic.algebras.concept.core.Extent object at 0x753c08186dc0>
[Item(key='Dove', value=<list object at 0x753bf8cb7d40>),
 Item(key='Hen', value=<list object at 0x753bf8cd00c0>),
 Item(key='Duck', value=<list object at 0x753bf8cd0100>),
 Item(key='Goose', value=<list object at 0x753bf8cd0140>),
 Item(key='Owl', value=<list object at 0x753bf8cd0180>),
 Item(key='Hawk', value=<list object at 0x753bf8cd01c0>),
 Item(key='Eagle', value=<list object at 0x753bf8cd0200>),
 Item(key='Fox', value=<list object at 0x753bf8cd0240>),
 Item(key='Dog', value=<list object at 0x753bf8cd0280>),
 Item(key='Wolf', value=<list object at 0x753bf8cd02c0>),
 Item(key='Cat', value=<list object at 0x753bf8cd0300>),
 Item(key='Tiger', value=<list object at 0x753bf8cd0340>),
 Item(key='Lion', value=<list object at 0x753bf8cd0380>),
 Item(key='Horse', value=<list object at 0x753bf8cd03c0>),
 Item(key='Zebra', value=<list object at 0x753bf8cd0400>),
 Item(key='Cow', value=<list object at 0x753bf8cd0440>)]
<galactic.algebras.concept.core.Intent object at 0x753bf9601300>
[]
<galactic.algebras.concept.core.Extent object at 0x753bf8cdffc0>
[]
<galactic.algebras.concept.core.Intent object at 0x753bf8c53b00>
[<function small at 0x753bf8c83880>,
 <function medium at 0x753bf8cc8cc0>,
 <function big at 0x753bf8cc8e00>,
 <function twolegs at 0x753bf8cc91c0>,
 <function fourlegs at 0x753bf8cc9580>,
 <function hair at 0x753bf8cc9940>,
 <function feathers at 0x753bf8cbb7e0>,
 <function fly at 0x753bf8cca020>,
 <function swim at 0x753bf8cca3e0>,
 <function run at 0x753bf8cca7a0>,
 <function hunt at 0x753bf8ccab60>,
 <function mane at 0x753bf8ccaf20>,
 <function hooves at 0x753bf8ccb2e0>]

Operating on concepts#

The Concept class implements the Element protocol of the galactic.algebras.lattice.core module, which also provides methods to create concepts using the join (\(\vee\)) or meet (\(\wedge\)) operators.

concept_1 = Concept(
    connection,
    items=[
        context.domain.item(key='Cat'),
        context.domain.item(key='Wolf'),
    ],
)
concept_2 = Concept(
    connection,
    attrs=[
        context.co_domain.attr(name='mane'),
    ],
)
join = concept_1 | concept_2
meet = concept_1 & concept_2
display(meet.extent, list(meet.extent))
display(meet.intent, list(meet.intent))
display(join.extent, list(join.extent))
display(join.intent, list(join.intent))
display(meet <= join, meet.extent <= join.extent, meet.intent >= join.intent)
<galactic.algebras.concept.core.Extent object at 0x753bf8cf4580>
[Item(key='Wolf', value=<list object at 0x753bf8cd02c0>),
 Item(key='Lion', value=<list object at 0x753bf8cd0380>)]
<galactic.algebras.concept.core.Intent object at 0x753bf961c540>
[<function fourlegs at 0x753bf8cc9580>,
 <function hair at 0x753bf8cc9940>,
 <function run at 0x753bf8cca7a0>,
 <function hunt at 0x753bf8ccab60>,
 <function mane at 0x753bf8ccaf20>]
<galactic.algebras.concept.core.Extent object at 0x753bf8cf5640>
[Item(key='Fox', value=<list object at 0x753bf8cd0240>),
 Item(key='Dog', value=<list object at 0x753bf8cd0280>),
 Item(key='Wolf', value=<list object at 0x753bf8cd02c0>),
 Item(key='Cat', value=<list object at 0x753bf8cd0300>),
 Item(key='Tiger', value=<list object at 0x753bf8cd0340>),
 Item(key='Lion', value=<list object at 0x753bf8cd0380>),
 Item(key='Horse', value=<list object at 0x753bf8cd03c0>),
 Item(key='Zebra', value=<list object at 0x753bf8cd0400>)]
<galactic.algebras.concept.core.Intent object at 0x753bf8cf4700>
[<function fourlegs at 0x753bf8cc9580>,
 <function hair at 0x753bf8cc9940>,
 <function run at 0x753bf8cca7a0>]
True
True
True