\begin{verbatim} const total=8. const max=50. num(1..total). numm(1..max). number(0..total). vertex(v1). vertex(v2). %vertex(v3). %vertex(v4). col(c1). col(c2). col(c3). colored(V,C) :- vertex(V), col(C), not not_colored(V,C). not_colored(V,C) :- vertex(V), col(C), not colored(V,C). %%%%%%%%%%%%%%%%%%%%%%% not_assg(X,Y,J) :- vertex(X), col(Y), col(YY), colored(X,Y), colored(X,YY), num(J), assg(X,YY,J), neq(Y,YY). not_assg(X,Y,J) :- vertex(X), col(Y), col(YY), colored(X,Y), num(J), num(JJ), assg(X,Y,JJ), neq(J,JJ). assg(X,Y,J) :- vertex(X), col(Y), colored(X,Y), num(J), not not_assg(X,Y,J). numbered(X,J) :- num(J), vertex(X), col(Y), colored(X,Y), assg(X,Y,J). :- num(J), vertex(X), col(Y), colored(X,Y), numbered(X,J+1), not numbered(X,J). one_is_assigned(X) :- vertex(X), col(Y), colored(X,Y), assg(X,Y,1). :- vertex(X), col(Y), colored(X,Y), not one_is_assigned(X). initialize(count,X,1):- vertex(X), col(Y), colored(X,Y), assg(X,Y,1). update(count, W, Y, W+1) :- numm(W), col(Y). aggr(count,1,X,1) :- vertex(X), col(Y), colored(X,Y), initialize(count,X,1). aggr(count,J+1,X,Z) :- num(J), 0 < J, J <= total-1, numm(W), vertex(X), col(Y), colored(X,Y), aggr(count,J,X,W), assg(X,Y,J+1), update(count,W,Y,Z). last_number(X,J) :- num(J), vertex(X), col(Y), colored(X,Y), numbered(X,J), not numbered(X,J+1). count_color(X,Q) :- vertex(X), num(J), numm(Q), last_number(X,J), aggr(count,J,X,Q). %%%%%%%%%%%%%%%%%%%%%%%% has_color(V) :- vertex(V), col(C), colored(V,C). count_color(V,0) :- vertex(V), not has_color(V). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % :- vertex(V), % number(N), % count_color(V,N), % neq(N,1). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% :- vertex(V), number(N), count_color(V,N), N>2. :- vertex(V), number(N), count_color(V,N), N<1. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% hide num(X). hide numm(X). hide number(X). hide numbered(X,J). hide one_is_assigned(X). hide initialize(X,Y,Z). hide update(X,Y,Z,T). hide aggr(U,V,W,X). hide last_number(X,Y). hide not_assg(X,Y,J). hide assg(X,Y,J). hide vertex(X). hide col(C). hide not_colored(X,Y). hide count_color(V,N). hide has_color(X). \end{verbatim}