database( {
g( From:string, To:string, Cost:integer)
}).
solved(0, a). % nodes solved so far
prim(I+1, l_c<(X, Y, C)>) <- solved(I, X), g(X, Y, C), ~solved(I,Y).
solved(I+1, X) <- solved(I, X).
solved(I, Y) <- prim(I, (X, Y, C)).
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.
edges(X, Y, C) <- prim(_, (X, Y, C)).
export edges(X, Y, C).