ImplicationScopeLink

From OpenCog
Jump to: navigation, search

An ImplicationScopeLink is used by OpenCog to express if...then... relations. The structure of an ImplicationScopeLink is a set of predicates to be anded together (disjunct normal form), followed by one or more implicands. ImplicationScopeLinks may contain variables that are bound for the scope of the implication. They may be thought of as expressions in first-order logic; i.e. VariableNodes may only be grounded by nodes, not links; grounding by links is discussed below.

ImplicationLinks encode basic logical implication P->Q, i.e. if P then Q as:

Definition

ImplicationScopeLink
   <variables>
   <implicant-predicate-body>
   <implicand-predicate-body>

which is equivalent to

ImplicationLink
   LambdaLink
      <variables>
      <implicant-predicate-body>
   LambdaLink
      <variables>
      <implicand-predicate-body>

Where the LambdaLinks are used as predicate constructors.

Example

Consider the English language sentence "Fido is a dog". A dependency parse of this sentence would result in the dependency graph "_subj(be,Fido) _obj(be,dog)". Suppose that, given this dependency parse, we want to conclude that "isa(dog,Fido)". In FrameNet notion, this would be:

# IF _subj(be,$var0) ^ _obj(be,$var1) THEN isa($var1, $var0)

When written out in OpenCog format, this becomes an ImplicationScopeLink

ImplicationScopeLink
   VariableList
      TypedVariableLink
         VariableNode "$var0"
         TypeNode "ConceptNode"
      TypedVariableLink
         VariableNode "$var1"
         TypeNode "ConceptNode"
   AndLink
      EvaluationLink
         PredicateNode "_subj"
         ListLink
            ConceptNode "be"
            VariableNode  "$var0"
      EvaluationLink
         PredicateNode "_obj"
         ListLink
            ConceptNode "be"
            VariableNode "$var1"
   EvaluationLink
      PredicateNode "isa"
      ListLink
         VariableNode "$var1"
         VariableNode "$var0"

Note that each triple was expressed in terms of EvaluationLinks. A perl script that will convert the first, short form, into the second, can be found in the source tree, at opencog/nlp/chatbot-old/triples/rules-to-implications.pl. Additional documentation can be found in opencog/nlp/chatbot-old/triples/README.

PLN Semantics

As stated above

ImplicationScopeLink
   <variables>
   <implicant-predicate-body>
   <implicand-predicate-body>

is equivalent to

ImplicationLink
   LambdaLink
      <variables>
      <implicant-predicate-body>
   LambdaLink
      <variables>
      <implicand-predicate-body>

By virtue of the ImplicationLink being an extension/intensional mixed implication, it is also equivalent to

OrLink
   ExtensionalImplicationScopeLink
      <variables>
      <implicant-predicate-body>
      <implicand-predicate-body>
   IntensionalImplicationScopeLink
      <variables>
      <implicant-predicate-body>
      <implicand-predicate-body>

Universal Conditioned Instantiation

One can directly use an ImplicationScopeLink a universal quantifier with a precondition (the implicant). The implicant indicates the domain of the quantifier, and the TV on the ImplicationLink indicates the degree of its universality within that domain.

Implication instantiation rules can be used to generate implicand instances so that the implicant instances are true (at least to some extend). The TV of the implicand is by default obtained via the PLN implication instantiation rule (TODO: create a wikipage for that rule).

See also