include "analyse_all_different.mzn";
include "fzn_symmetric_all_different.mzn";
include "fzn_symmetric_all_different_reif.mzn";

/** @group globals.alldifferent
  Requires the array of integers \a x to be all different, and for all \p i,
  \a x[\p i]=\p j \(\rightarrow\) \a x[\p j]=\p i.
*/
predicate symmetric_all_different(array[int] of var int:x) =
    analyse_all_different(x) /\
    fzn_symmetric_all_different(x);
