/// let index_domains = vec![Moo::new(GroundDomain::Bool),Moo::new(GroundDomain::Int(vec![Range::Bounded(1,2)]))];
try_enumerate_indices(index_domains).expect("index domain should be enumerable with .values()")
/// See [`enumerate_indices`]. This function zips the two given lists of index domains, performs a
// Given index domains for a multi-dimensional matrix and the nth index in the flattened matrix, find the coordinates in the original matrix
pub fn flat_index_to_full_index(index_domains: &[Moo<GroundDomain>], index: u64) -> Vec<Literal> {
/// For matrix literals, right-unbounded integer index domains like `int(1..)` are bounded using
fn bound_index_domain_from_length(mut domain: Moo<GroundDomain>, len: usize) -> Moo<GroundDomain> {