SWI-Пролог и ограничения, библиотека CLP (FD)

Я играю с ограничениями в (swi) прологе, используя библиотеку clpfd.

Я пытаюсь определить, когда один набор ограничений инкапсулирует или объединяет другой, например, X <4 инкапсулирует X <7, так как всякий раз, когда первое верно, последнее верно. Это можно легко представить с помощью логического подтекста. Однако я не смог заставить оператор # ==> дать мне нужный результат, поэтому я прибегнул к использованию not (Co1 # / \ # \ Co2), где Co1 и Co2 - ограничения. Это хорошо для отдельных ограничений, но затем я хотел передать соединения ограничений в Co1 и Co2.

Теперь вот руб. Когда я пытаюсь

X#<7 #/\ #\X#<4.

Я вернусь

X in 4..6,
X+1#=_G822,
X+1#=_G834,
_G822 in 5..7,
_G834 in 5..7.

(как ни странно, выполнение этого в Sicstus приводит к ошибке сегментации)

Когда я прохожу

X#<7,X#<4

Я получаю желаемое

X in inf..3.

Очевидно, я не могу передать последнее в not (Co1 # / \ # \ Co2), но первое не дает мне желаемого результата. Кто-нибудь может объяснить, почему два подхода дают разные результаты, и как я могу заставить первый действовать как второй?