Figured it out!
Here is the input file.
edge(a,b).
edge(b,c).
edge(c,d).
edge(d,e).
edge(a,d).
edge(b,d).
edge(X,Y):-edge(Y,X).
num(1..6).
And the output file.
1{path(X,Y,N):edge(X,Y)}1:-num(N).
%Next edges Y and X1 are the same/connect. Where N is in the range of indices.
:-path(X,Y,N), path(X1,Y1,N+1), Y!=X1, num(N).
%Accept no duplicate paths
:-path(X,Y,N), path(X1,Y1,N2), Y==Y1, X==X1, num(N), num(N2), N!=N2.
:-path(X,Y,N), path(X1,Y1,N2), Y==X1, X==Y1, num(N), num(N2), N!=N2.
#hide.
#show path/3.
Which produces an output as follows on my machine (reversed for readability):
path(e,d,1)
path(d,b,2)
path(b,c,3)
path(c,d,4)
path(d,a,5)
path(a,b,6)