The situation calculus is a logic formalism designed for representing and reasoning about dynamical domains. It was first introduced by John McCarthy in 1963. The main version of the situational calculus that is presented in this article is based on that introduced by Ray Reiter in 1991. It is followed by sections about McCarthy's 1986 version and a logic programming formulation. Overview The situation calculus represents changing scenarios as a set of first-order logic formulae. The basic elements of the calculus are: The actions that can be performed in the world The fluents that describe the state of the world The situations A domain is formalized by a number of formulae, namely: Action precondition axioms, one for each action Successor state axioms, one for each fluent Axioms describing the world in various situations The foundational axioms of the situation calculus A simple robot world will be modeled as a running example. In this world there is a single robot and several inanimate objects. The world is laid out according to a grid so that locations can be specified in terms of coordinate points. It is possible for the robot to move around the world, and to pick up and drop items. Some items may be too heavy for the robot to pick up, or fragile so that they break when they are dropped. The robot also has the ability to repair any broken items that it is holding. Elements The main elements of the situation calculus are the actions, fluents and the situations. A number of objects are also typically involved in the description of the world. The situation calculus is based on a sorted domain with three sorts: actions, situations, and objects, where the objects include everything that is not an action or a situation. Variables of each sort can be used. While actions, situations, and objects are elements of the domain, the fluents are modeled as either predicates or functions. Actions The actions form a sort of the domain. Variables of sort action can be used. Actions can be quantified. In the example robot world, possible action terms would be to model the robot moving to a new location , and to model the robot picking up an object . A special predicate is used to indicate when an action is executable. Situations In the situation calculus, a dynamic world is modeled as progressing through a series of