SWI-Prolog y restricciones, biblioteca CLP (FD)
Estoy jugando con restricciones en (swi) prolog usando la biblioteca clpfd.
Estoy tratando de identificar cuándo un conjunto de restricciones encapsula o subsume al otro, p. X <4 encapsula X <7 ya que siempre que lo primero es cierto, lo segundo es cierto. Esto se puede representar fácilmente mediante implicación lógica. Sin embargo, no pude conseguir que el operador # ==> me diera el resultado que deseaba, así que recurrí al uso de not (Co1 # / \ # \ Co2) donde Co1 y Co2 son restricciones. Esto está bien para restricciones individuales, pero luego quería pasar una conjunción de restricciones a Co1 y Co2.
Ahora aquí está el problema. Cuando lo intento
X#<7 #/\ #\X#<4.
Regreso
X in 4..6,
X+1#=_G822,
X+1#=_G834,
_G822 in 5..7,
_G834 in 5..7.
(Curiosamente, hacer esto en Sicstus da como resultado una falla de segmentación)
Cuando paso
X#<7,X#<4
Obtengo el deseado
X in inf..3.
Obviamente, no puedo pasar el último a no (Co1 # / \ # \ Co2), pero el primero no me da el resultado que quiero. ¿Alguien puede explicar por qué los dos enfoques producen resultados diferentes y cómo puedo lograr que el primero actúe como el segundo?