A forward trigger literal (FTL) is a literal that is found in the antecedent of a forward rule and which will cause the rule to fire when an assertion matching it is added to the KB.
Normally, all the literals of a forward rule are FTLs, except literals with predicates that can’t be asserted or stored in the KB, such as #$evaluate
. However, one may use #$pragmaticRequirement
and #$forwardTriggerLiteral
to declare which literals should be used to trigger a rule, and all other literals not so tagged will be treated as forward non-trigger literals.
Declaring FTLs this way can improve forward inference efficiency, because forward rules with FTL declarations won’t be considered at all until a GAF matching the literal becomes true, either by being asserted or by being deduced. However, this can lead to race conditions: if a rule is triggered before all of the other literals of the rule are satisfied, it won’t fire, and if they become true later it also won’t fire. In short, when a FTL pragma is placed on a rule, the assertion times of the literals of the antecedent matter.
For more information on declaring forward trigger literals, see the training module Logical Warrant vs. Pragmas.