28 lines
		
	
	
		
			609 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			28 lines
		
	
	
		
			609 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
							 | 
						||
| 
								 | 
							
								%%
							 | 
						||
| 
								 | 
							
								%% simple constraint solver for inequalities between variables
							 | 
						||
| 
								 | 
							
								%% thom fruehwirth ECRC 950519, LMU 980207, 980311
							 | 
						||
| 
								 | 
							
								%%
							 | 
						||
| 
								 | 
							
								%% ported to hProlog by Tom Schrijvers 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- module(leq,[leq/0]).
							 | 
						||
| 
								 | 
							
								:- use_module(library(chr)).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- chr_constraint leq/2.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								reflexivity  @ leq(X,X) <=> true.
							 | 
						||
| 
								 | 
							
								antisymmetry @ leq(X,Y), leq(Y,X) <=> X = Y.
							 | 
						||
| 
								 | 
							
								idempotence  @ leq(X,Y) \ leq(X,Y) <=> true.
							 | 
						||
| 
								 | 
							
								transitivity @ leq(X,Y), leq(Y,Z) ==> leq(X,Z).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								leq :-
							 | 
						||
| 
								 | 
							
									circle(X, Y, Z),
							 | 
						||
| 
								 | 
							
									\+ attvar(X),
							 | 
						||
| 
								 | 
							
									X == Y,
							 | 
						||
| 
								 | 
							
									Y == Z.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								circle(X, Y, Z) :-
							 | 
						||
| 
								 | 
							
									leq(X, Y),
							 | 
						||
| 
								 | 
							
									leq(Y, Z),
							 | 
						||
| 
								 | 
							
									leq(Z, X).
							 |