does mod not work for constrained ranges anymore?

From: Raphael Finkel <raphael_at_cs.uky.edu>
Date: Tue 17 Jul 2001 12:24:28 PM GMT
Message-Id: <200107171224.f6HCOSf22321@herkimer.cs.engr.uky.edu>
The ECLiPSe banner with the version number and configuration
(unless visible in the script):


Machine type: i686

Operating system name and version number: Linux 2.2.18

If graphics is involved, ProTcl and Tcl/Tk release number,
X version number, X server type and window manager: not involved

Your .eclipserc and ECLIPSE... environment variables, if used: not used

A script which causes the bug to appear, enhanced by comments where
necessary (start from the ECLiPSe banner unless the option -e is used):

	Short description: In the previous version of Eclipse, I had no trouble
	using the arithmetic "mod" operator in constraints.  Now I get:

	type error in
	 (Robert{[1 .. 6]} + 1 - 1) mod (6 - 1 + 1) + 1 #\= Kate{[1 .. 6]}

	The relevant declarations are:

		Person = [Claude, Jeanne, Kate, Liana, Martin, Robert],
		Person :: [1,2,3,4,5,6],

	Long description:  Here is the full program.  I put it in a file "foo" and
	invoke "eclipse -b foo -e run".

	% ---- long insert follows

:- use_module(library(fd)) .
:- use_module(library(fd_search)) .
:- use_module(library(fd_global)) .
:- import occurrences/3 from fd_global.
:- import alldifferent/1 from fd_global.

run :- 
% Description of a logic puzzle: French Phrases, Italian Soda, p. 43,
% Dell Logic Puzzles June 1999 (4 stars)
% CLASS person: claude jeanne kate liana martin robert
	Person = [Claude, Jeanne, Kate, Liana, Martin, Robert],
% PARTITION gender: men women
	Men = 'Men',
	Women = 'Women',
	Gender = [Gender1, Gender2, Gender3, Gender4, Gender5, Gender6],
	Gender :: [Men, Women],
% 	AGREE men: claude martin robert
	% translator deferring output until declarations done.
% 	AGREE women: jeanne kate liana
	% translator deferring output until declarations done.
% CLASS position: 1 .. 6 circular
	% We translate this class as a row identifier
% CLASS soda: blueberry lemon peach tangelo kiwi grapefruit
	Soda = [Blueberry, Lemon, Peach, Tangelo, Kiwi, Grapefruit],
% CLASS visits: quebec tahiti haiti martinique belgium ivory
	Visits = [Quebec, Tahiti, Haiti, Martinique, Belgium, Ivory],
