SKIF is a necessary subset of KIF to support Horn clause based logical inference. An informal specification is given below: Some notations ============== [] denotes zero or one * denotes zero or more + denotes one or more I. Forms /* The top-level entities */
::= II. Sentences /* Similar to FOPL sentences. */ ::= | | ::= true | false ::= ( *) /* similar to FOPL predicates */ ::= (not ) | (and +) | (or +) | (=> + ) | (<= +) | (<=> ) III. Terms ::= | | | | | ::= ( *, []) IV. Lexemes /* Basic lexical elements */ ::= | | \ /* any non-nomralcharacter can be included in a word if it is preceded by the "escape" character '\' */ ::= ? /* regular vairables */ ::= @ /* sequence variables for functions and relations of varying length argument lists */ ::= "" ::= | | \ ::= every character except " and \ /* quotable is a string of strchars. Every character, except " and \, is a strchar. Use \" and \\ to include " and \ in quotaion marks. */ ::= any member of except variables(starting with ? or @) and those reserved. ::= [+|-]+ :: = [+|-]*.+ | [+|-]+.* ::= [(E|e)] | (E|e) /* reserved words: */ listof, quote, if, cond, not, and, or, forall, exists, defobject, deffunction, defrelation, deflogical There are four categories of constants. KIF does not provide syntactic specifications to differentiate them. Instead, users must make the choices and use these constant consistently throughout. The four categories are: ::= /* for object names */ ::= /* for function names */ ::= | /* for relation or predicate names */ ::= = | \= | < | > | =< | >= ::= /* unclear */ V. Alphabet /* ASCII codes */ ::= | | | ::= A | B | C | ... | Z | a | b | c | ... | z | 0 | 1 | 2 ... | 9 ::= < | > | = | + | - | * | / | & | ^ | ~ | _ | @ | $ | & | : | . | ! | ? ::= white space /* used to separate lexemes, otherwise ignored */ ::= any ASCII code other than normal, special and white. ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9