Where is the Ball?

This program is made up of three explicit inferences:

$ ./run
make: 'data' is up to date.
Initializing

>> if dog has toy and dog is in room then toy is in room.
 if dog has toy and dog is in room then toy is in room.
>> if a dog sees a cat then dog drops toy and dog chases cat.
 if a dog sees a cat then dog drops toy and dog chases cat.
>> if dog drops toy then dog does not have toy.
 if dog drops toy then dog does not have toy.
>> 

A program can be entered interactively, as we did above.  Or, it can be read from a file.  It can also be sourced from stored memories--locally or across the network.  We continue, below, naming a toy and a location for the dog:

>> the dog is in the kitchen.
 the dog is in the kitchen.
>> the dog has a ball.
 the dog in the kitchen has a ball. a ball is in the kitchen.
>> the dog is in the living room.
 the dog is in the living room. a ball is in the living room.
>> the dog sees the cat.
 the dog in the living room sees the cat. the dog in the living room drops toy. the dog in the living room does not have toy. the dog in the living room chases the cat.
>> the dog is in the bedroom
 the dog is in the bedroom.
>> where is the ball?
 a ball is in the living room.
>> does the dog have a toy
 no. the dog does not have a ball.
>>

The dog had the ball at the outset, but now the dog is in the bedroom and yet the ball remains in the living room.  Why is that?  The living room is where the dog dropped the ball when the dog chased after the cat.