- From: Michael Kifer <kifer@cs.sunysb.edu>
- Date: Sun, 1 Mar 2009 21:07:25 -0500
- To: Chris Welty <cawelty@gmail.com>
- Cc: Sandro Hawke <sandro@w3.org>, public-rif-wg@w3.org
The problem is that : is used for curies. If we use it, then we have to require spaces around, and it becomes unreadable: foo:bar[moo:bar : shoo:bar]. Actually, a (long) while ago I proposed to use mnemonic names as in WSMO (long, but clear): -> --- hasValue # --- memberOf ## --- subclassOf but somebody shot it down. I am not married to ->, but just don't see a good alternative (that others would also approve). In fact, I myself *hate* # and ##, but avoided raising this issue in the interests of global peace. If : is game, then I would rather use it for membership and :: for subclass, as in a number of o-o languages. michael On Sun, 01 Mar 2009 20:42:12 -0500 Chris Welty <cawelty@gmail.com> wrote: > > 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 > > > > >
Received on Monday, 2 March 2009 02:08:04 UTC