# Part IV: Logic

## Introduction

In this part, we say a little about conceptual graphs as a kind of logic. We will take three basic concepts from logic and apply them to syllogisms.

## Overview

Conceptual graphs are actually a kind of logic. Every conceptual graph can be translated into a formula in the predicate calculus.

In this chapter, we talk about three aspects of the logical nature of conceptual graphs.

1. The first is negation; Every context can be negated by placing a small symbol, "" in front of the context.

2. The second is the logical connective "and". Juxtaposed (but unconnected) conceptual graphs are connected by "and".

3. The third aspect is how to say "or", given that the default interpretation of juxtaposed conceptual graphs is "and".

Finally, we apply some of these concepts to syllogisms.

# Negation

## Everyday negation

In everyday language, we operate with negation all the time; for example, we often say things like "I don't feel like coming", "I can't do that", "He isn't my enemy", "She isn't stupid". In all of these sentences, negation plays a part.

## Negation in logic

In logic, there is also a symbol for negation. The convention is to use this symbol: "" and place it in front of whatever is negated.

```   (
<!--
var agt=navigator.userAgent.toLowerCase();
var is_win = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
var is_gecko = (agt.indexOf('gecko') != -1);
if (is_win && !is_gecko) {
document.write("<FONT FACE=\"Symbol\">\$</FONT>");
} else {
document.write("&exist;");
}
-->
!!x:Sun)(
<!--
var agt=navigator.userAgent.toLowerCase();
var is_win = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
var is_gecko = (agt.indexOf('gecko') != -1);
if (is_win && !is_gecko) {
document.write("<FONT FACE=\"Symbol\">&#216;</FONT>");
} else {
document.write("&not;");
}
-->
Shining(x))
"The sun is not shining."
```

## Negation in conceptual graphs

In conceptual graphs, the convetion is to place the symbol "" in front of a context. If you want to negate a conceptual graph, place a context around it (with a type such as "Situation" or "Proposition"), and place the "" symbol to the right of the context.

## Examples

For example:

```
<!--
var agt=navigator.userAgent.toLowerCase();
var is_win = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
var is_gecko = (agt.indexOf('gecko') != -1);
if (is_win && !is_gecko) {
document.write("<FONT FACE=\"Symbol\">&#216;</FONT>");
} else {
document.write("&not;");
}
-->
[Situation: [Sun: #]<-(Agnt)<-[Shine] ]
"The sun is not shining."
```

Another example:

```
<!--
var agt=navigator.userAgent.toLowerCase();
var is_win = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
var is_gecko = (agt.indexOf('gecko') != -1);
if (is_win && !is_gecko) {
document.write("<FONT FACE=\"Symbol\">&#216;</FONT>");
} else {
document.write("&not;");
}
-->
[Proposition: [Man]<-(Expr)<-[Understand]-
->(Thme)->[Woman: {*}] ]
"It is not the case that there exists
a man who understands women"
"All men do not understand any women"
"No man understands women"
```

## Conclusion

We see, then, that in order to negate a conceptual graph, the method is to place a context around it (with the type "Situation" or "Proposition" or the like), and then to place the symbol "" in front of the context.

# Conjunction (and)

## Everyday usage of "and"

In everyday language, we use "and" all the time. For example, "I am both happy and satisfied", "She is both beautiful and wise", "He is both competent and a nice guy."

The usage of "and" in these examples closely mirrors the usage of "and" in logic. For "and" to be true in logic, both of the predicates connected by "and" have to be true. In the above examples, both of the predicates in each example are true simultaneously.

In everyday language, "and" also has other meanings. One of them is to indicate temporal succession. For example, "He was sick and died". In this example, "and" indicates that first, he was sick and then he died.

## Usage of "and" in logic

This usage is not the one we use in logic. In logic, only the usage where both predicates are true simultaneously is used.

In logic, the convention is to place the symbol "" between the two predicates which must be connected. For example:

```   (
<!--
var agt=navigator.userAgent.toLowerCase();
var is_win = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
var is_gecko = (agt.indexOf('gecko') != -1);
if (is_win && !is_gecko) {
document.write("<FONT FACE=\"Symbol\">\$</FONT>");
} else {
document.write("&exist;");
}
-->
x:Woman)(beautiful(x)
<!--
var agt=navigator.userAgent.toLowerCase();
var is_win = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
var is_gecko = (agt.indexOf('gecko') != -1);
if (is_win && !is_gecko) {
document.write("<FONT FACE=\"Symbol\">&#217;</FONT>");
} else {
document.write("&and;");
}
-->
dangerous(x))
There exists a woman who is both beautiful and dangerous"
```

