Using rules in abductive way

Using rules in abductive way

Post by segus » Thu, 19 Jan 2006 01:03:54


Suppose I have a set of rules such as

rule( [push(S, C), chair(C)] , fall(C)).

which intuitively means "if C is a chair and someone S pushes it, C

I would like to program a

follows(+Facts, -Infs)

predicate which performs both deduction and *** . *** , in
particular, must sometimes assume the existence of new (skolem)

Example of deduction:

follows( [ push(jack, c1), chair(c1) ], [fall(c1)] ).

Example of *** :

follows( [fall(c1)], [chair(c1), push(skolem1(c1), c1) ]).

How can I define such a predicate follows/2? I suppose I have to use
term_variables, but I am not sure how. I am using swi-prolog.

Thank you very much for any help,


Using rules in abductive way

Post by bmd » Thu, 19 Jan 2006 06:28:46


No offence meant (this time :-) but *** (and dealing with skolem
variables) is a serious business which transcends programming tricks.
If I remember well, at least three people in our research group have
made a PhD related to *** :
Lode Missiaen, Kristof Van Belleghem and Marc Denecker.
If you are seriously interested in *** get in contact with them.


Bart Demoen


Using rules in abductive way

Post by segus » Thu, 19 Jan 2006 19:57:58

You scared the hell out of me. I did not imagine the question was so
difficult. :-) Thanks for the info.

Using rules in abductive way

Post by Bart Demoe » Thu, 19 Jan 2006 21:51:41

Don't stop at being scared :-)
There are many people who made phd's about tabling, and still, often
one can program some pragmatic but useful memoization.
Same for *** .
Maybe you don't want the most general stuff, that works in recursive
programs, deals with negation, derives minimal sets of abduced literals,
with a minimal number of new skolem constants etc. In that case, you
might still do useful stuff.
So, how far did you intend to go ?


Bart Demoen