| Thread Links | Date Links | ||||
|---|---|---|---|---|---|
| Thread Prev | Thread Next | Thread Index | Date Prev | Date Next | Date Index |
|
Chris,
I have some questions about the appropriate use of the definite description notation in the new KIF. This started out as a quest to eliminate the "helper terms" that I use in the IFF Foundation Ontology, but has ended up as a logical code optimization effort using definite descriptions. Although I am cc-ing this to the SUO list because of their possible interest in helper terms and definite descriptions, I am principally addressing this to you, since you are the author of the definite description capability in the new KIF. In the IFF Foundation Ontology on which I have been working, there is an practical partition of terms into three kinds: core terms, helper terms and convenience terms. These term kinds are defined in terms of two distinctions: required terms versus optional terms and desired terms, representing common terminology, versus artificial terms.
To recap, I have used helper terms in the IFF Foundation Ontology, but
they are not common terminology, and, if possible, I would like to
remove them and replace them with something else. The first thought
was to use a special notation such as type construction in programming
languages. However, what I came up with looked a lot like definite
descriptions. In hindsight this is not surprising, since definite
descriptions implicitly define a function of the free variables involved, and in
the IFF Foundation Ontology I am usually defining parametric functions, as the
example below illustrates. Unfortunately, when I tried to use definite
descriptions in an optimal fashion, I still needed to give them a name, which
essentially was the helper term. The positive result is that
it optimized the logical code. My question to you is whether the
resulting code is accurate.
As a
concrete example, here are the original definitions of the helper term
'multiplication-opspan' and the core term 'multiplication' in the
large graph namespace in the IFF Foundation Ontology. The 'CNG$function'
term has already been axiomatized to return a unique value for any input. The
term 'graph' represents a large directed graph consisting of a class of objects
(nodes), a class of morphisms (edges), and source and target functions
mapping morphisms to objects. The term 'opspan' represents the appropriate
diagram for a pullback; namely, two functions 'opfirst' and 'opsecond' with a
common target class 'opvertex'. The "multiplication-opspan" function maps a pair
of graphs with common object (node) class to the opspan consisting of the target
function of the first graph and the source function of the second graph. The
"multiplication" function maps a pair of graphs with common object (node) class
to their horizontal composition -- a third graph whose morphisms are
"composable" pairs of morphisms from the input pair of graphs.
Axiom (1) declares the helper term 'multiplication-opspan' to be a
function. Axiom (2) gives its signature. Axiom (3.a) defines its domain of
definition. And axiom (3.b) gives its definition, since opspans are uniquely
determined by their triple (opvertex, opfirst, opsecond). The same comments hold
for the axioms that represent the core term
'multiplication'.
(1) (CNG$function multiplication-opspan) (2) (CNG$signature multiplication-opspan graph graph SET.LIM.PBK$opspan) (3.a) (forall (?g0 (graph ?g0) ?g1 (graph ?g1)) (<=> (exists (?s (SET.LIM.PBK$opspan ?s)) (= (multiplication-opspan ?g0 ?g1) ?s)) (= (object ?g0) (object ?g1)))) (3.b) (forall (?g0 (graph ?g0) ?g1 (graph ?g1)) (=> (= (object ?g0) (object ?g1)) (and (= (SET.LIM.PBK$opvertex (multiplication-opspan ?g0 ?g1)) (object ?g0)) (= (SET.LIM.PBK$opfirst (multiplication-opspan ?g0 ?g1)) (target ?g0)) (= (SET.LIM.PBK$opsecond (multiplication-opspan ?g0 ?g1)) (source ?g1))))) (4) (CNG$function multiplication) (5) (CNG$signature multiplication graph graph graph) (6.a) (forall (?g0 (graph ?g0) ?g1 (graph ?g1)) (<=> (exists (?g (graph ?g))
(= (multiplication ?g0 ?g1)
?g))
(= (object ?g0) (object ?g1)))) (6.b) (forall (?g0 (graph ?g0) ?g1 (graph ?g1)) (=> (= (object ?g0) (object ?g1)) (and (= (object (multiplication ?g0 ?g1)) (object ?g0)) (= (morphism (multiplication ?g0 ?g1)) (SET.LIM.PBK$pullback (multiplication-opspan ?g0 ?g1))) (= (source (multiplication ?g0 ?g1)) (SET$composition (SET.LIM.PBK$projection1 (multiplication-opspan ?g0 ?g1)) (source ?g0))) (= (target (multiplication ?g0 ?g1)) (SET$composition (SET.LIM.PBK$projection2 (multiplication-opspan ?g0 ?g1)) (target ?g1)))))) And here are the new definitions of the helper term
'multiplication-opspan' and the core term 'multiplication' that use definite
descriptions. As you can see, I have not gotten rid of the helper term
'multiplication-opspan', but I have optimized the code somewhat. In both term
definitions (axiomatizations), the domain of definition axiom has moved to
become the antecedent of the definite description.
(1) (CNG$function
multiplication-opspan)
(2) (CNG$signature multiplication-opspan graph graph SET.LIM.PBK$opspan) (3') (forall (?g0 (graph ?g0) ?g1 (graph ?g1)) (= (multiplication-opspan ?g0 ?g1) (the (?s (SET.LIM.PBK$opspan ?s)) (=> (= (object ?g0) (object ?g1)) (and (= (SET.LIM.PBK$opvertex ?s) (object ?g0)) (= (SET.LIM.PBK$opfirst ?s) (target ?g0)) (= (SET.LIM.PBK$opsecond ?s) (source ?g1))))))) (4) (CNG$function
multiplication)
(5) (CNG$signature multiplication graph graph graph) (6') (forall (?g0 (graph ?g0) ?g1 (graph ?g1)) (= (multiplication ?g0 ?g1) (the (?g (graph ?g)) (=> (= (object ?g0) (object ?g1)) (and (= (object ?g) (object ?g0)) (= (morphism ?g) (SET.LIM.PBK$pullback (multiplication-opspan ?g0 ?g1))) (= (source ?g) (SET$composition (SET.LIM.PBK$projection1 (multiplication-opspan ?g0 ?g1)) (source ?g0))) (= (target ?g) (SET$composition (SET.LIM.PBK$projection2 (multiplication-opspan ?g0 ?g1)) (target ?g1)))))))) Is this a correct use of the definite description notation, and is the new code is equivalent to the original code? In particular, what happens off the domain of definition? And also, can you see any optimal way of removing the helper term 'multiplication-opspan' -- optimal in the sense of getting equivalent, but more streamlined, code? Robert E. Kent rekent@ontologos.org |