;;; -*- Mode:Lisp; Syntax:Common-Lisp; Package:ONTOLINGUA-USER; Base:10 -*-
;;; If you load this file (with translation into the "KIF" implementation
;;; -- the default ), then the definitions are saved on property lists
;;; and can be used for online documentation and in cross-reference reports.
(in-package "ONTOLINGUA-USER") ;inherits from the KIF package
;all constants defined here are exported
;from the KIF package.
(define-theory KIF-META (kif-sets kif-lists)
"The KIF vocabulary for representing metalinguistic knowledge.")
(in-theory 'kif-meta)
(define-class EXPRESSION (?expr)
"KIF expression is either a word or a list of expressions."
:iff-def (or (word ?expr)
(and (list ?expr)
(forall ?subexpr
(=> (item ?subexpr ?expr)
(expression ?subexpr))))))
(define-class WORD (?expr)
"An atom in a KIF expression."
:def (and (expression ?expr)
(not (list ?expr)))
:axiom-def (exhaustive-subclass-partition
WORD (setof variable operator constant)))
(define-class VARIABLE (?expr)
"KIF variable"
:def (and (word ?expr)
(term ?expr))
:axiom-def (exhaustive-subclass-partition
VARIABLE (setof indvar seqvar)))
(define-class OPERATOR (?expr)
"KIF operator"
:def (and (word ?expr)
(term ?expr))
:axiom-def (exhaustive-subclass-partition OPERATOR
(setof termop sentop ruleop defop)))
(define-class CONSTANT (?expr)
"A constant used in a KIF expression."
:def (and (word ?expr)
(term ?expr))
:axiom-def (exhaustive-subclass-partition CONSTANT
(setof funconst relconst objconst)))
(define-class FUNCONST (?symbol)
"A symbol that denotes a function. Used as the functor of a
term expression."
:def (constant ?symbol))
(define-class RELCONST (?symbol)
"A symbol that denotes a relation (may also be a function).
Cannot be used as a functor of a term expression, even if it denotes
a function."
:def (constant ?symbol))
(define-class OBJCONST (?symbol)
"A symbol that denotes a KIF object other than a relation."
:def (constant ?symbol))
(define-class INDVAR (?expression)
"An individual variable in a KIF expression.
For every individual variable $\nu$, there is an axiom asserting that it is
indeed an individual variable. Each such axiom is a defining axiom for the
{\tt indvar} relation."
:def (variable ?expression))
(define-class SEQVAR (?expression)
"A sequence variable in a KIF expression.
For every sequence variable $\omega$, there is an axiom asserting that it is a
sequence variable. Each such axiom is a defining axiom for the {\tt seqvar}
relation."
:def (variable ?expression))
(define-class TERMOP (?expr)
"KIF term operator"
:iff-def (member ?expr
(setof 'quote 'listof 'cond 'the 'setof
'setofall 'kappa 'lambda))
:constraints (operator ?expr))
(define-class SENTOP (?expr)
"KIF sentence operator"
:iff-def (member ?expr
(setof 'not 'and 'or
'=> '<= '<=>
'forall 'exists))
:constraints (operator ?expr))
(define-class RULEOP (?expr)
"KIF rule operator"
:iff-def (member ?expr
(setof '=>> '<<=))
:constraints (operator ?expr))
(define-class DEFOP (?expr)
"KIF definitional operator"
:iff-def (member ?expr
(setof 'defobject 'define-function 'defrelation
':= ':=> ':axiom
':conservative-axiom))
:constraints (operator ?expr))
(define-class TERM (?expr)
"KIF term expression"
:iff-def (expression ?expr)
:axiom-def (exhaustive-subclass-partition TERM
(setof variable constant listterm setterm
quoterm logterm quanterm)))
(define-class FUNTERM (?expr)
"KIF function term expression."
:iff-def (and (term ?expr)
(list ?expr)
(funconst (first ?expr))))
(define-class LISTTERM (?expr)
"KIF list term expression"
:iff-def (and (term ?expr)
(list ?expr)
(= (first ?expr) 'listof)))
(define-class SETTERM (?expr)
"KIF set term expression"
:iff-def (and (term ?expr)
(list ?expr)
(= (first ?expr) 'setof)))
(define-class QUOTERM (?expr)
"KIF quoted term expression."
:iff-def (and (term ?expr)
(list ?expr)
(= (first ?expr) 'quote)
(expression (first (first ?expr)))))
(define-class LOGTERM (?x)
:iff-def (or (exists (?p1 ?t1)
(and (sentence ?p1) (term ?t1)
(= ?x (listof 'IF ?p1 ?t1))))
(exists (?p1 ?t1 ?t2)
(and (sentence ?p1)
(term ?t1)
(term ?t2)
(= ?x (listof 'IF ?p1 ?t1 ?t2))))
(exists ?clist
(and (list ?clist)
(=> (item ?c ?clist)
(exists (?p ?t)
(and (sentence ?p) (term ?t)
(= ?c (listof ?p ?t)))))
(= ?x (cons 'COND ?clist)))))
:constraints (term ?x))
(define-class QUANTERM (?x)
:iff-def (or (exists (?t ?p)
(and (term ?t) (sentence ?p)
(= ?x (listof 'THE ?t ?p))))
(exists (?t ?p)
(and (term ?t) (sentence ?p)
(= ?x (listof 'SETOFALL ?t ?p))))
(exists (?vlist ?p)
(and (list ?vlist) (sentence ?p)
(>= (length ?vlist) 1)
(=> (item ?v ?vlistp) (indvar ?v))
(= ?x (listof 'KAPPA ?vlistp ?p))))
(exists (?vlist ?sv ?p)
(and (list ?vlist) (seqvar ?sv) (sentence ?p)
(=> (item ?v ?vlist) (indvar ?v))
(= ?x (listof 'KAPPA (append ?vlist (listof ?sv)) ?p))))
(exists (?vlist ?t)
(and (list ?vlist) (term ?t)
(>= (length ?vlist) 1)
(=> (item ?v ?vlistp) (indvar ?v))
(= ?x (listof 'LAMBDA ?vlistp ?t))))
(exists (?vlist ?sv ?t)
(and (list ?vlist) (seqvar ?sv) (sentence ?t)
(=> (item ?v ?vlist) (indvar ?v))
(= ?x (listof 'LAMBDA
(append ?vlist (listof ?sv))
?t)))))
:constraints (term ?x))
(define-class SENTENCE (?expr)
"KIF sentence expression. Has a truth value."
:def (expression ?expr)
:axiom-def (exhaustive-subclass-partition SENTENCE
(setof logconst relsent logsent quantsent)))
(define-class LOGCONST (?x)
"A KIF logical constant."
:def (sentence ?x))
(define-class RELSENT (?x)
:iff-def (exists (?r ?tlist)
(and (or (relconst ?r) (funconst ?r)) (list ?tlist)
(>= (length ?tlist) 1)
(=> (item ?t ?tlist) (term ?t))
(= ?x (cons ?r ?tlist))))
:constraints (sentence ?x))
(define-class EQUATION (?x)
:iff-def (and (relsent ?x)
(exists (?t1 ?t2)
(and (term ?t1) (term ?t2)
(= ?x (listof '= ?t1 ?t2))))))
(define-class INEQUALITY (?x)
:iff-def (and (relsent ?x)
(exists (?t1 ?t2)
(and (term ?t1) (term ?t2)
(= ?x (listof '/= ?t1 ?t2))))))
(define-class LOGSENT (?expr)
"KIF logical sentence."
:def (sentence ?expr)
:axiom-def (exhaustive-subclass-partition LOGSENT
(setof negation conjunction disjunction
implication reverse-implication equivalence)))
(define-class NEGATION (?x)
:iff-def (exists (?p)
(and (sentence ?p)
(= ?x (listof 'NOT ?p))))
:constraints (logsent ?x))
(define-class CONJUNCTION (?x)
:iff-def (exists ?plist
(and (list ?plist)
(>= (length ?plist) 1)
(=> (item ?p ?plist) (sentence ?p))
(= ?x (cons 'AND ?plist))))
:constraints (logsent ?x))
(define-class DISJUNCTION (?x)
:iff-def (exists ?plist
(and (list ?plist)
(>= (length ?plist) 1)
(=> (item ?p ?plist) (sentence ?p))
(= ?x (cons 'or ?plist))))
:constraints (logsent ?x))
(define-class IMPLICATION (?x)
:iff-def (exists (?plist)
(and (list ?plist)
(>= (length ?plist) 2)
(=> (item ?p ?plist) (sentence ?p))
(= ?x (cons '=> ?plist))))
:constraints (logsent ?x))
(define-class REVERSE-IMPLICATION (?x)
:iff-def (exists (?plist)
(and (list ?plist)
(>= (length ?plist) 2)
(=> (item ?p ?plist) (sentence ?p))
(= ?x (cons '<= ?plist))))
:constraints (logsent ?x))
(define-class EQUIVALENCE (?x)
:iff-def (exists (?p1 ?p2)
(and (sentence ?p1)
(sentence ?p2)
(= ?x (listof '<=> ?p1 ?p2))))
:constraints (logsent ?x))
(define-class QUANTSENT (?x)
:iff-def (or (exists (?v ?p)
(and (indvar ?v) (sentence ?p)
(or (= ?x (listof 'forall ?v ?p))
(= ?x (listof 'exists ?v ?p)))))
(exists (?vlist ?p)
(and (list ?vlist) (sentence ?p)
(>= (length ?vlist) 1)
(=> (item ?v ?vlist) (indvar ?v))
(or (= ?x (listof 'forall ?vlist ?p))
(= ?x (listof 'exists ?vlist ?p))))))
:constraints (sentence ?x))
(define-function DENOTATION (?x)
"The term {\tt (denotation $\tau$)} denotes the object denoted by the object
denoted by $\tau$. A quotation denotes the quoted expression; the denotation
of any other object is $\bot$."
)
(define-function NAME (?x)
"The term {\tt (name $\tau$)} denotes the standard name for the object denoted
by the term $\tau$. The standard name for an expression $\tau$ is
{\tt (quote $\tau$)}; the standard name for a non-expression is at the
discretion of the user. (Note that there are only a countable number of
terms in KIF, but there can be models with uncountable cardinality;
consequently, it is not always possible for every object in the universe of
discourse to have a unique name.)")
(define-relation TRUTH (?sentence)
"A level-crossing relation used to state that a sentence is true."
:def (sentence ?sentence)
:issues ((:example (truth '(=> (sentence ?p) (listof '=> ?p ?p))))))
(define-relation DEFINING-AXIOM (?constant ?sentence)
"a defining axiom for a constant is a sentence that
helps define the constant. See the KIF specification
for details."
:def (and (constant ?constant)
(sentence ?sentence)))
(define-relation ANALYTIC-TRUTH (?sentence)
"Given a knowledge base $\Delta$, the sentence {\tt (analytic-truth '$\phi$)}
means that the sentence $\phi$ is logically entailed by the defining axioms of
the definitions in knowledge base $\Delta$."
:def (sentence ?sentence))