A restrição de ordem superior mais geral que descreve uma sequência de números inteiros ordenados em relação a uma relação

No CLP (FD), frequentemente precisamos declarar: "Esta é uma lista de números inteiros e variáveis de domínio finito em (às vezes:estritamente) ordem crescente / decrescente ".

Existe algum sistema CLP (FD) que forneça uma restrição interna (parametrizável) geral para esta tarefa?

O SWI-Prolog fornece uma restrição chamadachain/2, que é semelhante ao que estou procurando. No entanto, o nome é um pouco específico demais para abranger todas as relações que a restrição pode descrever (exemplo:#< não é uma ordem parcial, mas admissível emchain/2, levando à sequência - tomada como um conjunto de números inteiros - sem contar como uma cadeia, conforme definido na teoria da ordem matemática). Portanto, o nome não descreve completamente o que a restrição realmente implementa.

Por favor, dê omais geral definição com relação às restrições usuais de CLP binário (FD) - ou um subconjunto adequado que contenha pelo menos#<, #>, #=< e#>= — Incluindo o nome próprio de acordo com a estrutura algébrica que a restrição define. A condição imposta é que a restrição descreva umareal estrutura matemática que tem um nome próprio na literatura.

Para começar, considere com o SICStus Prolog ou 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).

Casos de amostra:

?- 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.

Observe que seria admissível permitir#\=, porque a relação seriaainda descrever um conexo como conhecido na teoria da ordem matemática. Portanto, o código acima não é mais geral em relação às restrições comuns de CLP binário (FD).

questionAnswers(3)

yourAnswerToTheQuestion