foundations of computational agents
The base language can be changed by modifying the meta-interpreter. The set of provable consequences can be enlarged by adding clauses to the meta-interpreter. The set of provable consequences can be reduced by adding conditions to the meta-interpreter clauses.
In all practical systems, not every predicate is defined by clauses. For example, it would be impractical to axiomatize arithmetic on current machines that can do arithmetic quickly. Instead of axiomatizing such predicates, it is better to call the underlying system directly. Assume the predicate evaluates directly. Writing is the same as writing . The predicate is required because the definite clause language does not allow free variables as atoms.
Built-in procedures can be evaluated at the base level by defining the meta-level relation that is true if all instances of are to be evaluated directly; is a meta-level variable that must denote a base-level atom. Do not assume that “” is provided as a built-in relation. It can be axiomatized like any other relation.
The base language can be expanded to allow for disjunction in the body of a clause, where the disjunction, , is true in an interpretation when either is true in or is true in (or both are true in ). Allowing disjunction in the body of base-level clauses does not require disjunction in the metalanguage.
Figure 14.11 shows a meta-interpreter that allows built-in procedures to be evaluated directly and allows disjunction in the bodies of rules. This requires a database of built-in assertions and assumes that is a way to prove in the meta-level.
An example of the kind of base-level rule the meta-interpreter of Figure 14.11 can now interpret is
which says that is true if is true and either or is true (or both).
% is true if base-level body is a logical consequence of the base-level knowledge base.
Given such an interpreter, the meta-level and the base level are different languages. The base level allows disjunction in the body. The meta-level does not require disjunction to provide it for the base language. The meta-level requires a way to interpret , which the base level cannot handle. The base level, however, can be made to interpret the command by adding the following meta-level clause: