449 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			449 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								% From lim@scorpio Thu Jun 17 14:09:36 1993
							 | 
						||
| 
								 | 
							
								% adapted for CHRs by thom fruehwirth 930617
							 | 
						||
| 
								 | 
							
								% fourier very slow, maybe loops with beale/1, opt1/1 loops, opt2/1 works
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rmin(E):- M=:=E. % thom: no optimisation
							 | 
						||
| 
								 | 
							
								rmax(E):- (-M)=:=E. % thom: no optimisation
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								beale([X1,X2,X3,X4,X5,X6,X7]) :-
							 | 
						||
| 
								 | 
							
								    X1 + 1/4 * X4 - 8 * X5 - X6 + 9 * X7 =:= 0,
							 | 
						||
| 
								 | 
							
								    X2 + 1/2 * X4 - 12 * X5 - 1/2 * X6 + 3 * X7 =:= 0,
							 | 
						||
| 
								 | 
							
								    X3 + X6 =:= 1,
							 | 
						||
| 
								 | 
							
								    X1 >= 0,
							 | 
						||
| 
								 | 
							
								    X2 >= 0,
							 | 
						||
| 
								 | 
							
								    X3 >= 0,
							 | 
						||
| 
								 | 
							
								    X4 >= 0,
							 | 
						||
| 
								 | 
							
								    X5 >= 0,
							 | 
						||
| 
								 | 
							
								    X6 >= 0,
							 | 
						||
| 
								 | 
							
								    X7 >= 0,
							 | 
						||
| 
								 | 
							
								    rmin( - 3/4 * X4 + 20 * X5 - 1/2 * X6 + 6* X7).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								% topb(L,n)
							 | 
						||
| 
								 | 
							
								topb(L,N) :-
							 | 
						||
| 
								 | 
							
								    topb1([],L,0,N).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								topb1(Li,Li,I,I) :- !.
							 | 
						||
| 
								 | 
							
								topb1(Li,Lo,I,N) :-
							 | 
						||
| 
								 | 
							
								    insertb(P,Li,Lt),
							 | 
						||
| 
								 | 
							
								    J is I+1,
							 | 
						||
| 
								 | 
							
								    putcons(Lt,1,J),
							 | 
						||
| 
								 | 
							
								    topb1(Lt,Lo,J,N).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								insertb(P,[],[P]).
							 | 
						||
| 
								 | 
							
								insertb(P,[A|B],[P,A|B]).
							 | 
						||
| 
								 | 
							
								insertb(P,[A|B],[A|C]) :-
							 | 
						||
| 
								 | 
							
								    insertb(P,B,C).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								putcons(_,M,N) :-
							 | 
						||
| 
								 | 
							
								    M > N,
							 | 
						||
| 
								 | 
							
								    !.
							 | 
						||
| 
								 | 
							
								putcons([P|R],M,N) :-
							 | 
						||
| 
								 | 
							
								    M0 is M - 1,
							 | 
						||
| 
								 | 
							
								%   bwriteln(P > M0/N),
							 | 
						||
| 
								 | 
							
								%   bwriteln(P < M/N),
							 | 
						||
| 
								 | 
							
								    P > M0/N,
							 | 
						||
| 
								 | 
							
								    P < M/N,
							 | 
						||
| 
								 | 
							
								    M1 is M + 1,
							 | 
						||
| 
								 | 
							
								    putcons(R,M1,N).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								bwriteln(X) :-
							 | 
						||
| 
								 | 
							
								    writeln(X).
							 | 
						||
| 
								 | 
							
								bwriteln(X) :-
							 | 
						||
| 
								 | 
							
								    writeln(delete(X)).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								% may loop
							 | 
						||
| 
								 | 
							
								fib(0,1).
							 | 
						||
| 
								 | 
							
								fib(1,1).
							 | 
						||
| 
								 | 
							
								fib(N,Z) :-
							 | 
						||
| 
								 | 
							
								    Z =:= X1 + X2,
							 | 
						||
| 
								 | 
							
								    N1 =:= N-1,
							 | 
						||
| 
								 | 
							
								    N2 =:= N-2,
							 | 
						||
| 
								 | 
							
								    fib(N1,X1),
							 | 
						||
| 
								 | 
							
								    fib(N2,X2).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								laplace([_, _]) :- !.
							 | 
						||
| 
								 | 
							
								laplace([H1, H2, H3|T]):-
							 | 
						||
| 
								 | 
							
								        laplace_vec(H1, H2, H3),
							 | 
						||
| 
								 | 
							
								        laplace([H2, H3|T]).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								laplace_vec([_, _], [_, _], [_, _]) :- !.
							 | 
						||
| 
								 | 
							
								laplace_vec([_TL, T, TR|T1], [ML, M, MR|T2], [_BL, B, BR|T3]):-
							 | 
						||
| 
								 | 
							
								        B + T + ML + MR - 4 * M =:= 0,
							 | 
						||
| 
								 | 
							
								        laplace_vec([T, TR|T1], [M, MR|T2], [B, BR|T3]).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								laplace5(M) :-
							 | 
						||
| 
								 | 
							
								    M = [
							 | 
						||
| 
								 | 
							
								         [0,0,0,0,0],
							 | 
						||
| 
								 | 
							
								         [100,R,S,T,100],
							 | 
						||
| 
								 | 
							
								         [100,U,V,W,100],
							 | 
						||
| 
								 | 
							
								         [100,X,Y,Z,100],
							 | 
						||
| 
								 | 
							
								         [100,100,100,100,100]
							 | 
						||
| 
								 | 
							
								         ],
							 | 
						||
| 
								 | 
							
								    laplace(M).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								% [chipc]: laplace7(X).
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								% X = [[0, 0, 0, 0, 0, 0, 0], [100, (5260/99), (63625/1716), (42545/1287), (63625/1716), (5260/99), 100], [100, (388405/5148), (2050/33), (149485/2574), (2050/33), (388405/5148), 100], [100, (1125/13), (2025/26), (75), (2025/26), (1125/13), 100], [100, (477845/5148), (2900/33), (221765/2574), (2900/33), (477845/5148), 100], [100, (9590/99), (162425/1716), (120805/1287), (162425/1716), (9590/99), 100], [100, 100, 100, 100, 100, 100, 100]]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								laplace7(M) :-
							 | 
						||
| 
								 | 
							
								    M = [
							 | 
						||
| 
								 | 
							
								         [0,0,0,0,0,0,0],
							 | 
						||
| 
								 | 
							
								         [100,R11,R12,R13,R14,R15,100],
							 | 
						||
| 
								 | 
							
								         [100,R21,R22,R23,R24,R25,100],
							 | 
						||
| 
								 | 
							
								         [100,R31,R32,R33,R34,R35,100],
							 | 
						||
| 
								 | 
							
								         [100,R41,R42,R43,R44,R45,100],
							 | 
						||
| 
								 | 
							
								         [100,R51,R52,R53,R54,R55,100],
							 | 
						||
| 
								 | 
							
								         [100,100,100,100,100,100,100]
							 | 
						||
| 
								 | 
							
								        ],
							 | 
						||
| 
								 | 
							
								    laplace(M).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								% [chipc]: chipOpt(X,Y,Z).
							 | 
						||
| 
								 | 
							
								% 
							 | 
						||
| 
								 | 
							
								% X = (8/5)
							 | 
						||
| 
								 | 
							
								% Y = (6/5)
							 | 
						||
| 
								 | 
							
								% Z = (14/5)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								chipOpt(X1,X2,X3) :-
							 | 
						||
| 
								 | 
							
								    X1 + 2 * X2 =< 4,
							 | 
						||
| 
								 | 
							
								    3 * X1 + X2 =< 6,
							 | 
						||
| 
								 | 
							
								    X3 =:= X1 + X2,
							 | 
						||
| 
								 | 
							
								    rmax(X3).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								% chipfact(n,1,N)
							 | 
						||
| 
								 | 
							
								chipfact(X,Y,M) :-
							 | 
						||
| 
								 | 
							
								    X =:= 0,
							 | 
						||
| 
								 | 
							
								    !,
							 | 
						||
| 
								 | 
							
								    Y =:= M.
							 | 
						||
| 
								 | 
							
								chipfact(X,Y,M) :-
							 | 
						||
| 
								 | 
							
								    X1 =:= X - 1,
							 | 
						||
| 
								 | 
							
								    M1 =:= X * Y,
							 | 
						||
| 
								 | 
							
								    chipfact(X1,M1,M).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								% order of magnitude slower than chipfact/3
							 | 
						||
| 
								 | 
							
								fact(0,1).
							 | 
						||
| 
								 | 
							
								fact(1,1).
							 | 
						||
| 
								 | 
							
								fact(N,R) :- 1 < N, N =< R, M =:= N-1, fact(M,T), R =:= N * T.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								mg(P,T,I,B,MP):-
							 | 
						||
| 
								 | 
							
								    T > 0,
							 | 
						||
| 
								 | 
							
								    T =< 1,
							 | 
						||
| 
								 | 
							
								    B + MP =:= P * (1 + I/100).
							 | 
						||
| 
								 | 
							
								mg(P,T,I,B,MP):-
							 | 
						||
| 
								 | 
							
								    T > 1,
							 | 
						||
| 
								 | 
							
								    I1 =:= I / 100,
							 | 
						||
| 
								 | 
							
								    T1 =:= T -1,
							 | 
						||
| 
								 | 
							
								    P2 =:= P * (1 + I1) - MP,
							 | 
						||
| 
								 | 
							
								    mg(P2, T1, I, B, MP).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								mg1(X,Y,Z) :-
							 | 
						||
| 
								 | 
							
								    2 =:= T,
							 | 
						||
| 
								 | 
							
								    1 =:= I,
							 | 
						||
| 
								 | 
							
								    T > 1,
							 | 
						||
| 
								 | 
							
								    I1 =:= I / 100,
							 | 
						||
| 
								 | 
							
								    T1 =:= T -1,
							 | 
						||
| 
								 | 
							
								    P2 =:= P * (1 + I1) - MP,
							 | 
						||
| 
								 | 
							
								    T1 > 0,
							 | 
						||
| 
								 | 
							
								    T1 =< 1,
							 | 
						||
| 
								 | 
							
								    B + MP =:= P2 * (1 + I/100).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								% [chipc]: top0(X,Y,Z).
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								% X = _r94 
							 | 
						||
| 
								 | 
							
								% Y = (-9462212541120451001/1000000000000000000) * _r94  + (10462212541120451001/1000000000000000000) * _r90 
							 | 
						||
| 
								 | 
							
								% Z = (101/100) * _r94  + (-1) * _r90      More? (;) 
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								% ---------------------------------------------------------
							 | 
						||
| 
								 | 
							
								% [chipc]: top1(X,Y,Z).
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								% X = _r94 
							 | 
						||
| 
								 | 
							
								% Y = (-101/100) * _r94  + (201/100) * _r90 
							 | 
						||
| 
								 | 
							
								% Z = (101/100) * _r94  + (-1) * _r90      More? (;) 
							 | 
						||
| 
								 | 
							
								% ---------------------------------------------------------
							 | 
						||
| 
								 | 
							
								% [chipc]: top(X,Y,Z).
							 | 
						||
| 
								 | 
							
								% 
							 | 
						||
| 
								 | 
							
								% X = _r94 
							 | 
						||
| 
								 | 
							
								% Y = (-2101900399479668244827490915525641902001/100000000000000000000000000000000000000) * _r94  + (2201900399479668244827490915525641902001/100000000000000000000000000000000000000) * _r90 
							 | 
						||
| 
								 | 
							
								% Z = (101/100) * _r94  + (-1) * _r90      More? (;) 
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								top0(P, B, MP) :- mg(P,10,1,B,MP).
							 | 
						||
| 
								 | 
							
								top1(P, B, MP) :- mg(P,2,1,B,MP).
							 | 
						||
| 
								 | 
							
								top(P, B, MP) :- mg(P,20,1,B,MP).
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								% Detection of Implied Equalities -------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								top4([A,B,C,D]) :-
							 | 
						||
| 
								 | 
							
								        A=<B, 
							 | 
						||
| 
								 | 
							
									B=<C, 
							 | 
						||
| 
								 | 
							
									C=<D, 
							 | 
						||
| 
								 | 
							
									A>=D. 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								%     B = A,
							 | 
						||
| 
								 | 
							
								%     C = A,
							 | 
						||
| 
								 | 
							
								%     D = A  
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								L = [A_m108, B_m128, C_m336, D_m660] 
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								Constraints:
							 | 
						||
| 
								 | 
							
								eq0([B_m128 * 1, D_m660 * -1], 0)
							 | 
						||
| 
								 | 
							
								eq0([C_m336 * 1, D_m660 * -1], 0)
							 | 
						||
| 
								 | 
							
								eq0([A_m108 * -1, D_m660 * 1], 0)
							 | 
						||
| 
								 | 
							
								*/ 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								% X = [(1/3), (0), (13/3)]
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								opt1([X1,X2,X3]) :-
							 | 
						||
| 
								 | 
							
								    X1 + X2 + 2 * X3 =< 9,
							 | 
						||
| 
								 | 
							
								    X1 + X2 - X3     =< 2,
							 | 
						||
| 
								 | 
							
								   -X1 + X2 + X3     =< 4,
							 | 
						||
| 
								 | 
							
								    X1 >= 0,
							 | 
						||
| 
								 | 
							
								    X2 >= 0,
							 | 
						||
| 
								 | 
							
								    X3 >= 0,
							 | 
						||
| 
								 | 
							
								    rmin(X1 + X2 - 4 * X3).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								% X = [(0), (0)]
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								opt2([X1,X2]) :-
							 | 
						||
| 
								 | 
							
								    X1 + 2 * X2 =< 4,
							 | 
						||
| 
								 | 
							
								    X2 =< 1,
							 | 
						||
| 
								 | 
							
								    X1 >= 0,
							 | 
						||
| 
								 | 
							
								    X2 >= 0,
							 | 
						||
| 
								 | 
							
								    rmin(X1 + X2).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								available_res(10).
							 | 
						||
| 
								 | 
							
								available_res(14).
							 | 
						||
| 
								 | 
							
								available_res(27).
							 | 
						||
| 
								 | 
							
								available_res(60).
							 | 
						||
| 
								 | 
							
								available_res(100).
							 | 
						||
| 
								 | 
							
								available_cell(10).
							 | 
						||
| 
								 | 
							
								available_cell(20).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								ohm(V,I,R) :-
							 | 
						||
| 
								 | 
							
								%    bwriteln(V =:= I * R),
							 | 
						||
| 
								 | 
							
								    V =:= I * R.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								sum([],Z) :- 
							 | 
						||
| 
								 | 
							
								%    bwriteln(Z =:= 0),
							 | 
						||
| 
								 | 
							
								    Z =:= 0.
							 | 
						||
| 
								 | 
							
								sum([H|T],N) :-
							 | 
						||
| 
								 | 
							
								%    bwriteln(N =:= H + M),
							 | 
						||
| 
								 | 
							
								    N =:= H + M,
							 | 
						||
| 
								 | 
							
								    sum(T,M).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								kirchoff(L) :-
							 | 
						||
| 
								 | 
							
								    sum(L,0).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								% X = [(200/37), (540/37)]     More? (;) 
							 | 
						||
