color(c1). color(c2). color(c3). color(c4). node(a). node(b). node(c). node(d). edge(a,b). edge(b,c). edge(c,d). edge(a,d). nodeColor(Node,Color) :- node(Node), color(Color), not notChosenColorForNode( Color, Node ). notChosenColorForNode( Color1, Node ) :- node(Node), color(Color1), color(Color2), nodeColor(Node,Color2), Color1 != Color2. :- node(Node1), node(Node2), color(Color), nodeColor(Node1,Color), nodeColor(Node2,Color), edge(Node1,Node2).