pub trait DomainView {
type Value: Copy + Eq + Ord + std::fmt::Debug;
fn is_empty(&self) -> bool;
fn is_fixed(&self) -> bool;
fn size(&self) -> usize;
fn min(&self) -> Option<Self::Value>;
fn max(&self) -> Option<Self::Value>;
fn contains(&self, value: Self::Value) -> bool;
}
pub trait Domain: DomainView + Clone {}