% finishing declarations
	Visits :: [1,2,3,4,5,6],
	alldifferent(Visits),
	Person :: [1,2,3,4,5,6],
	alldifferent(Person),
	Soda :: [1,2,3,4,5,6],
	alldifferent(Soda),
	% deferred 	AGREE men: claude martin robert
	(Claude #= 1 #/\ Gender1 #= Men #\/
	Claude #= 2 #/\ Gender2 #= Men #\/
	Claude #= 3 #/\ Gender3 #= Men #\/
	Claude #= 4 #/\ Gender4 #= Men #\/
	Claude #= 5 #/\ Gender5 #= Men #\/
	Claude #= 6 #/\ Gender6 #= Men),
	(Martin #= 1 #/\ Gender1 #= Men #\/
	Martin #= 2 #/\ Gender2 #= Men #\/
	Martin #= 3 #/\ Gender3 #= Men #\/
	Martin #= 4 #/\ Gender4 #= Men #\/
	Martin #= 5 #/\ Gender5 #= Men #\/
	Martin #= 6 #/\ Gender6 #= Men),
	(Robert #= 1 #/\ Gender1 #= Men #\/
	Robert #= 2 #/\ Gender2 #= Men #\/
	Robert #= 3 #/\ Gender3 #= Men #\/
	Robert #= 4 #/\ Gender4 #= Men #\/
	Robert #= 5 #/\ Gender5 #= Men #\/
	Robert #= 6 #/\ Gender6 #= Men),
	% deferred 	AGREE women: jeanne kate liana
	(Jeanne #= 1 #/\ Gender1 #= Women #\/
	Jeanne #= 2 #/\ Gender2 #= Women #\/
	Jeanne #= 3 #/\ Gender3 #= Women #\/
	Jeanne #= 4 #/\ Gender4 #= Women #\/
	Jeanne #= 5 #/\ Gender5 #= Women #\/
	Jeanne #= 6 #/\ Gender6 #= Women),
	(Kate #= 1 #/\ Gender1 #= Women #\/
	Kate #= 2 #/\ Gender2 #= Women #\/
	Kate #= 3 #/\ Gender3 #= Women #\/
	Kate #= 4 #/\ Gender4 #= Women #\/
	Kate #= 5 #/\ Gender5 #= Women #\/
	Kate #= 6 #/\ Gender6 #= Women),
	(Liana #= 1 #/\ Gender1 #= Women #\/
	Liana #= 2 #/\ Gender2 #= Women #\/
	Liana #= 3 #/\ Gender3 #= Women #\/
	Liana #= 4 #/\ Gender4 #= Women #\/
	Liana #= 5 #/\ Gender5 #= Women #\/
	Liana #= 6 #/\ Gender6 #= Women),
% declarations finished

% CONFLICT quebec 1
	1 #\= Quebec,
% REQUIRED quebec blueberry OR quebec lemon
	Quebec #= Blueberry #\/ Quebec #= Lemon,
% OFFSET !+-1 position: robert kate
	(Robert + 1 - 1) mod (6-1+1)+1 #\= Kate #/\ (Robert - 1 - 1) mod (6-1+1)+1 #\= Kate,
% OFFSET +-3 position: robert peach
	(Robert + 3 - 1) mod (6-1+1)+1 #= Peach #\/ (Robert - 3 - 1) mod (6-1+1)+1 #= Peach,
% CONFLICT tangelo tahiti
	Tahiti #\= Tangelo,
% OFFSET +-1 position: liana tangelo
	(Liana + 1 - 1) mod (6-1+1)+1 #= Tangelo #\/ (Liana - 1 - 1) mod (6-1+1)+1 #= Tangelo,
% OFFSET +-1 position: liana tahiti
	(Liana + 1 - 1) mod (6-1+1)+1 #= Tahiti #\/ (Liana - 1 - 1) mod (6-1+1)+1 #= Tahiti,
% OFFSET !+-1 position: jeanne kiwi
	(Jeanne + 1 - 1) mod (6-1+1)+1 #\= Kiwi #/\ (Jeanne - 1 - 1) mod (6-1+1)+1 #\= Kiwi,
% VAR x
	X :: 1..6,
% AGREE men: haiti 3 x
	(Haiti #= 1 #/\ Gender1 #= Men #\/
	Haiti #= 2 #/\ Gender2 #= Men #\/
	Haiti #= 3 #/\ Gender3 #= Men #\/
	Haiti #= 4 #/\ Gender4 #= Men #\/
	Haiti #= 5 #/\ Gender5 #= Men #\/
	Haiti #= 6 #/\ Gender6 #= Men),
	(3 #= 1 #/\ Gender1 #= Men #\/
	3 #= 2 #/\ Gender2 #= Men #\/
	3 #= 3 #/\ Gender3 #= Men #\/
	3 #= 4 #/\ Gender4 #= Men #\/
	3 #= 5 #/\ Gender5 #= Men #\/
	3 #= 6 #/\ Gender6 #= Men),
	(X #= 1 #/\ Gender1 #= Men #\/
	X #= 2 #/\ Gender2 #= Men #\/
	X #= 3 #/\ Gender3 #= Men #\/
	X #= 4 #/\ Gender4 #= Men #\/
	X #= 5 #/\ Gender5 #= Men #\/
	X #= 6 #/\ Gender6 #= Men),
% CONFLICT haiti 3 x
	Haiti #\= X,
	3 #\= Haiti,
	3 #\= X,
% CONFLICT x claude
	Claude #\= X,
% CONFLICT claude martinique
	Claude #\= Martinique,
% OFFSET +-1 position: grapefruit claude
	(Grapefruit + 1 - 1) mod (6-1+1)+1 #= Claude #\/ (Grapefruit - 1 - 1) mod (6-1+1)+1 #= Claude,
% OFFSET +-1 position: grapefruit martinique
	(Grapefruit + 1 - 1) mod (6-1+1)+1 #= Martinique #\/ (Grapefruit - 1 - 1) mod (6-1+1)+1 #= Martinique,
% REQUIRED belgium 4 OR belgium 5
	Belgium #= 4 #\/ Belgium #= 5,
% CONFLICT belgium tangelo
	Belgium #\= Tangelo,
% VAR y
	Y :: 1..6,
% MATCH 2 4 6, kate claude y
	2 #= Kate #\/ 2 #= Claude #\/ 2 #= Y,
	4 #= Kate #\/ 4 #= Claude #\/ 4 #= Y,
	6 #= Kate #\/ 6 #= Claude #\/ 6 #= Y,
	Kate #= 2 #\/ Kate #= 4 #\/ Kate #= 6,
	Claude #= 2 #\/ Claude #= 4 #\/ Claude #= 6,
	Y #= 2 #\/ Y #= 4 #\/ Y #= 6,
	Kate #\= Y,
	Claude #\= Y,
% CONFLICT y lemon
	Lemon #\= Y,
% VAR a
	A :: 1..6,
% VAR b
	B :: 1..6,
% AGREE men: a b
	(A #= 1 #/\ Gender1 #= Men #\/
	A #= 2 #/\ Gender2 #= Men #\/
	A #= 3 #/\ Gender3 #= Men #\/
	A #= 4 #/\ Gender4 #= Men #\/
	A #= 5 #/\ Gender5 #= Men #\/
	A #= 6 #/\ Gender6 #= Men),
	(B #= 1 #/\ Gender1 #= Men #\/
	B #= 2 #/\ Gender2 #= Men #\/
	B #= 3 #/\ Gender3 #= Men #\/
	B #= 4 #/\ Gender4 #= Men #\/
	B #= 5 #/\ Gender5 #= Men #\/
	B #= 6 #/\ Gender6 #= Men),
% OFFSET 1 position: ivory a
	(Ivory + 1 - 1) mod (6-1+1)+1 #= A,
% OFFSET 1 position: b ivory
	(B + 1 - 1) mod (6-1+1)+1 #= Ivory,

% Propagate information
	flatten([Visits, Person, Gender, Soda, A, B, X, Y], AllVars),
	search(AllVars, 0, occurrence, indomain, complete,
		[backtrack(BacktrackCount)]),
% print result
	write(stdout, '\nvisits:'),
	write(stdout, ' Quebec='), write(stdout, Quebec),
	write(stdout, ' Tahiti='), write(stdout, Tahiti),
	write(stdout, ' Haiti='), write(stdout, Haiti),
	write(stdout, ' Martinique='), write(stdout, Martinique),
	write(stdout, ' Belgium='), write(stdout, Belgium),
	write(stdout, ' Ivory='), write(stdout, Ivory),
	write(stdout, '\nposition:'),
	write(stdout, ' 1='), write(stdout, 1),
	write(stdout, ' 2='), write(stdout, 2),
	write(stdout, ' 3='), write(stdout, 3),
	write(stdout, ' 4='), write(stdout, 4),
	write(stdout, ' 5='), write(stdout, 5),
	write(stdout, ' 6='), write(stdout, 6),
	write(stdout, '\nperson:'),
	write(stdout, ' Claude='), write(stdout, Claude),
	write(stdout, ' Jeanne='), write(stdout, Jeanne),
	write(stdout, ' Kate='), write(stdout, Kate),
	write(stdout, ' Liana='), write(stdout, Liana),
	write(stdout, ' Martin='), write(stdout, Martin),
	write(stdout, ' Robert='), write(stdout, Robert),
	write(stdout, '\npartition gender='), write(stdout, Gender),
	write(stdout, '\nsoda:'),
	write(stdout, ' Blueberry='), write(stdout, Blueberry),
	write(stdout, ' Lemon='), write(stdout, Lemon),
	write(stdout, ' Peach='), write(stdout, Peach),
	write(stdout, ' Tangelo='), write(stdout, Tangelo),
	write(stdout, ' Kiwi='), write(stdout, Kiwi),
	write(stdout, ' Grapefruit='), write(stdout, Grapefruit),
	write(stdout, '\nvar a = '), write(stdout, A),
	write(stdout, '\nvar b = '), write(stdout, B),
	write(stdout, '\nvar x = '), write(stdout, X),
	write(stdout, '\nvar y = '), write(stdout, Y),
	write(stdout, '\nBacktrack = '),
	write(stdout, BacktrackCount), write(stdout, '\n') .
Received on Tue Jul 17 13:24:45 2001

This archive was generated by hypermail 2.1.8 : Wed 16 Nov 2005 06:08:08 PM GMT GMT