- From: Michael Kifer <kifer@cs.sunysb.edu>
- Date: Wed, 13 Dec 2006 11:54:00 -0500
- To: public-rif-wg@w3.org (RIF WG)
In the hope of making things clearer with respect to the use of sorts, I thought that the following might be useful. I. Although the normal first-order syntax is not normally called sorted, it actually is. It divides all symbols into 3 disjoint types of sorts: - constants. these belong to just one sort, the primitive sort Con. That is, in regular FOL, all constants are in one big pot - function symbols. This is not a single sort, but a countable number of arrow sorts (one per arity): Con -> Con Con x Con -> Con Con x Con x Con -> Con ...... Typically it is assumed that each func symbol can have exactly one arity and therefore it can belong to exactly one sort. - predicate symbols. This is also not a single sort, but a countable number of Boolean sorts (one per arity): Con Con x Con Con x Con x Con ......... Again, it is assumed that each pred symbol belongs to exactly one Boolean sort. Variables have the sort Con. II. Multisorted languages What is normally called a multi-sorted logic in textbooks is a simple extension of the above where a. The single primitive sort Con is *partitioned* into a bunch of primitive sorts Con1, Con2, ... (in a practical setting they are given meaningful names) b. The arrow sorts now look like Con_i1 x ... x Con_ik -> Con_j where Con_** are Con1, Con2, ... There can now be several sorts for the same arity because they can use different Con_i's in different positions. c. Ditto for Boolean sorts. Each variable is assigned to one of the primitive sorts. III. Order-sorted languages This is a syntactic extension that adds partial order on primitive sorts, so they are no longer disjoint. For instance, if s1 < s2 and f is s symbol of sort s1 then it is also a symbol of sort s2. This partial order is extended to arrow sorts and Boolean sorts in a natural way. At the very least, we would like to have something similar to owl:Thing, which would include all other primitive sorts. This is a very simple example of an order-sorted language. It is easy to extend this idea to allow sorts to have non-empty intersection (not just inclusion) and also allow the same symbol to have multiple sorts within the same category of sorts (primitive, arrow, ...). Each variable is assigned to one of the primitive sorts. IV. Unsorted languages An unsorted language is one that doesn't have any sorts whatsoever. HiLog is an example of such a language. Any symbol can be used anywhere and any terms can be used anywhere as well. For example, p(a,?X)(f(?O,k)(a,b,c)(?P,opq), r(a,b))(?Z) which has 3 levels of parentheses (!) is a well-formed term. (For those who are not familiar with this -- it can actually be useful.) Common Logic is built on this idea. Note that although such logics have first-order syntax, they can have first-order semantics (HiLog/Common Logic do), which means that they can be mapped into first-order logic both syntactically and semantically. (See http://citeseer.ist.psu.edu/chen89hilog.html for details, if unfamiliar.) Since there are no sorts (or just one sort of everything), variables unsorted. V. RIF In RIF we have to combine the unsorted tricks of HiLog with the sorted tricks of multi-sorted logics. The unsorted part is due to the charter where we mention higher-order features and because RDFS is essentially such an unsorted language. For instance, we would like to be able to use the same URI as a predicate name and as a constant. The sorted part comes from the requirement to be able to accommodate the various other dialects, like first-order logic itself. We need to allow sorts to be extensible because of the primitive data types and because we want to retain some control over which symbols should be allowed in which syntactic positions. For instance, in OWL and others integers and floating numbers cannot denote properties or concepts. A very general way to doing this sort of things is described in http://citeseer.ist.psu.edu/chen94sorted.html. Each variable should be assigned to a single sort. We can allow them to be assigned to multiple sorts meaning that they range over the symbols that lie in the intersection of the sorts. --michael
Received on Wednesday, 13 December 2006 16:55:37 UTC