Наиболее общее ограничение высшего порядка, описывающее последовательность целых чисел, упорядоченных по отношению

В CLP (FD) нам часто нужно указывать: «Это список целых чисел и переменных конечной области в (иногда:строго) в порядке возрастания / убывания. "

Существует ли какая-либо система CLP (FD), которая обеспечивает общее (параметризуемое) встроенное ограничение для этой задачи?

SWI-Prolog предоставляет ограничение, называемоеchain/2, который похож на то, что я ищу. Однако имя является слишком конкретным, чтобы охватить все отношения, которые может описать ограничение (пример:#< не частичный порядок, но допустимый вchain/2, приводя к последовательности - взятой как набор целых чисел - больше не считается цепочкой, как это определено в математической теории порядка). Следовательно, имя не полностью описывает то, что фактически реализует ограничение.

Пожалуйста, дайтесамый общий определение относительно обычных двоичных ограничений CLP (FD) - или подходящего подмножества, которое содержит по крайней мере#<, #>, #=< а также#>= — в том числе собственное имя в соответствии с алгебраической структурой, определяемой ограничением. Условие состоит в том, что ограничение описываетфактический математическая структура, которая имеет собственное имя в литературе.

Для начала рассмотрим SICStus Prolog или SWI:

:- use_module(library(clpfd)).

connex(Relation_2, List) :-
    connex_relation(Relation_2),
    connex_(List, Relation_2).

connex_relation(#=).
connex_relation(#<).
connex_relation(#=<).
connex_relation(#>).
connex_relation(#>=).

connex_([], _).
connex_([L|Ls], Relation_2) :-
    foldl(adjacent(Relation_2), Ls, L, _).

adjacent(Relation_2, X, Prev, X) :- call(Relation_2, Prev, X).

Примеры случаев:

?- connex(#<, [A,B,C]).
A#=<B+-1,
B#=<C+-1.

?- connex(#=, [A,B,C]).
A = B, B = C,
C in inf..sup.

?- maplist(connex(#<), [[A,B],[C,D]]).
A#=<B+-1,
C#=<D+-1.

Обратите внимание, что было бы даже допустимо разрешить#\=потому что отношение будетеще опишите связь, известную в математической теории порядка. Следовательно, приведенный выше код не является наиболее общим в отношении обычных двоичных ограничений CLP (FD).

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

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