Skolem functions are CycL functions which are used in the implementation of formulas that use existential quantification. They are instances of #$ReifiableFunction
, and are automatically generated. Whenever someone asserts to the Knowledge Base a sentence that contains #$thereExists
(in an arg0 position), Cyc automatically creates a new instance of #$SkolemFunction
and rewrites the assertion using that Skolem function.
For example, suppose we want Cyc to know that every animal has a birth date. So we assert the following sentence:
(implies (isa ?X Animal) (thereExists ?Y (birthDate ?X ?Y)))
In response, Cyc automatically reifies a new unary instance of #$SkolemFunction
(call it “BirthDateFn”) that takes any given animal to its date of birth, and then rewrites our rule using “BirthDateFn” instead of #$thereExists
, as
(implies (and (isa ?X Animal) (termOfUnit ?Y (BirthDateFn ?X))) (birthDate ?X ?Y))
Note that actual Cyc-generated Skolem function names consist of the prefix “SKF-” follow by a numeral.