node(a).
node(b).
node(c).
node(d).
node(e).

arc(a,b).
arc(a,c).
arc(b,c).
arc(b,d).
arc(c,d).
arc(d,e).

doubleArc(X,Z):-arc(X,Y),arc(Y,Z).

edge(X,Y):-arc(X,Y).
edge(X,Y):-arc(Y,X).

path(X,Y):-arc(X,Y).
path(X,Y):-arc(X,Z),path(Z,Y).

path(X,Y,path(X,Y)):-arc(X,Y).
path(X,Y,path(X,PathZY)):-arc(X,Z),path(Z,Y,PathZY).


plus(0,X,X).
plus(s(X),Y,Z):-plus(X,s(Y),Z).

plus2(0,X,X).
plus2(s(X),Y,s(Z)):-plus2(X,Y,Z).