database ( {
g(X:string, Y:string, C:integer)
}).
export edge(I, X).
export node_set(J, X, Y, C).
export graph(J, X, Y, C).
export delta_graph(J, X, Y).
export sarc(J, SX, SY).
graph(0,X,Y,C) <- g(X,Y,C).
delta_graph(J+1, X, Y) <-
sarc(J+1, SX, SY),
node_set(J, X, SX, _),
node_set(J, Y, SY, _),
graph(J, X, Y, _).
graph(J+1, X, Y, C) <-
graph(J, X, Y, C),
~delta_graph(J+1, X, Y),
~delta_graph(J+1, Y, X).
edge(0, (nil, nil, 0)).
edge(J+1, l_c<(X, Y, C)>) <- graph(J, X, Y, C).
sarc(J+1, SX, SY)<-
edge(J+1, (X, Y, _)), node_set(J, X, SX, CX), node_set(J, Y, SY, CY), CX>=CY.
sarc(J+1, SY, SX)<-
edge(J+1, (X, Y, _)), node_set(J, X, SX, CX), node_set(J, Y, SY, CY), CX<CY.
node_set(0,X,X,1)<-g(X,_,_).
node_set(0,X,X,1)<-g(_,X,_).
node_set(J+1, Y, SX, C)<-
sarc(J+1, SX, SY),
node_set(J, _, SX, C2),
node_set(J, Y, SY, C1),
C=C1+C2.
node_set(J+1, X, SX, C)<-node_set(J, X, SX, C), ~sarc(J+1, _, SX).
single(l_c, (X, Y, C), (X,Y, C)).
multi(l_c, (X1, Y1, C1), (X2, Y2, C2), (X2, Y2, C2)) <- C2 <= C1.
multi(l_c, (X1, Y1, C1), (X2,Y2, C2), (X1, Y1, C1)) <- C2 > C1.
Haixun Wang
4/22/1998