| 
								 | 
							
								% 
							 | 
						||
| 
								 | 
							
								% X = [(140/37), (600/37)]     More? (;) 
							 | 
						||
| 
								 | 
							
								% 
							 | 
						||
| 
								 | 
							
								% X = [(540/127), (2000/127)]     More? (;) 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								ohm_example([V1,V2]) :-
							 | 
						||
| 
								 | 
							
								    29/2 < V2, V2 < 65/4,
							 | 
						||
| 
								 | 
							
								    available_res(R1),
							 | 
						||
| 
								 | 
							
								    available_res(R2),
							 | 
						||
| 
								 | 
							
								    available_cell(V),
							 | 
						||
| 
								 | 
							
								    ohm(V1,I1,R1), ohm(V2,I2,R2),
							 | 
						||
| 
								 | 
							
								    kirchoff([I1,-I2]), kirchoff([-V,V1,V2]).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								% X = [10, 27, 20]     More? (;) 
							 | 
						||
| 
								 | 
							
								% 
							 | 
						||
| 
								 | 
							
								% X = [14, 60, 20]     More? (;) 
							 | 
						||
| 
								 | 
							
								% 
							 | 
						||
| 
								 | 
							
								% X = [27, 100, 20]     More? (;) 
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								ohm_example1([R1,R2,V]) :-
							 | 
						||
| 
								 | 
							
								    29/2 < V2, V2 < 65/4,
							 | 
						||
| 
								 | 
							
								    available_res(R1),
							 | 
						||
| 
								 | 
							
								    available_res(R2),
							 | 
						||
| 
								 | 
							
								    available_cell(V),
							 | 
						||
| 
								 | 
							
								    ohm(V1,I1,R1), ohm(V2,I2,R2),
							 | 
						||
| 
								 | 
							
								    kirchoff([I1,-I2]), kirchoff([-V,V1,V2]).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								% X = [(14), (60), (20)]
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								ohm1([A,B,C]) :-
							 | 
						||
| 
								 | 
							
								    A =:= 14,
							 | 
						||
| 
								 | 
							
								    B =:= 60,
							 | 
						||
| 
								 | 
							
								    C =:= 20,
							 | 
						||
| 
								 | 
							
								    29/2 < V2, V2 < 65/4,
							 | 
						||
| 
								 | 
							
								    V1/A - V2/B =:= 0,
							 | 
						||
| 
								 | 
							
								    V1 + V2 =:= C.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								example( [X0,X1,X2,X3,X4]) :-
							 | 
						||
| 
								 | 
							
								        87*X0  +52*X1  +27*X2  -54*X3  +56*X4 =<  -93,
							 | 
						||
| 
								 | 
							
								        33*X0  -10*X1  +61*X2  -28*X3  -29*X4 =<   63,
							 | 
						||
| 
								 | 
							
								       -68*X0   +8*X1  +35*X2  +68*X3  +35*X4 =<  -85,
							 | 
						||
| 
								 | 
							
								        90*X0  +60*X1  -76*X2  -53*X3  +24*X4 =<  -68,
							 | 
						||
| 
								 | 
							
								       -95*X0  -10*X1  +64*X2  +76*X3  -24*X4 =<   33,
							 | 
						||
| 
								 | 
							
								        43*X0  -22*X1  +67*X2  -68*X3  -92*X4 =<  -97,
							 | 
						||
| 
								 | 
							
								        39*X0   +7*X1  +62*X2  +54*X3  -26*X4 =<  -27,
							 | 
						||
| 
								 | 
							
								        48*X0  -13*X1   +7*X2  -61*X3  -59*X4 =<   -2,
							 | 
						||
| 
								 | 
							
								        49*X0  -23*X1  -31*X2  -76*X3  +27*X4 =<    3,
							 | 
						||
| 
								 | 
							
								       -50*X0  +58*X1   -1*X2  +57*X3  +20*X4 =<    6,
							 | 
						||
