Lably
Skip to content

Event calculus

Language for reasoning and representing events

  • 11 min read
  • 7 chapters

Related on Lably

Through Event (computing), Logic programming and Probability

The event calculus represents the state of the world at any time by the set of all the facts (called fluents) that hold at the time. Events initiate and terminate fluents:

A fluent holds at a time
if the fluent is initiated by an event that happens at an earlier time
and the fluent is not terminated by any event that happens in the meantime.

The event calculus differs from most other approaches for reasoning about change by reifying time, associating events with the time at which they happen, and associating fluents with the times at which they hold.

The original version of the event calculus, introduced by Robert Kowalski and Marek Sergot in 1986, was formulated as a logic program and developed for representing narratives and database updates. Kave Eshghi showed how to use the event calculus for planning, by using abduction to generate hypothetical actions to achieve a desired state of affairs.

It was extended by Murray Shanahan and Rob Miller in the 1990s and reformulated in first-order logic with circumscription. These and later extensions have been used to formalize non-deterministic actions, concurrent actions, actions with delayed effects, gradual changes, actions with duration, continuous change, and non-inertial fluents.

Van Lambalgen and Hamm showed how a formulation of the event calculus as a constraint logic program can be used to give an algorithmic semantics to tense and aspect in natural language.

Fluents and events

In the event calculus, fluents are reified. This means that fluents are represented by terms. For example, holdsAt(on(green_block,table),1) expresses that the green_block is on the table at time 1. Here holdsAt is a predicate, while on(green_block,table) is a term. In general, the atomic formula

holdsAt(fluent,time) expresses that the fluent holds at the time.

Events are also reified and represented by terms. For example, happensAt(move(green_block,red_block),3) expresses that the green_block is moved onto the red_block) at time 3. In general:

happensAt(event,time) expresses that the event happens at the time.

The relationships between events and the fluents that they initiate and terminate are also represented by atomic formulae:

initiates(event,fluent,time) expresses that if the event happens at the time then the fluent becomes true after the time.
terminates(event,fluent,time) expresses that if the event happens at the time then the fluent ceases to be true after the time.

Sign in to keep reading

6 more chapters are free with a Lably account.

More in Computing and communication