- 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