A binding is a temporary or contextual assignment of a value to something that does not have a fixed value, such as a variable or indexical term. When Cyc performs inference, it tries to find combinations of bindings for all the free variables in the query sentence such that the sentence is true with all of those values substituted in for their variables. Each such combination is called a binding set, and each inference answer (typically) has a unique binding set. For example, if one asked the query:
(eatsWillingly JohnDoe ?WHAT)
Cyc would try to find bindings sets mapping the variable ?WHAT
to a value that would make the sentence true, such as #$IceCream
. In SubL, each binding is a pair with the variable as the first element and the value as the second. The binding of ?WHAT
to #$IceCream
would look like (?WHAT . #$IceCream)
, and the singleton binding set for this one answer would have an additional set of parentheses, and look like ((?WHAT . #$IceCream))
. By default, the main SubL function for asking a query, NEW-CYC-QUERY
, returns a list of the binding sets — note the additional set of parens — it found with respect to which the query sentence was proven true, e.g.
(((?WHAT . #$RamenSoup)) ((?WHAT . #$FishChowder)) ((?WHAT . #$HotDogSandwich)) ((?WHAT . #$IceCream)) ((?WHAT . #$SpaghettiMarinara)))
For a query with no free variables, Cyc attempts to prove the query sentence true with respect to the empty binding set, represented in SubL as NIL
. For example:
(eatsWillingly JohnDoe IceCream)
If such a query is proven true, NEW-CYC-QUERY
returns a list containing one binding set (namely the empty set, or NIL
). This looks like so:
(NIL)
If such a query is not proven true, NEW-CYC-QUERY
returns the empty list, i.e.
NIL