The first production systems were done by Newell and Simon in the 1950s, and the idea was written up in their (1972). A kind of generality is achieved by using the same goal seeking mechanism for all kinds of problems, changing only the particular productions. The early production systems have grown into the current proliferation of expert system shells.
Production systems represent knowledge in the form of facts and rules, and there is almost always a sharp syntactic distinction between the two. The facts usually correspond to ground instances of logical formulas, i.e. the correspond to predicate symbols applied to constant expressions. Unlike logic-based systems, these facts contain no variables or quantifiers. New facts are produced by inference, observation and user input. Variables are reserved for rules, which usually take a pattern-action form. Rules are put in the system by the programmer or ``knowledge engineer'' and in most systems cannot arise via the action of the system. In exchange for accepting these limitations, the production system programmer gets a relatively fast program.
Production system programs rarely use fundamental knowledge of the domain. For example, MYCIN (Buchanan and Shortliffe 1974) has many rules about how to infer which bacterium is causing an illness based on symptoms and the result of laboratory tests. However, its formalism has no way of expressing the fact that bacteria are organisms that grow within the body. In fact MYCIN has no way of representing processes occuring in time, although other production systems can represent processes at about the level of the situation calculus to be described in the next section.
The result of a production system pattern match is a substitution of constants for variables in the pattern part of the rule. Consequently production systems do not infer general propositions. For example, consider the definition that a container is sterile if it is sealed against entry by bacteria, and all the bacteria in it are dead. A production system (or a logic program) can only use this fact by substituting particular bacteria for the variables. Thus it cannot reason that heating a sealed container will sterilize it given that a heated bacterium dies, because it cannot reason about the unenumerated set of bacteria in the container. These matters are discussed further in (McCarthy 1984).