Options: ======= use_query_const: yes derive_idb_literals: yes Input Rules: =========== path(X0,X1) :- edge(X0,X1). path(X0,X1) :- edge(X0,X2), path(X2,X1). EDB-Predicates: ============== edge/2. Query: ===== path(0,X0). Conditional Facts: ================= db(edge(X0,X1)) :- edge(X0,X1). rule(path(X0,X1),[edge(X0,X1)]) :- true. rule(path(X0,X1),[edge(X0,X2),path(X2,X1)]) :- true. query(path(0,X0)) :- true. Partial Evaluation is running ... Conditional Facts: ================= db(edge(X0,X1)) :- edge(X0,X1). rule(path(X0,X1),[edge(X0,X1)]) :- true. rule(path(X0,X1),[edge(X0,X2),path(X2,X1)]) :- true. query(path(0,X0)) :- true. node(path(0,X0),[path(0,X0)]) :- true. node(path(0,X0),[edge(0,X0)]) :- true. node(path(0,X0),[edge(0,X1),path(X1,X0)]) :- true. node(path(0,X0),[]) :- p0(X0). node(path(0,X0),[path(X1,X0)]) :- p1(X1). node(path(0,X0),[edge(X1,X0)]) :- p2(X1). node(path(0,X0),[edge(X1,X2),path(X2,X0)]) :- p3(X1). answer(path(X0,X1)) :- path(X0,X1). Rules after Partial Evaluation: ============================== p0(X0) :- edge(0,X0). p1(X1) :- edge(0,X1). p2(X1) :- p1(X1). p3(X1) :- p1(X1). p0(X0) :- p2(X1), edge(X1,X0). p1(X1) :- p3(X2), edge(X2,X1). path(0,X0) :- p0(X0). Rules after Copy Rule Elimination: ================================= p0(X0) :- edge(0,X0). p1(X1) :- edge(0,X1). p0(X0) :- p1(X1), edge(X1,X0). p1(X1) :- p1(X2), edge(X2,X1). path(0,X0) :- p0(X0).