15. **Tribooleans**: Three state logic
**************************************

Through the package *GNATCOLL.Tribooleans*, GNATColl provides a type
that extends the classical *Boolean* type with an *Indeterminate*
value.

There are various cases where such a type is useful. One example we
have is when a user is doing a search (on a database or any set of
data), and can specify some optional boolean criteria (“must the
contact be french?”). He can choose to only see french people
(“True”), to see no french people at all (“False”), or to get all
contacts (“Indeterminate”). With a classical boolean, there is no way
to cover all these cases.

Of course, there are more advanced use cases for such a type. To
support these cases, the *Tribooleans* package overrides the usual
logical operations *“and”*, *“or”*, *“xor”*, *“not”* and provides an
*Equal* function.

See the specs of the package to see the truth tables associated with
those operators.
