Incomplete Contexts are used to represent contexts where some relations are unknown. See papers by Burmeister and Holzer for an introduction.
(def K (make-incomplete-context-from-matrix
[1 2 3 4]
[:a :b :c]
[0 1 "?" "?" "?" 0 1 1 0 "?" "?" 1]))
K
|:a :b :c
--+---------
1 |. x ?
2 |? ? .
3 |x x .
4 |? ? x
We can compute possible and certain derivations:
(possible-attribute-derivation K [:a])
#{4 3 2}
(certain-attribute-derivation K [:a])
#{3}
and we can test if an implication is satisfiable in an incomplete context:
(satisfiable? (make-implication [:a] [:b]) K)
true
(satisfiable? (make-implication [:a] [:b :c]) K)
false
There are some convenience functions to convert between formal and incomplete contexts, e.g., to-incomplete-context
, to-formal-context
, incomplete-context->possible-incidences-context
, incomplete-context->certain-incidences-context
, and to draw the (certain/possible) concept lattice for an incomplete context, draw-certain-concept-lattice
, draw-possible-concept-lattice
.
Also, there is support for attribute exploration with incomplete information. Additionally there is support for attribute exploration with multiple experts that have compatible views (collaboration strategies) and incompatible views (shared implications).