Add graph coloring example
This commit is contained in:
parent
57e4a9f145
commit
a81da75306
12
examples/coloring-1.lp
Normal file
12
examples/coloring-1.lp
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
% After eliminating the super-easy aggregate expression from the rule
|
||||||
|
%
|
||||||
|
% {color(X,Z) : color(Z)} = 1 :- vertex(X).
|
||||||
|
%
|
||||||
|
% we get 4 rules:
|
||||||
|
|
||||||
|
{color(X,Z)} :- vertex(X), color(Z).
|
||||||
|
:- color(X,Z1), color(X,Z2), vertex(X), color(Z1), color(Z2), Z1 != Z2.
|
||||||
|
aux(X) :- vertex(X), color(Z), color(X,Z).
|
||||||
|
:- vertex(X), not aux(X).
|
||||||
|
|
||||||
|
:- edge(X,Y), color(X,Z), color(Y,Z).
|
14
examples/coloring.spec
Normal file
14
examples/coloring.spec
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
input: vertex/1, edge/2, color/1.
|
||||||
|
|
||||||
|
output: color/2.
|
||||||
|
|
||||||
|
# edge/2 is a set of pairs of vertices
|
||||||
|
assume: forall X, Y (edge(X,Y) -> vertex(X) and vertex(Y)).
|
||||||
|
|
||||||
|
# color/2 is a function from vertices to colors
|
||||||
|
spec: forall X, Z (color(X,Z) -> vertex(X) and color(Z)).
|
||||||
|
spec: forall X (vertex(X) -> exists Z color(X,Z)).
|
||||||
|
spec: forall X, Z1, Z2 (color(X,Z1) and color(X,Z2) -> Z1 = Z2).
|
||||||
|
|
||||||
|
# adjacent vertices have different colors
|
||||||
|
spec: not exists X, Y, Z (edge(X,Y) and color(X,Z) and color(Y,Z)).
|
Loading…
Reference in New Issue
Block a user