## "And" in conceptual graphs

As already noted, when conceptual graphs stand beside each other (or underneath each other) in the same context, without any connecting arcs, the interpretation is that both are true at the same time. For example:

```  [Proposition:
[Woman: *x]->(Attr)->[Beautiful]

[Woman: ?x]->(Attr)->[Dangerous]
]
"There exists a woman x who is beautiful.
And this woman x is also dangerous."
"There exists a woman who is both beautiful and dangerous"
```

In this example, the two subgraphs are juxtaposed in the same context, but without any connecting relation and arcs between them. Therefore, the interpretation is that both are true at the same time.

## Conclusion

Thus we see that in order to say that two conceptual graphs are both true, we just need to place them together in the same context without any connecting relation and arcs between them.

# Disjunction (or)

## How do we say "or"?

Given that "and" is the interpretation we give to graphs that are juxtaposed, the question arises, how do we say "or"?

## The logical solution

The answer comes from logic. In logic, only one of the two connectives "and" and "or" is necessary to have, if only we have negation as another primitive. This stems from the fact that we can express "or" in terms of "and" plus negation, and vice versa.

The formula is:

```   p
<!--
var agt=navigator.userAgent.toLowerCase();
var is_win = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
var is_gecko = (agt.indexOf('gecko') != -1);
if (is_win && !is_gecko) {
document.write("<FONT FACE=\"Symbol\">&#218;</FONT>");
} else {
document.write("&or;");
}
-->
q   is equivalent to
<!--
var agt=navigator.userAgent.toLowerCase();
var is_win = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
var is_gecko = (agt.indexOf('gecko') != -1);
if (is_win && !is_gecko) {
document.write("<FONT FACE=\"Symbol\">&#216;</FONT>");
} else {
document.write("&not;");
}
-->
(
<!--
var agt=navigator.userAgent.toLowerCase();
var is_win = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
var is_gecko = (agt.indexOf('gecko') != -1);
if (is_win && !is_gecko) {
document.write("<FONT FACE=\"Symbol\">&#216;</FONT>");
} else {
document.write("&not;");
}
-->
p
<!--
var agt=navigator.userAgent.toLowerCase();
var is_win = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
var is_gecko = (agt.indexOf('gecko') != -1);
if (is_win && !is_gecko) {
document.write("<FONT FACE=\"Symbol\">&#217;</FONT>");
} else {
document.write("&and;");
}
-->

<!--
var agt=navigator.userAgent.toLowerCase();
var is_win = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
var is_gecko = (agt.indexOf('gecko') != -1);
if (is_win && !is_gecko) {
document.write("<FONT FACE=\"Symbol\">&#216;</FONT>");
} else {
document.write("&not;");
}
-->
q)
```

## Application to conceptual graphs

In order to do this with conceptual graphs, we just need to apply the two rules we have learned for how to express negation and conjunction ("and"). That is, in order to express disjunction ("or") between two conceptual graphs G1 and G2:

1. Place a context around G1 and negate the context,
2. Place a context around G2 and negate the context,
3. Place these two contexts inside a third, larger context,
4. Negate the larger context.

## Example

For example, in order to say

```   John is either a fool or very clever.
```

we can draw these conceptual graphs:

```
<!--
var agt=navigator.userAgent.toLowerCase();
var is_win = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
var is_gecko = (agt.indexOf('gecko') != -1);
if (is_win && !is_gecko) {
document.write("<FONT FACE=\"Symbol\">&#216;</FONT>");
} else {
document.write("&not;");
}
-->
[Situation:

<!--
var agt=navigator.userAgent.toLowerCase();
var is_win = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
var is_gecko = (agt.indexOf('gecko') != -1);
if (is_win && !is_gecko) {
document.write("<FONT FACE=\"Symbol\">&#216;</FONT>");
} else {
document.write("&not;");
}
-->
[Situation:
[Person: John]- - -[Fool]
]

<!--
var agt=navigator.userAgent.toLowerCase();
var is_win = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
var is_gecko = (agt.indexOf('gecko') != -1);
if (is_win && !is_gecko) {
document.write("<FONT FACE=\"Symbol\">&#216;</FONT>");
} else {
document.write("&not;");
}
-->
[Situation:
[Person: John]->(Attr)->[Clever]-
->(Meas)->[Degree: #very]
]
]
```