| 
								 | 
							
								       -13*X0  -63*X1  +81*X2   -3*X3  +70*X4 =<   64,
							 | 
						||
| 
								 | 
							
								        20*X0  +67*X1  -23*X2  -41*X3  -66*X4 =<   52,
							 | 
						||
| 
								 | 
							
								       -81*X0  -44*X1  +19*X2  -22*X3  -73*X4 =<  -17,
							 | 
						||
| 
								 | 
							
								       -43*X0   -9*X1  +14*X2  +27*X3  +40*X4 =<   39,
							 | 
						||
| 
								 | 
							
								        16*X0  +83*X1  +89*X2  +25*X3  +55*X4 =<   36,
							 | 
						||
| 
								 | 
							
								        +2*X0  +40*X1  +65*X2  +59*X3  -32*X4 =<   13,
							 | 
						||
| 
								 | 
							
								       -65*X0  -11*X1  +10*X2  -13*X3  +91*X4 =<   49,
							 | 
						||
| 
								 | 
							
								        93*X0  -73*X1  +91*X2   -1*X3  +23*X4 =<  -87.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								top2 :- example( [X0,X1,X2,X3,X4]).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								%     X3<=-5/4-35/68*X2-2/17*X1+X0-35/68*X4,
							 | 
						||
| 
								 | 
							
								%     X3<=68/53-76/53*X2+60/53*X1+90/53*X0+24/53*X4,
							 | 
						||
| 
								 | 
							
								%     X3<=-1/2-31/27*X2-7/54*X1-13/18*X0+13/27*X4,
							 | 
						||
| 
								 | 
							
								%     X3<=17/22+19/22*X2-2*X1-81/22*X0-73/22*X4,
							 | 
						||
| 
								 | 
							
								%     X3<=33/76-16/19*X2+5/38*X1+5/4*X0+6/19*X4,
							 | 
						||
| 
								 | 
							
								%     X3>=87+91*X2-73*X1+93*X0+23*X4,
							 | 
						||
| 
								 | 
							
								%     X3>=-3/76-31/76*X2-23/76*X1+49/76*X0+27/76*X4,
							 | 
						||
| 
								 | 
							
								%     X3<=13/9-14/27*X2+1/3*X1+43/27*X0-40/27*X4,
							 | 
						||
| 
								 | 
							
								%     X3<=2/19+1/57*X2-58/57*X1+50/57*X0-20/57*X4 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								top3 :- example( [X0,_,_,_,X4]).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								%     X0>=477804/40409+6973307/969816*X4,
							 | 
						||
| 
								 | 
							
								%     X0>=7357764/4517605-5006476/13552815*X4,
							 | 
						||
| 
								 | 
							
								%     X0>=58416/36205-4659804/12418315*X4,
							 | 
						||
| 
								 | 
							
								%     X0>=3139326/1972045-745308/1972045*X4,
							 | 
						||
| 
								 | 
							
								%     X0>=67158/43105-16394/43105*X4,
							 | 
						||
| 
								 | 
							
								%     X0>=1327097/6210451-2619277/6210451*X4,
							 | 
						||
| 
								 | 
							
								%     X0<=-688135/1217232-2174029/811488*X4 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								% [chipc]: top5(X).
							 | 
						||
| 
								 | 
							
								% 
							 | 
						||
| 
								 | 
							
								% X = [(0), (0), (0), (1000), (0), (0), (50), (200/9) + (-1/9) * _rp522 , (1000/3), (5350/9) + (1/9) * _rp522 , (4000), (0), (7450/3), (0), (0), (5000), (250), (600), (1000/9) + (-5/9) * _rp522 , (0)]
							 | 
						||
| 
								 | 
							
								% yes.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								top5([X11,X12,X13,X14,X15,X21,X22,X23,X24,X25,Y21,Y22,Y23,Y24,Y25,Z21,Z22,Z23,Z24,Z25]) :-   
							 | 
						||
