Re: question about frames

> 
> I'm wondering how to write some simple rules using frames because frames 
> map to the Java beans that Oracle Business Rules uses as its facts 
> better than relations.  Or so I hoped.  The problem I seem to be having 
> is with frame OIDs.  I don't want to have to specify them in a rule 
> conclusion.  For example, consider the simple rule using relations p and q:
> 
> forall(?x) Q(?x) :- P(?x)
> 
> How do I do this using frames instead of relations?  I think I want
> 
> forall(?x, ?p) and(exists(?q) ?q#Q[x->?x]) :- ?p#P[x->?x]
> 
> Unfortunately this is illegal in BLD because heads cannot be formulas, 
> only atomic.  How can I conclude (assert) that frame a instance exists 
> without giving its OID?  Or do we need some kind of gensym builtin for 
> this?

What you want to do is not possible *in principle* in a Horn-based language
like BLD. The best you can do is to approximate this with a function symbol:

forall ?x ?p and(f(?p)#Q  f(?p)[x->?x]) :- and(?p#P ?p[x->?x])

or (depends on what you are up to)

forall ?x ?p and(f(?x ?p)#Q  f(?p)[x->?x]) :- and(?p#P ?p[x->?x])


What you want to do is possible in FLD, however. (More precisely, in an
FLD-based extension of BLD.)


	--michael  

Received on Thursday, 8 May 2008 00:02:54 UTC