MetaProlog is a logic-based programming language which subsumes the full Prolog language. This implementation is an incremental compiler (which also looks and feels like an interpreter) supporting meta-level constructs that are usually provided by the underlying architecture in other systems and are not directly available to the user. The most obvious feature of MetaProlog is the ability to handle multiple databases (referred to as theories) at the same time. In contrast to ordinary Prolog’s single-theory database, a MetaProlog database is a collection of theories. A theory is a first-class object and can be passed around as the value of a variable. In fact, proofs are handled through the demo predicate which takes a theory as its first argument and a goal as its second argument: demo(Theory, Goal). The demo predicate is a meta-level construct which witnesses the derivability of the given goal from the given theory. Theories are collections of viewpoints (clauses and facts). The word viewpoint is used to reflect the fact that the same relation may be present in many theories with slight or substantial variations from one theory to the other. Each theory is then seen as having its own viewpoint on that given relation.
Bacha, Hamid, "MetaProlog User Manual" (1988). Electrical Engineering and Computer Science Technical Reports. 31.