RE: question about frames

Yes, that was what I had in mind.  Let's call the function symbol rif:new. If it's oracle:new, we don't get as much interoperability.  Also, we've been speaking OBR<->BLD, but really we should speak of OBR<->Core.  So rif:new must be a (the only?) function symbol in Core. I don't want arbitrary function symbols in Core because OBR does not support them and so I cannot translate Core->OBR if Core has function symbols other than rif:new and of course the builtins.  Well, I guess that makes rif:new OK as builtin, doesn't it, since it has a fixed interpretation.  You have to pass in some arguments to rif:new, so that it is a well-defined function of those arguments.  This means rif:new can take any number of arguments.

-----Original Message-----
From: kifer@cs.sunysb.edu [mailto:kifer@cs.sunysb.edu]
Sent: Friday, May 09, 2008 1:32 AM
To: GARY.HALLMARK@ORACLE.COM
Cc: RIF WG
Subject: Re: question about frames




Yes, this is the closest that BLD has to what you need.
It is not an issue of frames vs. relations, but of the inability to have
existentials in the head of the rules in a Horn dialect.

For translating BLD->OBR, you could establish a convention that would use a
fixed known function symbol, so your compiler would know to convert it back
to new().


	--michael  

> 
> I think "f" could be useful for translating from OBR -> BLD.  I glossed 
> over it at first because OBR does not support logical functions, so I'm 
> not sure what to do if I get a logical function when translating from 
> BLD -> OBR.  I guess the translator could know about "f" and nothing 
> more just for roundtripping.
> 
> 
> kifer@cs.sunysb.edu wrote:
> >> 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 Friday, 9 May 2008 17:53:11 UTC