Internally, symbolic domains are mapped to integer ranges from 1 up to the number of domain elements. The first value in the domain declaration corresponds to 1, the second to 2 and so on. Similarly, symbolic domain variables can be mapped to a corresponding IC integer variable. This mapping is accessible through the predicate symbol_domain_index/3:
?- symbol_domain_index(fr, D, I). D = weekday I = 5 Yes (0.00s cpu) ?- X &:: weekday, symbol_domain_index(X, D, I). X = X{[mo, tu, we, th, fr, sa, su]} D = weekday I = I{1 .. 7} Yes (0.00s cpu) ?- X &:: weekday, X &\= we, symbol_domain_index(X, D, I). X = X{[mo, tu, th, fr, sa, su]} D = weekday I = I{[1, 2, 4 .. 7]} Yes (0.00s cpu)
The integer variable I mirrors the domain of the symbolic variable X and vice versa.