## Extending the notation beyond two graphs

In logic, this method can be extended beyond two predicates to any number of predicates. The formula is:

```   p1
<!--
var agt=navigator.userAgent.toLowerCase();
var is_win = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
var is_gecko = (agt.indexOf('gecko') != -1);
if (is_win && !is_gecko) {
document.write("<FONT FACE=\"Symbol\">&#218;</FONT>");
} else {
document.write("&or;");
}
-->
p2
<!--
var agt=navigator.userAgent.toLowerCase();
var is_win = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
var is_gecko = (agt.indexOf('gecko') != -1);
if (is_win && !is_gecko) {
document.write("<FONT FACE=\"Symbol\">&#218;</FONT>");
} else {
document.write("&or;");
}
-->
...
<!--
var agt=navigator.userAgent.toLowerCase();
var is_win = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
var is_gecko = (agt.indexOf('gecko') != -1);
if (is_win && !is_gecko) {
document.write("<FONT FACE=\"Symbol\">&#218;</FONT>");
} else {
document.write("&or;");
}
-->
pn
is equivalent to

<!--
var agt=navigator.userAgent.toLowerCase();
var is_win = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
var is_gecko = (agt.indexOf('gecko') != -1);
if (is_win && !is_gecko) {
document.write("<FONT FACE=\"Symbol\">&#216;</FONT>");
} else {
document.write("&not;");
}
-->
(
<!--
var agt=navigator.userAgent.toLowerCase();
var is_win = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
var is_gecko = (agt.indexOf('gecko') != -1);
if (is_win && !is_gecko) {
document.write("<FONT FACE=\"Symbol\">&#216;</FONT>");
} else {
document.write("&not;");
}
-->
p1
<!--
var agt=navigator.userAgent.toLowerCase();
var is_win = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
var is_gecko = (agt.indexOf('gecko') != -1);
if (is_win && !is_gecko) {
document.write("<FONT FACE=\"Symbol\">&#217;</FONT>");
} else {
document.write("&and;");
}
-->

<!--
var agt=navigator.userAgent.toLowerCase();
var is_win = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
var is_gecko = (agt.indexOf('gecko') != -1);
if (is_win && !is_gecko) {
document.write("<FONT FACE=\"Symbol\">&#216;</FONT>");
} else {
document.write("&not;");
}
-->
p2
<!--
var agt=navigator.userAgent.toLowerCase();
var is_win = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
var is_gecko = (agt.indexOf('gecko') != -1);
if (is_win && !is_gecko) {
document.write("<FONT FACE=\"Symbol\">&#217;</FONT>");
} else {
document.write("&and;");
}
-->
...
<!--
var agt=navigator.userAgent.toLowerCase();
var is_win = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
var is_gecko = (agt.indexOf('gecko') != -1);
if (is_win && !is_gecko) {
document.write("<FONT FACE=\"Symbol\">&#217;</FONT>");
} else {
document.write("&and;");
}
-->

<!--
var agt=navigator.userAgent.toLowerCase();
var is_win = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
var is_gecko = (agt.indexOf('gecko') != -1);
if (is_win && !is_gecko) {
document.write("<FONT FACE=\"Symbol\">&#216;</FONT>");
} else {
document.write("&not;");
}
-->
pn)
```

We see that the pattern is just to negate every predicate and then place them all in the same context, which we then negate.

This can be applied to conceptual graphs as well. The method is to place contexts around each of the graphs, negate every context, place all of these negated contexts in the same, large context, and finally negate the large context.

## Conclusion

"Or" is not a primitive in conceptual graphs. The reason is that "and" is a more useful primitive, and "or" can be produced by means of "not" and "and".

In order to say "or" in conceptual graphs, we follow the procedure outlined above, applying the rules for "and" and "not" a number of times until the desired outcome has been reached.

# Syllogisms

## Introduction

Syllogisms will be used in the exercises, so just to recapitulate, we here give examples of the four most common syllogism-patterns.

## The four kinds of statements

In syllogisms, there are four kinds of statements:

• A: Universal affirmative. All A are B
• I: Particular affirmative. Some A are B
• E: Universal negative. No A is B
• O: Particular negative. Some A are not B
These are rememberered by the letters A, I, E, and O:
• "A" and "I" are from the Latin "affirmo", "I affirm", while
• "E" and "O" are from the Latin "Nego", "I deny".

