# Encoding schur.nlp

Name schur.nlp Martin Gebser n/a Add the normal Schur encoding, which was present for the non-competition benchmark. 2009-03-30 13:03 2009-03-10 12:26 SchurCompetition assigned/2number/1part/1 inpart/2 No % Schur numbers. % % The range of integers to be partitioned is n and the number of parts is k. % The main predicate is inpart. Atom inpart(X,P) % represents the fact that number X is included in part P. % The idea is to find a partition of integers {1,2,...,n} into k parts % such that each part is sum free, i.e. for any X and Y, % X and X+X are in different parts and % if X and Y are in the same part, then X+Y is in a different part. % Assign each integer to exactly one part. inpart(X,P) :- number(X), part(P), not insomeotherpart(X,P). insomeotherpart(X,P) :- number(X), part(P), part(P1), inpart(X,P1), P!=P1. % X and X+X cannot be in the same part :- number(X), part(P), inpart(X,P), inpart(X2,P), X2 = X + X. % X, Y, and X+Y cannot be in the same part :- number(X), number(Y), X != Y, part(P), inpart(X,P), inpart(Y,P), inpart(Z,P), Z = X + Y. % Remove some symmetries by taking always the lowest free part :- number(X), part(P), inpart(X,P), part(P1), P1 < P, not occupied(X,P1). % occupied(X,P) iff there is a number Y < X in P occupied(X,P) :- number(X), number(Y), part(P), Y < X, inpart(Y,P).