- From: Chris Welty <cawelty@gmail.com>
- Date: Sun, 01 Mar 2009 20:42:12 -0500
- To: kifer@cs.sunysb.edu
- CC: Sandro Hawke <sandro@w3.org>, public-rif-wg@w3.org
Michael, Why don't you just pick something for slots - *anything* other than "->" is fine with me. I'm OK with ":", I don't find that nearly as confusing since it is used in so many contexts everywhere my eyes don't expect it to mean anything without parsing context. "->" is not like that for me (as a C++ programmer, I used "(*ptr)." instead). -Chris Michael Kifer wrote: >>>> -- Responding to Chris's strong dislike of "->" as very confusing in >>>> a logic language, we finally settled on "::" to replace it in NAU >>>> and frames. >>>> eg: p(b :: 1, bb :: f[my:color :: your:red]) >>> I can't imagine anything uglier than this particular choice. >> Yeah, Harold said you probably wouldn't like it. >> >> Do you have any suggestions for what we could use other than "->", which >> Chris objects to on the grounds that it looks an awful lot like like the >> "implies" arrow? > > Not really. The only two symbols that are widely familiar to people are the -> > and the :. The colon will be confusing, as you mentioned, because of the curies. > >> For my part, I don't mind the arrow too much. I've spend some months >> here and there using Otter -- for which it is the implication operator >> -- but I spent much more time using C and C++ for which it is the >> "member by pointer" operator. That usage is kind of like this F-Logic >> usage, and yet quite different.... > > Right. And since the arrow is inside the term and not at the top level, it > cannot be confused with the implication. > > >> Some other options we talking about: >> >> -- nothing (whitespace), which we might be able to parse, but >> could still get confusing >> >> object[property value] >> >> -- single colon, which is perhaps my favorite, but runs more risk >> of being confused with namespace stuff (even if we require >> whitespace): >> >> object[property : value] >> >> [For myself, I think the namespace separator ought to be >> underscore instead of colon, or cleverly dot (as in python), >> but I guess I'm too late on that one.] > > As you said, the above are not really good options. > >> -- colon-equals, suggesting the value is assigned to this property >> >> object[property := value] > > This is less objectionable but assignment is a wrong connotation, > especially in the body of a rule. Also, a[b:c := e] isn't pretty. > >> -- equals, which we could parse (I think) if we require formulas >> inside terms to be wrapped in bracess >> >> object[property = value] > > This is like := but looks better with curies. > > >> Anything else? There are things I like and dislike about all these >> options. >> >>>> Conclusions on other issues: >>>> >>>> -- It would be nice to anonymous frames. In PS, the syntax could be >>>> _[attr->value] (or _[attr :: value]) >>> There is more to anonymous frames than that. What is needed is a general synt >>> ax >>> for skolem functions/constants. The anonymous frame is just a special case of >>> that. In FLORA-2, there are two kinds of symbols for Skolem symbols: _# and >>> _#<number> (ie, _#1, _#2, etc.). This allows skolems to be cross-referenced >>> within the same formula (eg., when you skolemize an existential var, which >>> occurs in several places in the same formula). >> Why not just use existential vars, and let systems Skolemize if they >> need to? (And then an anonymous frame is just a frame whose object is >> an existential variable, implicitely scoped at the innermost containing >> formula.) > > Because existentials and skolem constants are not the equivalent. This is why > in rules existentials in the heads are not allowed, but constants are allowed. > > >>>> -- It would be nice to have nested frames, and more generally frames >>>> in terms. Can we please add them back? They're just syntactic >>>> sugar (unless you have anonymous frames). >>> In FLD, a nested formula is not syntactic sugar. It is a reified formula. >>> To distinguish syntactic sugar from reification, some syntax is needed. >>> For instance, a[b->{c[d->e]}]. >> Oh! I thought (perhaps wishfully?) that in F-Logic you could write: >> >> sandros_car[color->green, maker->honda[located_in->Japan]] >> >> and if it occured as a formula, it was syntactic sugar for: >> >> sandros_car[color->green, maker->honda] and honda[located_in->Japan] >> >> I also thought you could do the same sort of thing in a term, so >> >> p(x) and q(sandros_car[color->green]) >> >> was syntactic sugar for: >> >> p(x) and q(sandros_car) and sandros_car[color->green] >> >> Have I been wrong about these? > > You are right about this: in F-logic and in FLORA-2 nested frames are syntactic > sugar. But the presentation syntax was designed to be abstract (by popular > demand), so the emphasis was on expressivity and not on syntactic sugar. > > There is one more issue here. What about things like p(a[b->c])? > Should it be a syntactic sugar for "p(a) and a[b->c]" or p of a reification of > the formula a[b->c]? > To have a consistent grammar, the decision here should be the same as in the > case of frames. So, in FLORA-2 it is the former (syntactic sugar). To reify, one > needs to enclose the formula inside ${...} as in p(${a[b->c]}) (btw, simple > {...} won't do because {...} is used as a shortcut for the set symbol (and also > for constraints in LP). > Interestingly, the experience shows that in case of the frames, people prefer > that the default for > a[b->c[d->e]] > be the shortcut, ie, "a[b->c] and c[d->e]". > But in case of other nested occurrences, they prefer the other way around, ie, > that > p(c[d->e]) > would mean that c[d->e] is a term that represents reification of the formula > c[d->e]. > > I don't have an ideal solution for this. > > michael > > -- Dr. Christopher A. Welty IBM Watson Research Center +1.914.784.7055 19 Skyline Dr. cawelty@gmail.com Hawthorne, NY 10532 http://www.research.ibm.com/people/w/welty
Received on Monday, 2 March 2009 01:43:16 UTC