## Syllogism patterns

There are 256 possible syllogisms, but only about 15 of them are valid. In the middle ages, the valid syllogisms were remembered by names that contained three of the letters above, for example ferio.

There are four figures, or basic patterns. The figure we will be using is the following (called figure 1):

• y(M,P)
• x(S,M)
• Therefore: z(S,P)

Where x, y, and z are As, Is, Es, or Os. S, M, and P are classes of objects, for example "Mammal" (in the case of A and E) or individuals (in the case of I and O).

The four syllogism patterns which we will make use of in the exercises are:

• Barbara
• Celarent
• Darii
• Ferio

They all conform to figure 1 (above). These are exemplified below.

### Barbara

• A:  All birds are egg-layers.
• A:  All sea-gulls are birds.
• A:  Therefore, all sea-gulls are egg-layers.

### Celarent

• E:  No mammals are birds.
• A:  All whales are mammals.
• E:  Therefore, no whales are birds.

### Darii

• A:  All swans are white.
• I:  Some birds are swans.
• I:  Therefore, some birds are white.

### Ferio

• E:  No university student is a toddler.
• I:  Some skaters are university students.
• O:  Therefore, some skaters are not toddlers.

## Encoding syllogisms in CGs

You can encode syllogisms in CGs in a number of ways. Here, we present one of the ways.

### Pattern - the overall structure

In order to be able to write syllogisms in a uniform manner, one needs a pattern to follow. The following could be such a pattern:

```   [If:
[ ... Premise 1 ... (a CG) ]
[ ... Premise 2 ... (a CG) ]
[Then:
[ ... Conclusion ... (a CG) ]
]
]
```

### Pattern - Premises and conclusions

While the overall pattern is an IF-THEN construction with two premises and a conclusion, each premise and conclusion is either an IF-THEN construction or a conjunction of two graphs.

The patterns to follow for the four types of statement are:

 A: Universal affirmative. All A are B ``` [If: [A: *x] [Then: [B: ?x] ] ] ``` I: Particular affirmative. Some A are B ``` [Proposition: [A: *x] [B: ?x] ] ``` E: Universal negative. No A is B ``` [If: [A: *x] [Then: [B: ?x] ] ] ``` O: Particular negative. Some A are not B ``` [Proposition: [A: *x] [B: ?x] ] ```

### Difference between Universal and Particular

The difference between a Universal and a Particular is that a Universal is an IF-THEN construction, whereas a Particular is a conjunction of two concepts.

### Difference between Affirmative and Negative

The difference between an Affirmative and a Negative is the presence of a ("not") sign in front of the "B"-concept in the Negative.

### Constructing a syllogism

Thus, in order to construct a syllogism, we will have an outer IF-THEN, inside which we find three graphs.

Each subgraph should use a different coreference link (e.g., *x, *y, *z) for clarity, although because of the scope rules, they need not be different.

### Example: Barbara

For example, below is an encoding of the following Barbara syllogism:

• A:   All rhinos are mammals.
• A:   All mammals are animals.
• A:   Therefore, all rhinos are animals.

And one encoding could look like this:

```   [If:
[If:
[Rhino:
<!--
var agt=navigator.userAgent.toLowerCase();
var is_win = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
var is_gecko = (agt.indexOf('gecko') != -1);
if (is_win && !is_gecko) {
document.write("<FONT FACE=\"Symbol\">\"</FONT>");
} else {
document.write("&forall;");
}
-->
*x]
[Then:
[Mammal: ?x]
]
]
[If:
[Mammal:
<!--
var agt=navigator.userAgent.toLowerCase();
var is_win = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
var is_gecko = (agt.indexOf('gecko') != -1);
if (is_win && !is_gecko) {
document.write("<FONT FACE=\"Symbol\">\"</FONT>");
} else {
document.write("&forall;");
}
-->
*y]
[Then:
[Animal: ?y]
]
]
[Then:
[If:
[Rhino:
<!--
var agt=navigator.userAgent.toLowerCase();
var is_win = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
var is_gecko = (agt.indexOf('gecko') != -1);
if (is_win && !is_gecko) {
document.write("<FONT FACE=\"Symbol\">\"</FONT>");
} else {
document.write("&forall;");
}
-->
*z]
[Then:
[Animal: ?z]
]
]
]
]
```