(Redirected from Equivalent)

The EquivalenceLink is a type of Link that may be used for defining new predicates.

For instance given an InheritanceLink defining a relation between two concepts, and some existing predicate, the EquivalenceLink may be used to define a new predicate that refines the existing one. In that type of use one can think of EquivalenceLink as being similar to the define directive in scheme (or defun in lisp), in that it allows you to define a complex functional structure and give it a name.

The EquivalenceLink is a declarative version of DefineLink, which is imperative. That is, DefineLink is used by the pattern matcher as a beta redex, at the time that a pattern search is performed. An EquivalenceLink is used by PLN during reasoning. See the link comparison chart for other such correspondences.

The SatisfyingSetLink provides a simpler mechanism for giving a name to all of the atoms satisfying some formula.

The model theoretic understanding of an EquivalenceLink is that it gives a model-theoretic interpretation. That is, it provides a map between terms of one signature to those with another.

### PLN semantics

In PLN an EquivalenceLink between 2 predicates is semantically equivalent to a SimilarityLink over the satifying sets of the predicates. So for instance the following 2 express the same thing

```SimilarityLink <0.6, 0.9>
ConceptNode: tall
```
```EquivalenceLink <0.6, 0.9>
PredicateNode: is_tall
```

## Example

Suppose, for example, one has a relationship "PartOf": for example:

```EvaluationLink
PredicateNode: PartOf
ConceptNode: battery
ConceptNode: car
```

And suppose that one wanted to refine this notion of "PartOf" into "MechanicalPartOf", "ElectricalPartOf", "BodyPartOf". This refinement could be done by stating that

```ImplicationLink
PredicateNode: MechanicalPartOf
PredicateNode: PartOf
```

and likewise for "ElectricalPartOf", "BodyPartOf", etc. But what is the meaning of "ElectricalPartOf"? How can we tell when something is an electrical part, or not? These questions can be answered by observing that we already know something about batteries, namely, we already know that

```InheritanceLink
ConceptNode: battery
ConceptNode: electrical device
```

Thus, the definition of the new predicate "ElectricalPartOf" can be completed by saying "electrical parts are those parts that are electrical", by using the EquivalenceLink:

```EquivalenceLink
```

The above is short-hand for the more verbose:

```EquivalenceLink
PredicateNode: ElectricalPartOf
VariableNode: \$X
VariableNode: \$Y
VariableNode \$X
ConceptNode: "electrical device"
PredicateNode:PartOf
VariableNode \$X
VariableNode \$Y
```

Outside of PLN, but inside the pattern matcher, the DefineLink is used in a fashion similar to the EquivalenceLink. However, there are differences due to the implementation. The DefineLink moves the variable binding to the body of the definition. Thus, the above example would be written as:

```DefineLink
PredicateNode: ElectricalPartOf
VariableList
VariableNode: \$X
VariableNode: \$Y
VariableNode \$X
ConceptNode: "electrical device"
PredicateNode:PartOf
VariableNode \$X
VariableNode \$Y
```

The LambdaLink is used to declare the variables that are to be associated with the predicate. The variable declaration is now a part of the definition of the PredicateNode, as opposed to being used in the EvaluationLink when the EquivalenceLink is used.

There are other differences: the EquivalenceLink can be used multiple times; however, the DefineLink can be used only once, to declare a meaning. Thus, in the above example, there can be only one definition

```DefineLink
PredicateNode: ElectricalPartOf
....
```

and the only way to redefine ElectricalPartOf would be to delete the above DefineLink first, and then create a new one. By contrast, EquivalenceLink can be used to create many, possibly conflicting definitions.