Backward inference refers to a mode of inference in which rules do not fire until Cyc is asked a query. If a rule is relevant to the query and transformation is allowed, the rule can be considered and might participate in a proof of the answer. This is in contrast to forward inference, in which a forward rule is triggered when a new assertion is added to Cyc that matches a literal on the rule’s antecedent.
“Backward” is one of the possible values for direction that an assertion may have. If an assertion is :backward, it may participate in backward inference only.
Backward inference example: If the user asks “What things are green?”:
(colorOfObject ?X GreenColor)
the inference engine could choose to use a rule in the KB that says “All leaves are green”:
(implies (isa ?LEAF Leaf) (colorOfObject ?LEAF GreenColor))
If Cyc backchains on this rule, it would transform the problem into:
(isa ?X Leaf)
Then if it can find something that is a leaf (like
(isa Leaf0037 Leaf)
thus satisfying the antecedent of the rule, it uses removal and then bubbles up the binding
#$Leaf0037 for ?X to prove:
(colorOfObject Leaf0037 GreenColor)
In backward inference, Cyc wouldn’t bother finding something to satisfy the antecedent of RULE 1 until it is asked a query that in part matches the consequent of RULE 1.