//! Traits for building and narrowing cage constraint representations.
//!
//! [`Memo`] constructs a representation of all value tuples satisfying a cage's
//! arithmetic constraint. `Narrow` filters that representation when external
//! information (e.g. from grid-level constraints) rules out certain values.
//!
//! Both traits are implemented by `Table`, which
//! stores tuples explicitly, and will be implemented by `Mdd`, which stores
//! them as a multivalued decision diagram.
use crateError;
use crateFill;
/// A cage constraint representation that can be constructed from an arithmetic operation.
///
/// Implementors store the set of value tuples satisfying the constraint and
/// expose per-position candidate sets via [`fill`](Memo::get).