Make bins in cross coverage illegal when the original coverpoints have the same value

Hi,

I have a set of coverpoints for a group of mapping variable. Each mapping can take 0 to n-1(shown here for n=4) values and there are n mapping variables. No two mapping variables should contain the same values.

I am trying to define coverpoints to check that all values are seen in each mapping variable, and then a cross coverage point to show that all combinations of variables have been seen, with the cases where two variables are equal marked as illegal. For 2 mapping bins it is straightforward to explicitly describe the illegal combinations, but as n increases, this becomes quite verbose:

 cp_mapping0: coverpoint mapping0 {bins zero  = {0};
                                   bins one   = {1};
                                   bins two   = {2};
                                   bins three = {3};
                                  }                                                        



cp_mapping3: coverpoint mapping1 {bins zero = {0};
bins one = {1};
bins two = {2};
bins three = {3};
}

  //actual point of interest is the cross between them all, when aligned. If any bins are the same-> illegal!
x_mapping:cross cp_mapping0,cp_mapping1,cp_mapping2,cp_mapping3 
      {illegal_bins illegal=(binsof(cp_mapping0) intersect {1} && (binsof(cp_mapping1) intersect {1} ||binsof(cp_mapping2) intersect {1} || binsof(cp_mapping3) intersect {1})) ||
                            (binsof(cp_mapping0) intersect {2} && (binsof(cp_mapping1) intersect {2} ||binsof(cp_mapping2) intersect {2} || binsof(cp_mapping3) intersect {2})) ||
                               .....etc.

Does anyone know a better way of describing this?
something like {illegal_bins illegal=(binsof(cp_mapping0)==binsof(cp_mapping1)||binsof(cp_mapping0)==binsof(cp_mapping2)|| …)

Thanks

Graham