Skip to main content

Subsection 7.6.6 Explicit Reasoning about Knowledge and Belief

So far, we’ve seen that we can write logical expressions that describe what we believe to be true. We call them our premises. Then we can reason with them and derive additional claims that we will then also believe to be true because we’ve proved them so.

So we’ve been, in some sense, reasoning about belief. Or perhaps you want to make the stronger claim that we’re reasoning about facts that we know to be true.

But what we have not done, nor are we able to do in our framework, is to reason about claims that explicitly mention believing or knowing.

For example, consider:

[1] I know that Kelly is a student.

[2] I believe that Chris will come to the party.

[3] I think that Chris won’t come to the party, so I won’t either.

It’s not that we can’t write such claims at all. We can, in a clunky way:

Give names to the following statements:

K: Kelly is a student.

P: Chris will come to the party.

C: Chris won’t come to the party.

And define:

Know(x, y): True if x knows y.

Believe(x, y): True if x believes y.

Think(x, y): True if x thinks y.

WillAttendParty(x): True if x will attend the party.

Then we can write:

[1] Know(I, K)

[2] Believe(I, P)

[3] Think(I, C)  WillAttendParty(I)

In some sort of way, we’ve encoded the facts of [1] – [3]. The problem is that we haven’t encoded them in a useful way.

Take another look at [3], for example. Notice that the thing that I think (namely that Chris won’t come to the party) is an atomic claim, C. It doesn’t explicitly represent party attendance in any way that would make it straightforward to reason about my party attendance versus Chris’s.

Perhaps you’re wondering why we can’t be clearer.

For example, why can’t we define:

Student(x): True if x is a student.

WillAttendParty(x): True if x will attend the party.

And then we could write:

[1] Know(I, Student(K))

[2] Believe(I, WillAttendParty(C))

[3] Think(I, WillAttendParty(C))  WillAttendParty(I)

The problem is that, in a first-order logic system, we can’t make claims about predicates such as Student or WillAttendParty. Predicates have truth value and they can be combined using the logical operators. But they can’t themselves be the arguments of other predicates. Nor can complete logical statements. The only things that we can assert claims about are specific objects.

Recall that, in our system, objects can be indicated either by a specific name or value or as the value of a function.

  • Chris, London, and 5 are values. They can be arguments to predicates.

  • age(x) is a function. Given a specific value for x, it returns another specific value (maybe 25). That value can then be an argument to a predicate.

  • WillAttendParty(x) is already a predicate. It cannot be an argument to another predicate.

So in particular, in our system, we cannot make explicit assertions about belief or knowing. In fact, we can’t make explicit assertions about anything that we’re already representing as a predicate.

There exist belief logics that can solve this problem, but they are beyond the scope of this class.

Exercises Exercises

1.

We’re going to consider a set of claims. Try to represent them in our logical system. Think carefully about the predicates you use. Even if you do that, however, you’ll have trouble encoding one of these claims. Which one?

  1. Shelby likes peanut butter.

  2. Everyone who likes peanut butter likes jelly.

  3. Jody likes everyone who likes jelly.

  4. Casey likes it when Jody likes someone. .

  5. Casey hates peanut butter and jelly.

Answer.

Correct answer is D

Solution.

Explanation:

Shelby likes peanut butter. Likes(Shelby, PB)

Everyone who likes peanut butter likes jelly. x (Likes(x, PB)  Likes(x, Jelly)

Jody likes everyone who likes jelly. x (Likes(x, Jelly)  Likes(Jody, x)

Casey hates peanut butter and jelly. Hates(Casey, PB)  Hates(Casey, Jelly)

Casey likes it when Jody likes someone. This is the hard one. You might try to write:

Likes(Casey, x (Likes(Jody, x)))

But that requires using a quantified statement as an argument to Likes, and that isn’t allowed.