% Schur numbers. % % The range of integers to be partitioned is n and the number of % parts is k. The main predicate is assigned. Atom assigned(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. % Guess assigned(X,P) v insomeotherpart(X,P) :- number(X), part(P). % Assign each integer to exactly one part. :- number(X), assigned(X,P1), assigned(X,P2), P1!=P2. % X, Y, and X+Y cannot be in the same part :- X <= Y, assigned(X,P), assigned(Y,P), assigned(Z,P), Z = X + Y.