# First Steps with LPS LPS is a logic and computer language for representing the thoughts and for controlling the behaviour of an intelligent machine situated in a changing world. The machine's thoughts include both its goals for the way it would like the world to be, and its beliefs about the way the world is, whether it likes it or not. Beliefs include causal laws, which describe how external events and the machine's own actions change the state of the world. LPS is an imperative language with a logical interpretation. Goals are represented by sentences in logical form; and the machine has a global imperative to satisfy its goals, by generating a model of the world in which the goals are true. Viewed in computing terms, LPS aims to be a programming language, database language, and an artificial intellence knowledge representation and problem-solving language, scaled-down for practical use. Viewed in human terms, LPS aims to incorporate both the production system model of human thinking, and a normative model of how humans can think and behave more intelligently. This series of short notebooks introduces LPS, assuming no previous knowledge of logic or computing. The [first notebook](example/firststeps1.swinb) introduces *|computation|* as generating a world *model* containing a timeline of states and events. The model is generated by using causal laws of the form _|event initiates fact if conditions|_ and _|event terminates fact if conditions|_, to update the facts describing the current state, initiating new facts and terminating old facts, leaving facts that are not affected by the update intact. The [second notebook](example/firststeps2.swinb) introduces *|reactive rules|*, which are *goals* of the form _|if antecedent then consequent|_. The global imperative to make goals true, generates a local imperative to make _consequents_ true whenever _antecedents_ become true. The [third notebook](example/firststeps3.swinb) introduces *|logic programs|*, which are *beliefs* that determine the space of possible models of the world. These are written in the form _|conclusion if conditions|_, because they are used "backwards", to check or make _conclusions_ true by checking or making _conditions_ true. The [fourth notebook](example/firststeps4.swinb) explains how some of the features of LPS are inherited from its implementation in *Prolog*. It also introduces *constraints* of the form _false conditions_, which prevent undesirable actions.