View source with raw comments or as raw
    61 { hc(X,Y) : edge(X,Y) } 1 :- node(X).
    71 { hc(Z,X) : edge(Z,X) } 1 :- node(X).
    8reachable(X) :- node(X), hc(1,X).
    9reachable(Y) :- node(X), node(Y), reachable(X), hc(X,Y).
   10:- not reachable(X), node(X).   11
   12
   13edge(0, 1).
   14edge(1, 2).
   15edge(2, 3).
   16edge(3, 0).
   17
   18edge(2, 0).
   19edge(0, 3).
   20edge(3, 1).
   21
   22node(0..3).
   23
   24
   25distance(X,D) :- reachable(X), hc(1,X), dist(1,X,D).
   26distance(Y,D) :- distance(X,D1), hc(X,Y), dist(X,Y,D2), D = D1 + D2.
   27
   28dist(0, 1, 1).
   29dist(1, 2, 1).
   30dist(2, 3, 1).
   31dist(3, 0, 1).
   32
   33dist(2, 0, 1).
   34dist(0, 3, 1).
   35dist(3, 1, 1)