| 
								 | 
							
								              X11 + X12 + X13 + X14 + X15 =:= 1000,
							 | 
						||
| 
								 | 
							
								              X21 + X22 + X23 + X24 + X25 =:= 1000,
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								              4*X11 + 5*X21 - Y21 - Z21 =< 0,
							 | 
						||
| 
								 | 
							
								             -4*X12 - 5*X22 + Y22 + Z22 =:= 0,
							 | 
						||
| 
								 | 
							
								             -4*X13 - 5*X23 + Y24 - Y25 + Z24 - Z25 =:= 0,
							 | 
						||
| 
								 | 
							
								             -4*X14 - 5*X24 + Y21 - Y22 - Y23 + Y25
							 | 
						||
| 
								 | 
							
								                            + Z21 - Z22 - Z23 + Z25 =:= 0,
							 | 
						||
| 
								 | 
							
								             -4*X15 - 5*X25 + Y23 - Y24 + Z23 - Z24 =:= 0,
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								              7*X11 + 9*X21 >= 0,
							 | 
						||
| 
								 | 
							
								              7*X12 + 9*X22 =< 3000,
							 | 
						||
| 
								 | 
							
								              7*X13 + 9*X23 =< 200,
							 | 
						||
| 
								 | 
							
								              7*X14 + 9*X24 =< 10000,
							 | 
						||
| 
								 | 
							
								              7*X15 + 9*X25 =< 7000,
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								              Z21 =< 5000,
							 | 
						||
| 
								 | 
							
								              Z22 =< 250,
							 | 
						||
| 
								 | 
							
								              Z23 =< 600,
							 | 
						||
| 
								 | 
							
								              Z24 =< 7000,
							 | 
						||
| 
								 | 
							
								              Z25 =< 4000,
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								              X11 >= 0,
							 | 
						||
| 
								 | 
							
								              X12 >= 0,
							 | 
						||
| 
								 | 
							
								              X13 >= 0,
							 | 
						||
| 
								 | 
							
								              X14 >= 0,
							 | 
						||
| 
								 | 
							
								              X15 >= 0,
							 | 
						||
| 
								 | 
							
								              X21 >= 0, X22 >= 0, X23 >= 0, X24 >= 0, X25 >= 0,
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								              Y21 >= 0, Y22 >= 0, Y23 >= 0, Y24 >= 0, Y25 >= 0,
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								              Z21 >= 0, Z22 >= 0, Z23 >= 0, Z24 >= 0, Z25 >= 0,
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								              M =:= 99999,
							 | 
						||
| 
								 | 
							
								              - Min =:= 99999 * X11 + 99999 * X21 + 4 * Y21 + 7 * Y22 + 
							 | 
						||
| 
								 | 
							
											3 * Y23 +  8*Y24 + 5*Y25,
							 | 
						||
| 
								 | 
							
								              rmax(Min).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								top5a(List) :-
							 | 
						||
| 
								 | 
							
									List = [X11,X12,X13,X14,X15,X21,X22,X23,X24,X25,Y21,Y22,Y23,Y24,Y25,Z21,Z22,Z23,Z24,Z25],
							 | 
						||
| 
								 | 
							
								              X11 + X12 + X13 + X14 + X15 =:= 1000,
							 | 
						||
| 
								 | 
							
								              X21 + X22 + X23 + X24 + X25 =:= 1000,
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								              4*X11 + 5*X21 - Y21 - Z21 =< 0,
							 | 
						||
| 
								 | 
							
								             -4*X12 - 5*X22 + Y22 + Z22 =:= 0,
							 | 
						||
| 
								 | 
							
								             -4*X13 - 5*X23 + Y24 - Y25 + Z24 - Z25 =:= 0,
							 | 
						||
| 
								 | 
							
								             -4*X14 - 5*X24 + Y21 - Y22 - Y23 + Y25
							 | 
						||
