Обработка ограничений Prolog: Упаковочные квадраты

Я пытаюсь решить проблему обработки ограничений в прологе.

Мне нужно упаковать 4 квадрата 5x5,4x4,3x3 и 2x2 в сетке 10x10. Они не могут пересекаться.

Мои переменные выглядят так:

Name: SqX(i), i=1..10, domain: 1..10

Где X 5,4,3 или 2. Индекс i представляет строку, домен - столбец в сетке.

Мои первые ограничения пытаются определить ширину и высоту квадратов. Я формулирую это так:

Constraint: SqX(i) > SqX(j)-X /\ i>j-X, range: i>0 /\ j>0

Так что возможные точки ограничены, чтобы быть в пределах X строк и столбцов друг от друга. Пролог, однако, останавливается на этих ограничениях и дает следующий результат:

Adding constraint "(Sq5_I > Sq5_J-5) /\ (I>J-5)" for values:
        I=1, J=1, 
        I=1, J=2, 
        I=1, J=3, 
        I=1, J=4, 
        I=1, J=5, 
        I=1, J=6, 
=======================[ End Solutions ]=======================

Так что это останавливается там, даже не проверяя другие квадраты. Мои ограничения, скорее всего, слишком жесткие, но я могуне вижу почему или как. Какие-либо предложения?

Ответы на вопрос(4)

Ваш ответ на вопрос