| 
								 | 
							
								                            + Z21 - Z22 - Z23 + Z25 =:= 0,
							 | 
						||
| 
								 | 
							
								             -4*X15 - 5*X25 + Y23 - Y24 + Z23 - Z24 =:= 0,
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								              7*X11 + 9*X21 >= 0,
							 | 
						||
| 
								 | 
							
								              7*X12 + 9*X22 =< 3000,
							 | 
						||
| 
								 | 
							
								              7*X13 + 9*X23 =< 200,
							 | 
						||
| 
								 | 
							
								              7*X14 + 9*X24 =< 10000,
							 | 
						||
| 
								 | 
							
								              7*X15 + 9*X25 =< 7000,
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								              Z21 =< 5000,
							 | 
						||
| 
								 | 
							
								              Z22 =< 250,
							 | 
						||
| 
								 | 
							
								              Z23 =< 600,
							 | 
						||
| 
								 | 
							
								              Z24 =< 7000,
							 | 
						||
| 
								 | 
							
								              Z25 =< 4000,
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								              X11 >= 0,
							 | 
						||
| 
								 | 
							
								              X12 >= 0,
							 | 
						||
| 
								 | 
							
								              X13 >= 0,
							 | 
						||
| 
								 | 
							
								              X14 >= 0,
							 | 
						||
| 
								 | 
							
								              X15 >= 0,
							 | 
						||
| 
								 | 
							
								              X21 >= 0, X22 >= 0, X23 >= 0, X24 >= 0, X25 >= 0,
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								              Y21 >= 0, Y22 >= 0, Y23 >= 0, Y24 >= 0, Y25 >= 0,
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								              Z21 >= 0, Z22 >= 0, Z23 >= 0, Z24 >= 0, Z25 >= 0,
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								              M =:= 99999,
							 | 
						||
| 
								 | 
							
									      Min = 23450,
							 | 
						||
| 
								 | 
							
								              - Min =:= 99999 * X11 + 99999 * X21 + 4 * Y21 + 7 * Y22 + 
							 | 
						||
| 
								 | 
							
											3 * Y23 +  8*Y24 + 5*Y25.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								%       M = 99999,
							 | 
						||
| 
								 | 
							
								%       Min = 23450,
							 | 
						||
| 
								 | 
							
								%       X11 = 0,
							 | 
						||
| 
								 | 
							
								%       X12 = 0,
							 | 
						||
| 
								 | 
							
								%       X13 = 0,
							 | 
						||
| 
								 | 
							
								%       X14 = 1000,
							 | 
						||
| 
								 | 
							
								%       X15 = 0,
							 | 
						||
| 
								 | 
							
								%       X21 = 0,
							 | 
						||
| 
								 | 
							
								%       X22 = 50,
							 | 
						||
| 
								 | 
							
								%       X23 = 1850/3-X25,
							 | 
						||
| 
								 | 
							
								%       X24 = 1000/3,
							 | 
						||
| 
								 | 
							
								%       Y21 = 4000,
							 | 
						||
| 
								 | 
							
								%       Y22 = 0,
							 | 
						||
| 
								 | 
							
								%       Y23 = 7450/3,
							 | 
						||
| 
								 | 
							
								%       Y24 = 0,
							 | 
						||
| 
								 | 
							
								%       Y25 = 0,
							 | 
						||
| 
								 | 
							
								%       Z21 = 5000,
							 | 
						||
| 
								 | 
							
								%       Z22 = 250,
							 | 
						||
| 
								 | 
							
								%       Z23 = 600,
							 | 
						||
| 
								 | 
							
								%       Z24 = 9250/3-5*X25,
							 | 
						||
| 
								 | 
							
								%       Z25 = 0,
							 | 
						||
| 
								 | 
							
								%       X25>=5350/9,
							 | 
						||
| 
								 | 
							
								%       X25<=1850/3 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								% ===========================================================================
							 |