Under consideration for publication in Theory and Practice of Logic Programming
1
arXiv:cs/0110035v3 [cs.PL] 24 Dec 2003
On termination of meta-programs
ALEXANDER SEREBRENIK∗
École Polytechnique (STIX)
91128 Palaiseau Cedex, France
(e-mail:
[email protected])
DANNY DE SCHREYE
Department of Computer Science, K.U. Leuven
Celestijnenlaan 200A, B-3001, Heverlee, Belgium
(e-mail:
[email protected])
submitted 16 July 2003; revised 17 December 2003; accepted 18 December 2003
Abstract
The term meta-programming refers to the ability of writing programs that have other programs as
data and exploit their semantics.
The aim of this paper is presenting a methodology allowing us to perform a correct termination
analysis for a broad class of practical meta-interpreters, including negation and performing different
tasks during the execution. It is based on combining the power of general orderings, used in proving
termination of term-rewrite systems and programs, and on the well-known acceptability condition,
used in proving termination of logic programs.
The methodology establishes a relationship between the ordering needed to prove termination of
the interpreted program and the ordering needed to prove termination of the meta-interpreter together
with this interpreted program. If such a relationship is established, termination of one of those implies
termination of the other one, i.e., the meta-interpreter preserves termination.
Among the meta-interpreters that are analysed correctly are a proof trees constructing metainterpreter, different kinds of tracers and reasoners.
To appear without appendix in Theory and Practice of Logic Programming.
Keywords: termination analysis, meta-programming, meta-interpreter.
1 Introduction
The choice of logic programming as a basis for meta-programming offers a number of
practical and theoretical advantages. One of them is the possibility of tackling critical foundation problems of meta-programming within a framework with a strong theoretical basis.
Another is the surprising ease of programming. These advantages motivated intensive research on meta-programming inside the logic programming community (Apt and Turini 1995;
Hill and Gallagher 1998; Levi and Ramundo 1993; Martens and De Schreye 1995b; Pedreschi and Ruggieri 1997).
Meta-programming in logic languages is also a powerful technique for many different application areas such as aspect-oriented programming (De Volder and D’Hondt 1999; Brichau et al. 2002)
and constraints solving (Lamma et al. 1996).
∗ This work has been done during the author’s stay at Department of Computer Science, K.U. Leuven, Belgium
2
Alexander Serebrenik and Danny De Schreye
Moreover, termination analysis is one of the most intensive research areas in logic programming as well (see e.g. (Bossi et al. 2002; Bruynooghe et al. 2002; Decorte et al. 1999;
Dershowitz et al. 2001; Genaim et al. 2002; Lee 2002; Mesnard and Ruggieri 2003; Verbaeten et al. 2001)).
Traditionally, termination analysis of logic programs has been done either by the “transformational” approach or by the “direct” one. A transformational approach first transforms the logic program into an “equivalent” term-rewrite system (or, in some cases,
into an equivalent functional program). Here, equivalence means that, at the very least,
the termination of the term-rewrite system should imply the termination of the logic program, for some predefined collection of queries1 . Direct approaches do not include such
a transformation, but prove the termination directly on the basis of the logic program.
These approaches are usually based on level mappings, functions that map atoms to natural numbers, and norms that map terms to natural numbers. De Schreye et al. proved in
(De Schreye et al. 1992) that termination is equivalent to acceptability, i.e. to existence of
a level mapping that decreases from the call to the head of a clause to the appropriately
instantiated call to the recursive body subgoal. In (De Schreye and Serebrenik 2002) we
have developed an approach that provides the best of both worlds: a means to incorporate
into “direct” acceptability-based approaches the generality of general term-orderings.
The aim of this paper is to present a methodology that allows us to perform a correct
termination analysis for a broad class of meta-interpreters. This methodology is based on
the “combined” approach to termination analysis mentioned above. It makes possible the
reuse of termination proofs obtained for the interpreted program as a base for the termination proof of the meta-program. As Example 2 will illustrate, with the level mappings based
techniques the reuse would be impossible, even if the simplest “vanilla” meta-interpreter,
presented in the following example, was considered.
Example 1
Our research has been motivated by the famous “vanilla” meta-interpreter M0 , undoubtedly
belonging to logic programming classics.
solve(true).
solve((Atom, Atoms)) ← solve(Atom), solve(Atoms).
solve(Head) ← clause(Head, Body), solve(Body).
Atoms of the form clause(Head, Body) represent the interpreted program. Termination
of the “vanilla” meta-interpreter has been studied by Pedreschi and Ruggieri. They have
proved that termination of the query Q with respect to a program P implies termination of
the query solve(Q ) with respect to M0 and P (Corollary 40, (Pedreschi and Ruggieri 1997)).
We are going to see that the two statements are equivalent, i.e., the query Q terminates with
respect to a program P if and only if the query solve(Q ) LD-terminates with respect to M0
and P .
✷
Even though the termination of an interpreted program might easily be proved with
level mappings, the termination proof of the meta-interpreter extended by this program
1
The approach of Arts (Arts 1997) is exceptional in the sense that the termination of the logic program is
concluded from a weaker property of single-redex normalisation of the term-rewrite system.
On termination of meta-programs
3
with respect to the set of the corresponding queries might be much more complex. As the
following example demonstrates, in some cases no linear level mapping can prove termination of the meta-program, despite the fact that termination of an interpreted program can
be shown with linear level mappings. Recall, that a level mapping | · | and a norm k · k are
called linear if
| p(t1 , . . . , tn ) |= c p + Σni=1 aip kti k,
kf (t1 , . . . , tn )k = c f + Σni=1 aif kti k,
and for all p, f and for all i, the coefficients are non-negative integers.
Example 2
Let P be the following program:
l (X ) ← p(X ), r (X ).
q(f (Z ), Z ).
s(0).
p(X ) ← q(X , Y ), p(Y ).
p(0).
r (f (X )) ← s(Y ), r (X ).
r (0).
This program clearly terminates for l (t ) for every ground term t . To show termination
one may, for example, use a term-size norm k · k, defined on a term t as a number of nodes
in the tree-representation of t , and a level mapping based on k · k: | l (t ) | = kt k, | p(t ) |
= kt k, | r (t ) | = kt k, | s(t ) | = 0 and | q(t1 , t2 ) | = 0. One can show that the program
above satisfies the acceptability condition of De Schreye et al. (De Schreye et al. 1992)
with respect to this level mapping and, hence, queries of the form l (t ) with a ground
argument t terminate with respect to the program.
Corollary 40, (Pedreschi and Ruggieri 1997) implies that solve(l (t )) terminates for every ground t as well. However, if a linear level mapping | · | and a linear norm k · k are used
in the traditional way to prove termination of the meta-program, the following constraints
are obtained among others:
| solve(p(X )) | > | solve((q(X , Y ), p(Y ))) |
(1)
| solve(r (f (X ))) | > | solve((s(Y ), r (X ))) |
(2)
| solve((s(Y ), r (X ))) | > | solve(r (X )) |,
(3)
where > denotes the traditional ordering on natural numbers. In general, the last constraint
should take into consideration the intermediate body atom s(Y ) as well, but one can prove
that it cannot affect r (X ). Observe that, unlike the interpreted program, the comma of
“(s(Y ), r (X ))” in the meta-program is a functor to be considered during the termination
analysis.
One can show that there is no linear level mapping that can satisfy (1)–(3). Indeed,
constraints (1)–(3) can be reduced to the following (without loss of generality, c solve = 0
and a1solve = 1). For functors having only one argument the subscript is dropped.
c p + a p kX k > c , + a1, c q + a1, a1q kX k + a1, a2q kY k + a2, c p + a2, a p kY k
c r + a r c f + a r a f kX k > c , + a1, c s + a1, a s kY k + a2, c r + a2, a r kX k
c , + a1, c s + a1, a s kY k + a2, c r + a2, a r kX k > c r + a r kX k
4
Alexander Serebrenik and Danny De Schreye
Further reduction gives, among others, the following inequalities:
c p > c , + a1, c q + a2, c p
r
r f
c +a c > c
c
,
+ a1, c s
a2, a r
≥a
,
+ a1, c s
+ a2, c r
>c
(4)
+ a2, c r
r
r
(5)
(6)
(7)
a2,
Condition (4) implies that = 0. Thus, by (7) a r = 0 holds as well. However, (5) and (6)
imply that a r c f > 0, which provides the desired contradiction.
✷
Note that by the well-known result of (De Schreye et al. 1992) termination of the metaprogram implies existence of a non-linear level mapping that would prove termination.
However, such a level mapping might be difficult or even impossible to generate automatically.
One can consider a number of possible solutions to this problem. First, we may restrict
attention to a specific class of interpreted programs, such that if their termination can be
proved via linear norms and level mappings, so should be the termination of the metaprogram obtained from it and M0 . As the following example illustrates even for this restricted class of programs no obvious relation can be established between a level mapping
required to prove termination of the interpreted program and a level mapping required
to prove termination of the meta-program. Observe, that results on modular termination
proofs for logic programs (Apt and Pedreschi 1994; Bossi et al. 2002; Pedreschi and Ruggieri 1996;
Verbaeten et al. 2001) further discussed in Section 7 are not applicable here, since the levelmapping required to prove termination of calls to clause is trivial.
Example 3
Let P be the following program:
p([X , Y |T ]) ← p([Y |T ]), p(T )·
Termination of the set of queries {p(t ) | t is a list of finite length} can easily be proved, for
example by using a level mapping |p(X )| = kX kl , where k · kl is a list-length norm defined
as k[h|t ]kl = 1 + kt kl for lists and as kt kl = 0 for terms other than lists. However, when
this program is considered together with M0 this level mapping and this norm cannot be
extended in a way allowing us to prove termination, even though there exists a linear level
mapping and a linear norm that provide a termination proof. In our case, the following
linear level mapping is sufficient to prove termination: | solve(A)| = kAk, k(A, B )k =
1 + kAk + kB k, kp(X )k = 1 + kX k, k[H |T ]k = 1 + 3kT k.
✷
Thus, even though modern termination analysis techniques, such as the constraint-based
approach of (Decorte et al. 1999), are able to derive the level mapping required, they cannot reuse any information from a termination proof of the interpreted program to do so, and
the process has to be restarted from scratch. Moreover, the constraints set up for such examples are fairly complex (n body atoms are interpreted as a , /2-term of depth n and reasoning on them requires products of (at least) n parameters). Other approaches based on level
mappings work on a basis of fixed norms (Dershowitz et al. 2001; Codish and Taboch 1999),
like list-length and term-size, and therefore fail to prove termination of the example. Hence,
On termination of meta-programs
5
we follow a different way and instead of considering level mappings and norms, we move
to the general orderings based framework originally presented in (De Schreye and Serebrenik 2002).
In order for meta-interpreters to be useful in applications they should be able to cope with
a richer language than the one of the “vanilla” meta-interpreter, including, for example,
negation. Moreover, typical applications of meta-interpreters, such as debuggers, also require the production of some additional output or the performance of some additional tasks
during the execution, such as constructing proof trees or cutting “unlikely” branches for an
uncertainty reasoner with cutoff. These extensions can and usually will influence termination properties of the meta-interpreter. To this end we first identify popular classes of metainterpreters, including the important extended meta-interpreters (Martens and De Schreye 1995b).
Next, we use the orderings-based framework to find conditions implying that termination is
not violated or not improved. By combining these conditions one obtains the requirements
for termination preservation.
The rest of this paper is organised as follows. After some preliminary remarks, we
present the general orderings based framework of (De Schreye and Serebrenik 2002). Next
we introduce basic definitions and discuss the methodology developed, as it applies to the
“vanilla” meta-interpreter M0 . Afterwards, we show how the same methodology can be
applied to more advanced meta-interpreters.
2 Preliminaries
We follow the standard notation for terms and atoms. A query is a finite sequence of atoms.
Given an atom A, rel(A) denotes the predicate occurring in A. TermP and AtomP denote,
respectively, the sets of all terms and atoms that can be constructed from the language
underlying P . The extended Herbrand Universe UPE (the extended Herbrand base BPE ) is
a quotient set of TermP (AtomP ) modulo the variant relation. Recall that the quotient set
of a set X with respect to an equivalence relation ∼ is the set consisting of all equivalence
classes induced on X by ∼.
We refer to an SLD-tree constructed using the left-to-right selection rule of Prolog as
an LD-tree. We will say that a query Q LD-terminates for a program P , if the LD-tree for
{Q } ∪ P is finite.
The following definition is similar to Definition 6.30 (Apt 1997).
Definition 1
Let P be a program and p, q be predicates occurring in it.
• We say that p refers to q in P if there is a clause in P that uses p in its head and q in
its body.
• We say that p depends on q in P and write p ⊒ q, if (p, q) is in the transitive closure
of the relation refers t o.
• We say that p and q are mutually recursive and write p ≃ q, if p ⊒ q and q ⊒ p.
The only difference between this definition and the original definition of Apt is that we
define ⊒ as a transitive closure of the refers to relation and not as a reflexive transitive
closure of it. Thus, we can say that the predicate p is recursive if and only if p ≃ p, while
if the definition of Apt is followed, p ≃ p holds for all p. We also abbreviate p ⊒ q, q 6⊒ p
by p ❂ q.
6
Alexander Serebrenik and Danny De Schreye
Results for termination of meta-interpreters presented in this paper are based on the notion of order-acceptability with respect to a set of queries, studied in (De Schreye and Serebrenik 2002).
This notion of order-acceptability generalises the notion of acceptability with respect to
a set (Decorte and De Schreye 1998) in two ways: 1) it generalises it to general orderings, 2) it generalises it to mutual recursion, using the standard notion of mutual recursion (Apt 1997)—the original definition of acceptability required decrease only for calls to
the predicate that appears in the head of the clause. This restriction limited the approach to
programs with direct recursion only.
We start by reviewing some properties of orderings. A quasi-ordering over a set S is
a reflexive and transitive relation ≥ defined on elements of S . We define the associated
equivalence relation ≤≥ as s ≤≥ t if and only if s ≥ t and t ≥ s, and the associated
ordering > as s > t if and only if s ≥ t but not t ≥ s. If neither s ≥ t , nor t ≥ s we write
sk≥ t . If s ≥ t or t ≥ s hold for all s and t , the quasi-ordering is called total, otherwise it
is called partial. Sometimes, in order to distinguish between different quasi-orderings and
associated relations, we also use , ≻, and k . An ordered set S is said to be wellfounded if there are no infinite descending sequences s1 > s2 > . . . of elements of S . If the
set S is clear from the context we will say that the ordering, defined on it, is well-founded.
Before introducing the order-acceptability we need the following notion. The call set,
Call(P , S ), is the set of all atoms A, such that a variant of A is a selected atom in some
branch of the LD-tree for P ∪ {Q }, for some Q ∈ S . Techniques for inferring the supersets
of the call set were suggested in (Janssens and Bruynooghe 1992; Janssens et al. 1994).
For the sake of simplicity we write Call(P , Q ) instead of Call(P , {Q }).
Definition 2
Let S be a set of atomic queries and P a definite program. P is order-acceptable with
respect to S if there exists a well-founded ordering > over Call(P , Q ), such that
•
•
•
•
for any A ∈ Call(P , S )
for any clause A′ ← B1 , . . . , Bn in P , such that mgu(A, A′ ) = θ exists,
for any atom Bi , such that rel(Bi ) ≃ rel(A)
for any computed answer substitution σ for ← (B1 , . . . , Bi −1 )θ:
A > Bi θσ
In (De Schreye and Serebrenik 2002) we prove the following theorem.
Theorem 1
Let P be a program. P is order-acceptable with respect to a set of atomic queries S if and
only if P is LD-terminating for all queries in S .
We discovered that order-acceptability is a powerful notion, allowing us a wide variety of
programs, such as normalisation (Decorte et al. 1999), derivative (Dershowitz and Manna 1979),
bid (Bueno et al. 1994), and credit evaluation expert system (Sterling and Shapiro 1994)
to mention a few. In this paper we will see that order-acceptability plays a key role in
analysing termination behaviour of meta-programs. We also remark that the declarative
version of our termination proof method, so called rigid acceptability also presented in (De Schreye and Serebrenik 2002),
cannot be used to analyse termination behaviour of meta-programs as rigid acceptability
implies termination but it is no longer equivalent to it.
On termination of meta-programs
7
3 Basic definitions
In this section, we present a number of basic definitions. We start by defining the kind of
program we call a meta-program. Then we introduce two semantic notions that relate computed answers of the interpreted program to computed answers of the meta-program. Finally, we conclude by discussing an appropriate notion of termination for meta-interpreters.
We have seen already in Example 1 that the input program is represented as a set of
atoms of the predicate clause. We call this representation a clause-encoding and define it
formally as follows:
Definition 3
Let P be a program. The clause-encoding ce(P ) is a collection of facts of a new predicate
clause, such that clause(H , B ) ∈ ce(P ) if and only if H ← B is a clause in P .
Example 4
Let P be the following program:
p(X ) ← q(X ).
q(b).
s ← r,t·
Then, the following program is ce(P ):
clause(p(X ), q(X )).
clause(q(b), true). clause(s, (r , t )).
✷
An alternative representation of an interpreted program and the related meta-interpreter
will be discussed in Section 6 (Example 25).
A meta-interpreter for a language is an interpreter for the language written in the language itself. We follow (Sterling and Shapiro 1994) by using a predicate solve for the metainterpreter predicate. Sometimes a name demo is used (Pedreschi and Ruggieri 1997). One
of the first meta-interpreters was introduced by Kowalski in (Kowalski 1979).
Definition 4
The program P is called a meta-program if it can be represented as M ∪ I , such that:
• I is a clause-encoding of some program P ′ .
• M defines a predicate solve that does not appear in P ′ .
M is called the meta-interpreter. P ′ is called the interpreted program.
We also assume that neither , /2 nor clause/2 appears in the language underlying the interpreted program. Observe that if this assumption is violated, a clear distinction between
the meta-interpreter and the interpreted program is no longer possible. Note that this restriction implies that we cannot study higher-order meta-programs (i.e., programs with two
or more meta-layers). Distinguishing between the meta-interpreter and the interpreted program is essential, for example, to ease the recognition of a program as a meta-program.
Observe that meta-interpreters like “vanilla” mix an interpreted language and the metalanguage because of the call to clause/2 in the definition of solve. An alternative class
of meta-interpreters keeping these languages strictly separate is considered in Section 6
(Example 25).
8
Alexander Serebrenik and Danny De Schreye
Now we are going to define the notions of soundness and completeness for meta-interpreters, that relate computed answers of the interpreted program to the computed answers
of the meta-program. It should be noted that we define these notions for solve with arity
n ≥ 1. Second, third, etc. arguments are often required to support added functionality (see
M2 in Example 5 below). Often these arguments will store some information about the
interpreted program obtained during the execution of the meta-interpreter. For example,
M2 in Example 5 returns the maximal depth of the LD-tree of the interpreted program and
the interpreted query.
Definition 5
The meta-interpreter M defining solve with arity n is called sound if for every program
E
P and every query Q0 ∈ BPE for every s1 , . . . , sn −1 ∈ UM
if solve(t0 , t1 , . . . , tn −1 ) is a
computed answer for {solve(Q0 , s1 , . . . , sn −1 )} ∪ M ∪ ce(P ) then t0 is a correct answer for
{Q0 } ∪ P .
The definition of soundness, as well as further definitions, requires some property to
hold for all programs. These definitions do not depend on the considered class of programs. However, constructing meta-interpreters that will satisfy the properties required for
all Prolog programs can be difficult. Thus, we start by restricting the class of programs
considered to definite logic programs.
To simplify the presentation, we denote Varsn a (countably infinite) set of linear sequences of length n of free variables. Recall that a sequence of free variables is called
linear if all the variables are different.
Definition 6
The meta-interpreter M defining solve with arity n is called complete if for every program
P , every query Q0 ∈ BPE and every computed answer t0 for {Q0 } ∪ P holds:
E
• if n = 1, then there exists t ∈ UM
∪ce(P ) such that solve(t ) is a computed answer for
{solve(Q0 )} ∪ M ∪ ce(P ) and t0 is an instance of t
E
• if n > 1, then there exist (v1 , . . . , vn −1 ) ∈ Varsn −1 and t , t1 , . . . , tn −1 ∈ UM
∪ce(P )
such that solve(t , t1 , . . . , tn −1 ) is a computed answer for {solve(Q0 , v1 , . . . , vn −1 )} ∪
(M ∪ ce(P )), and t0 is an instance of t .
Example 5
The following meta-interpreter M1 is sound, but is not complete: solve(A) ← fail. The
meta-interpreter solve(A, X ). is complete, but it is not sound. The “vanilla” meta-interpreter
M0 (Example 1) is both sound and complete, as shown in (Levi and Ramundo 1993).
The following meta-interpreter M2 is also sound and complete. Given a program P and
a query Q , computing solve(Q , v ), where v is a free variable, with respect to M2 ∪ ce(P )
not only mimics the execution of Q with respect to P but also calculates the maximal depth
of the LD-tree.
solve(true, 0).
solve((A, B ), K ) ← solve(A, M ), solve(B , N ), max(M , N , K ).
solve(A, s(N )) ← clause(A, B ), solve(B , N ).
On termination of meta-programs
9
max(0, 0, 0).
max(s(X ), 0, s(X )).
max(0, s(X ), s(X )).
max(s(X ), s(Y ), s(Z )) ← max(X , Y , Z )·
It is intuitively clear why this meta-interpreter is sound. In the latter part of the paper we
investigate an important class of meta-interpreters, including M2 , and prove that all metainterpreters in this class are sound (Lemma 2).
To see that M2 is complete recall that the second argument of solve(Query) that is required by Definition 6 should be a variable. Indeed, in this case unifications of calls to
solve with the corresponding clauses will depend only on the first argument of solve and
calls to max cannot affect meta-variables, fail or introduce infinite execution. Formally,
completeness of this meta-interpreter follows from Lemma 8 and from the fact that for any
interpreted program P and any interpreted query Q , M2 extended by P terminates for all
calls to max obtained with respect to solve(Q , v ), where v is a free variable.
✷
Recall that our aim is to study termination of meta-interpreters, that is termination of
queries of the form solve(Q0 , H1 , . . . , Hn ), where Q0 is a query with respect to the interpreted program. Thus, the crucial issue is to define an appropriate notion of termination
for meta-interpreters. It should be observed that requiring termination of solve(Q0 , H1 , . . . ,
Hn ) for all possible queries Q0 and all possible interpreted programs P is undesirable.
In fact, there are no interesting meta-interpreters satisfying this property. Therefore, instead of termination we consider termination preservation. For many applications, such as
debuggers, this is the desired behaviour of a meta-interpreter. However, there are many
meta-interpreters that may change termination behaviour of the interpreted program, either
by improving or by violating it.
Definition 7
(non-violating LD-termination)
1. Let M be a meta-interpreter defining solve with arity 1. M is called nonviolating LD-termination if for every program P and every query Q0 ∈ BPE
if the LD-tree of {Q0 } ∪ P is finite, then the LD-tree of {solve(Q0 )} ∪ (M ∪
ce(P )) is finite as well.
2. Let M be a meta-interpreter defining solve with arity n + 1, n > 0. M is called
E n
non-violating LD-termination with respect to S ⊆ (UM
) if for every program
E
P and every query Q0 ∈ BP if the LD-tree of {Q0 } ∪P is finite, then for every
sequence (H1 , . . . , Hn ) ∈ S , the LD-tree of {solve(Q0 , H1 , . . . , Hn )} ∪ (M ∪
ce(P )) is finite as well.
Observe that S formalises the intuitive notion of a set of sequences of “arguments other
than the meta-argument”. It should be noted that the two cases can not be collapsed to one,
E n
i.e., n > 0 is essential. Indeed, assume that n = 0 in the second case. Then, (UM
) is empty
and, therefore, S is empty as well. Hence, there exists no sequence (H1 , . . . , Hn ) ∈ S and
universally quantified term in the “then”-clause is always true. In other words, M would
be called non-violating LD-termination if for every program P and every query Q0 the
10
Alexander Serebrenik and Danny De Schreye
LD-tree of {Q0 } ∪ P is finite, which is useless as a definition. Therefore, the case n = 0
should be considered separately.
It should be noted that traditionally the feature introduced in Definition 7 is called improving termination . However, this term is not quite accurate, since by improving we do
not mean that the meta-program terminates more often than the original one, but that it terminates at least as often as the original one. Thus, we chose to use more clear terminology.
It also follows from the definition of non-violation that every meta-interpreter defining
solve with arity greater than 1 does not violate termination with respect to the empty set.
Example 6
Recall the meta-interpreters shown in Example 5. M1 does not violate termination, and M2
E 1
E
does not violate termination with respect to (UM
) , that is with respect to UM
.
✷
2
2
The dual notion is of termination non-improving.
Definition 8
(non-improving LD-termination)
1. Let M be a meta-interpreter defining solve with arity 1. M is called nonimproving LD-termination if for every program P and every solve(Q0 ) ∈
E
BM
∪ce(P ) , finiteness of the LD-tree of {solve(Q0 )} ∪ (M ∪ ce(P )) implies
finiteness of the LD-tree of {Q0 } ∪ P .
2. Let M be a meta-interpreter defining solve with arity n + 1, n > 0. M is
E n
called non-improving LD-termination with respect to S ⊆ (UM
) if for evE
ery program P and every query solve(Q0 , H1 , . . . , Hn ) ∈ BM ∪ce(P ) , such that
(H1 , . . . , Hn ) ∈ S , finiteness of the LD-tree of {solve(Q0 , H1 , . . . , Hn )}∪(M ∪
ce(P )) implies finiteness of the LD-tree of {Q0 } ∪ P .
Example 7
The meta-interpreter M2 does not improve termination with respect to Vars, where Vars is
a countably infinite set of variables.
✷
Finally, we define termination preservation.
Definition 9
Let M be a meta-interpreter defining solve with arity n + 1. We say that M is preservE n
) , if n > 0), if it is
ing termination (preserving termination with respect to S ⊆ (UM
non-violating LD-termination (non-violating LD-termination with respect to S ) and nonimproving LD-termination (non-improving LD-termination with respect to S ).
The “vanilla” meta-interpreter M0 preserves termination and the meta-interpreter M2
preserves termination with respect to Vars, that is if it is used to measure the depth of
LD-refutation of a given query, and not to bound it. In the next sections we prove these
statements.
On termination of meta-programs
11
4 Termination of the “vanilla” meta-interpreter
Termination of the “vanilla” meta-interpreter, presented in Example 1, has been studied
by Pedreschi and Ruggieri. They have proved that “vanilla” does not violate termination
(Corollary 40, (Pedreschi and Ruggieri 1997)). However, we can claim more—this metainterpreter preserves termination.
We base our proof on soundness and completeness of “vanilla”, proved in (Levi and Ramundo 1993).
Observe that, in general, soundness and completeness are not sufficient for the call set to
be preserved. Indeed, consider the following example, motivated by the ideas of unfolding (Bossi and Cocco 1994).
Example 8
The following meta-interpreter M3 eliminates calls to undefined predicates.
solve(true).
solve((A, B )) ← solve(A), solve(B ).
solve(A) ← clause(A, B ), check(B ), solve(B ).
check((A, B )) ← check(A), check(B ).
check(A) ← clause(A, ).
check(true).
This meta-interpreter is sound and complete, i.e., preserves computed answers. However,
it does not preserve termination. Indeed, let P be the following program:
p ← q, r .
q ← q.
and let p be the query. Then, p with respect to P does not terminate, while solve(p) with respect to M3 ∪ ce(P ) terminates (finitely fails). Thus, this meta-interpreter does not preserve
LD-termination. Observe that unfolding may only improve termination (Bossi and Cocco 1994).
Thus, this meta-interpreter is non-violating LD-termination.
✷
Thus, the claim that the “vanilla” meta-interpreter preserves the calls set should be
proven separately.
Lemma 1
Let P be an interpreted program, M0 be the “vanilla” meta-interpreter and Q ∈ BPE , then:
• for every call A ∈ Call(P , Q ), there exists solve(A′ ) ∈ Call(M0 ∪ ce(P ), solve(Q ))
such that A and A′ are variants;
• for every call solve(A) ∈ Call(M0 ∪ ce(P ), solve(Q )), such that A ∈ BPE , there exists
A′ ∈ Call(P , Q ), such that A and A′ are variants.
Proof
The proof can be found in Appendix A.
12
Alexander Serebrenik and Danny De Schreye
This lemma extends Theorem 9 (Pedreschi and Ruggieri 1997), by claiming not only
that every call of the meta-program and of the meta-query “mimics” the original execution,
but also that every call of the original program and query is “mimicked” by the metaprogram.
Now we can complete the analysis of the “vanilla” meta-interpreter, namely, prove that
it does not improve termination. The main idea is to construct a quasi-ordering relation
for atoms of the interpreted program based on the quasi-ordering ≥ such that the metaprogram is order-acceptable via the quasi-ordering relation ≥. To complete the proof, we
have to show that the interpreted program is order-acceptable via .
Theorem 2
Let P be a definite program, S a set of atomic queries, and M0 the “vanilla” meta-interpreter,
such that M0 ∪ ce(P ) is LD-terminating for all queries in {solve(Q ) | Q ∈ S }. Then, P is
LD-terminating for all queries in S .
Proof
By Theorem 1 M0 ∪ ce(P ) is order-acceptable with respect to a set {solve(Q ) | Q ∈ S }. We
are going to prove order-acceptability of P with respect to S . By Theorem 1 termination
will be implied.
Since M0 ∪ ce(P ) is order-acceptable with respect to {solve(Q ) | Q ∈ S } there exists
a well-founded quasi-ordering ≥, satisfying requirements of Definition 2. Let be a new
quasi-ordering on BPE defined as A ≻ B if solve(A) > solve(B ) and A A for all A.
The ordering is defined on {A | A ∈ BPE ∧ ∃Q ∈ S such that solve(A) ∈ Call(M0 ∪
ce(P ), solve(Q ))}. By Lemma 1 this set coincides with Call(P , S ). The ordering ≻ is welldefined and well-founded. These properties follow immediately from the corresponding
properties of >.
Next, we prove that P is order-acceptable with respect to S via . Let Q ∈ S , A ∈
Call(P , Q ) and let A′ ← B1 , . . . , Bn be a clause in P , such that mgu(A, A′ ) = θ exists.
Let Bi be such that rel(Bi ) ≃ rel(A) and let σ be a computed answer substitution for
(B1 , . . . , Bi −1 )θ. We have to show that A ≻ Bi θσ.
By Lemma 1 solve(A) ∈ Call(M0 ∪ ce(P ), solve(Q )). The only clause that can be used
in the resolution with it is solve(Head) ← clause(Head, Body), solve(Body). Observe that
mgu(solve(A), solve(Head)) affects neither A nor Body. Let τ be a computed answer substitution that unifies A and A′ , Body and (B1 , . . . , Bn ). By the choice of τ, τ maps Body to
(B1 , . . . , Bn )θ. Then, solve(Body)τ = solve((B1 , . . . , Bn ))θ and solve(A) > solve((B1 , . . . ,
Bn )θ) by the order-acceptability of M0 ∪ ce(P ) via ≥.
If n = 1 then solve(A) > solve(B1 θ). By definition of ≻, A ≻ B1 θ, completing the
proof.
Assume that n > 1. In this case, solve((B1 , . . . , Bn )θ) is another call in the call set. The
clause solve((Atom, Atoms)) ← solve(Atom), solve(Atoms) is the only one that can be
used at the resolution step. Let δ be the most general unifier of solve((B1 , . . . , Bn )θ) with
the head of the clause above. The substitution δ does not affect the variables appearing in
(B 1, . . . , Bn )θ, since Atom and Atoms are variables. Thus, Bj θδ = Bj θ for all j and δ is
omitted in the lines to come.
Order-acceptability of the meta-program implies that solve((B1 , . . . , Bn )θ) > solve(B1 θ)
On termination of meta-programs
13
and for any computed answer substitution σ1 for solve(B1 θ), solve((B1 , . . . , Bn )θ) >
solve((B2 , . . . , Bn )θσ1 ). Proceeding in the same way, we obtain
solve((B2 , . . . , Bn )θσ1 ) > solve((B3 , . . . , Bn )θσ1 σ2 )
..
.
solve((Bi −1 , . . . , Bn )θσ1 . . . σi −2 ) > solve((Bi , . . . , Bn )θσ1 . . . σi −1 ),
where σj is a computed answer substitution for solve(Bj θσ1 . . . σj −1 ).
Moreover, solve((Bi , . . . , Bn )θσ1 . . . σi −1 ) > solve(Bi θσ1 . . . σi −1 ). Transitivity of the
>-ordering implies solve(A) > solve(Bi θσ1 . . . σi −1 ). Computed answer substitutions are
preserved by M0 (Levi and Ramundo 1993). Thus, for all j , σj is also a computed answer
substitution for Bj θσ1 . . . σj −1 . Therefore, σj ’s can be chosen such that σ = σ1 . . . σi −1 . In
other words, solve(A) > solve(Bi θσ). Thus, A ≻ Bi θσ by definition of ≻, completing the
proof.
The other direction of the theorem has been proved by Pedreschi and Ruggieri (Pedreschi and Ruggieri 1997).
It allows us to state the following corollary.
Corollary 1
The “vanilla” meta-interpreter M0 preserves LD-termination.
The proof of Theorem 2 presented above suggests the following methodology for proving that a particular meta-interpreter does not improve LD-termination. First, define an
ordering on the set of calls to the meta-interpreter, such that the ordering reflects its behaviour. Then, establish the relationship between a new ordering and the one that reflects
order-acceptability with respect to a set of the interpreted program. Prove, using this relationship, that the newly defined ordering is well-defined, well-founded and reflects orderacceptability of the meta-program with respect to a corresponding set of calls. In order
for the proofs to be correct, one may need to assume (or to prove as a prerequisite) that
the meta-interpreter is sound and that the set of calls of the interpreted program and of
the meta-program correspond to each other. The opposite direction, i.e., that the metainterpreter does not violate termination, can be proved using a similar methodology. Therefore, in the following section we will define an ordering for advanced meta-interpreters
based on the existing ordering for M0 and vice versa.
We illustrate the methodology proposed by considering M0 and Example 2. Recall that
we have seen in Section 1 that level-mapping based approaches experience serious difficulties with analysing termination of this example.
Example 9
Let P be the program discussed in Example 2. Acceptability (and thus, termination) of
{solve(l (t )) | t is a ground term} with respect to the corresponding meta-program can be
established via the ordering > that satisfies for all ground terms t1 and t2 :
solve(l (t1 )) > solve((p(t1 ), r (t1 )))
solve((p(t1 ), r (t1 ))) > solve(p(t1 ))
solve((p(t1 ), r (t1 ))) > solve(r (t1 ))
solve(p(t1 )) > solve((q(t1 , t2 ), p(t2 )))
14
Alexander Serebrenik and Danny De Schreye
solve((q(t1 , t2 ), p(t2 ))) > solve(q(t1 , t2 ))
solve((q(t1 , t2 ), p(t2 ))) > solve(p(t2 ))
solve(r (f (t1 ))) > solve((s(t2 ), r (t1 )))
solve((s(t1 ), r (t2 ))) > solve(s(t1 ))
solve((s(t1 ), r (t2 ))) > solve(r (t2 ))
These inequalities imply:
solve(p(t1 )) > solve(p(t2 )) for terms such that solve(q(t1 , t2 )) holds
(8)
solve(r (f (t1 ))) > solve(r (t1 ))
(9)
Recall the construction we applied in the proof of Theorem 2. A new ordering has been
proposed for the atoms of BPE : A ≻ B if solve(A) > solve(B ). Hence, (8) and (9) lead,
in our case, to the following definition of ≻: p(t1 ) ≻ p(t2 ), for terms such that q(t1 , t2 )
holds, and r (f (t1 )) ≻ r (t1 ). One can easily see that ≻ is indeed well-founded and that P
is order-acceptable with respect to {l (t ) | t is a ground term} via this ordering.
✷
5 Double extended meta-interpreters
Typical applications of meta-interpreters require the production of some additional output
or the performance of some additional tasks during the execution, such as constructing
proof trees (essential for debugging and explanation applications) or cutting “unlikely”
branches (required for uncertainty reasoners with cutoff). As we are going to see in the
examples to come, these extensions can and usually will influence termination properties
of the meta-interpreter.
In this section, we still consider definite meta-interpreters, but their clauses, which
still follow the general outline of M0 , are enriched with extra subgoals, providing additional functionality. This class of meta-interpreters expands the class of extended metainterpreters studied by (Martens and De Schreye 1995b). It includes many useful metainterpreters, such as a meta-interpreter which constructs proof trees (Sterling and Shapiro 1994)
and can be used as a basis for explanation facilities in expert system, as well as metainterpreters which allow reasoning about theories and provability (Brogi et al. 1990; Martens and De Schreye 1995a)
or meta-interpreters which implement reasoning with uncertainty (Sterling and Shapiro 1994).
Moreover, this class also describes a depth tracking tracer for Prolog, a reasoner with
threshold cutoff (Sterling and Shapiro 1994) and a pure four port box execution model
tracer (Bowles and Wilk 1989). The methodology presented so far is expanded to analyse
double extended meta-interpreters, and conditions implying termination non-violation and
non-improvement are established.
Definition 10
A definite program of the following form
solve(true, t11 , . . . , t1n ) ← C11 , . . . , C1m1 .
solve((A, B ), t21 , . . . , t2n ) ←
D11 , . . . , D1k1 , solve(A, t31 , . . . , t3n ),
D21 , . . . , D2k2 , solve(B , t41 , . . . , t4n )
On termination of meta-programs
15
C21 , . . . , C2m2 .
solve(A, t51 , . . . , t5n ) ←
D31 , . . . , D3k3 , clause(A, B , s1 , . . . , sk ),
D41 , . . . , D4k4 , solve(B , t61 , . . . , t6n )
C31 , . . . , C3m3 .
together with clauses defining any other predicate occurring in the Ckl and Dpq (none of
which contain solve or clause) is called a double extended meta-interpreter.
The name of this class of the meta-interpreters stems from the fact that they further generalise the class of extended meta-interpreters (Martens and De Schreye 1995a). Extended
meta-interpreters are double extended meta-interpreters, such that for all p and q, Dpq is
true. Note that despite the similarity between the definition and Example 8, Example 8 is
not a double extended meta-interpreter due to the call to predicate clause in the definition
of check. Thus, the results established in this section are not applicable to it.
Example 10
The following program (Bowles and Wilk 1989) shows the pure Prolog tracer for the four
port box execution model of Byrd (Byrd 1980) (in the original paper interp was used instead of solve to denote the meta-predicate; we renamed the predicate for the sake of uniformity).
solve(true) ·
solve((G1, G2)) ← solve(G1), solve(G2) ·
solve(G) ← before(G), clause(G, B ), solve(B ), after(G) ·
(10)
before(G) ← write(′ call′ ), write(G), nl ·
(11)
′
(12)
′
before(G) ← write( fail ), write(G), nl, fail ·
after(G) ← write(′ succeed′ ), write(G), nl ·
after(G) ← write(′ redo′ ), write(G), nl, fail·
This program is a double extended meta-interpreter, since it clearly has the form prescribed
✷
by Definition 10 and neither before nor after is depending on solve or clause.
The next example of a double extended meta-interpreter is motivated by program 17.8
of (Sterling and Shapiro 1994). Intuitively, a proof tree is a convenient way to represent
the proof. The root of the proof tree for an atomic query is the query itself. If a clause
H ← B1 , . . . , Bn has been used to resolve an atomic query A via an mgu θ, there is a
directed edge (represented by ← in the example to come) from a node representing Aθ to
a node corresponding to a query (B1 , . . . , Bn )θ. The proof tree for a conjunctive query is a
collection of proof trees for the individual conjuncts.
Example 11
16
Alexander Serebrenik and Danny De Schreye
The following meta-interpreter constructs a proof tree, while solving a query. Proof trees
are often used both for debugging (Naish 1997) and explanation (Hammond 1984; Arora et al. 1993)
purposes.
solve(true, true).
solve((A, B ), (ProofA, ProofB)) ← solve(A, ProofA), solve(B , ProofB).
solve(A, (A ← Proof)) ← clause(A, B ), solve(B , Proof).
This meta-interpreter is a double extended meta-interpreter (for all k , l , p and q, Ckl = true
and Dpq = true).
✷
The study of double extended meta-interpreters might require different clause encoding
than the encoding considered in the previous section. For example, reasoners with uncertainty might require that a certainty factor is integrated in the encoding. Therefore, we
adjust the definition of the clause encoding as follows:
Definition 11
(cf. Definition 3) Let D be a double extended meta-interpreter, let P be a program. The
clause-encoding ceD (P ) is a collection of facts of a new predicate clause, such that for
every clause H ← B in P there exists a unique atom clause(H , B , s1 , . . . , sk ) ∈ ceD (P )
and for every atom clause(H , B , s1 , . . . , sk ) ∈ ceD (P ) there exists a clause H ← B in P .
In the remainder of the section, we discuss non-violation of LD-termination and nonimproving of LD-termination.
5.1 Non-violating LD-termination
We start with a discussion of non-violation of LD-termination. Before proving this formally, we reconsider Example 11 and apply to it the designed methodology. The treatment
is done on the intuitive level. A more formal discussion is postponed until Example 14.
Example 12
Example 11, continued. In order to prove that the meta-interpreter does not violate LDtermination, we have to show that for any definite program P , and for any query Q terminating with respect to P , solve(Q , u) terminates with respect to D ∪ ceD (P ) for any term
u, where D is the double extended meta-interpreter that constructs proof-trees.
Given that Q terminates with respect to P , solve(Q ) terminates with respect to M0 ∪
ce(P ) and there exists a quasi-ordering ≥ such that M0 ∪ ce(P ) is order-acceptable with
E
defined as follows for
respect to solve(Q ) via ≥. Let be a quasi-ordering on BD
∪ceD (P )
any atom a and any terms s, t , u1 and u2 :
• solve(s, u1 ) ≻ solve(t , u2 ) if solve(s) > solve(t )
• solve(s, u1 ) ≻ a if rel(a) 6= solve
• a a
Next, we have to show that D ∪ ceD (P ) is order-acceptable with respect to solve(Q , u)
via . This claim is intuitively clear since is defined to ignore the extra argument of
solve, and if this argument is dropped from the clauses of D , M0 is obtained.
✷
In order to formalise the intuition presented in Example 12 we need to prove a number of
auxiliary statements. First of all, observe that double extended meta-interpreters are sound.
On termination of meta-programs
17
Lemma 2
Let D be a double extended meta-interpreter. Then, D is sound.
Proof
In order to prove the lemma, we use the s-semantics approach presented in (Bossi et al. 1994).
The semantics is recalled and the formal proof of the lemma is presented in Appendix B.
As the following example demonstrates, unlike the “vanilla” meta-interpreter M0 , double extended meta-interpreters do not necessarily preserve the set of calls. However, one
can show that there is a certain correspondence between the calls obtained with respect to
a double extended meta-interpreter D and the “vanilla” meta-interpreter M0 . Recall that
Lemma 1 established that M0 preserves the calls set.
Example 13
Let D be the following double extended meta-interpreter and let P be the program of
Example 4.
solve(true).
solve((A, B )) ← solve(A), solve(B ).
solve(A) ← clause(A, B ), B = q(f (Z )), solve(B ).
The set of calls of D ∪ ceD (P ) and solve(p(X )) is
{solve(p(X )), solve(q(f (Z )), clause(p(X ), q(X ))}.
The set of calls for M0 ∪ ce(P ) and solve(p(X )) is
{solve(p(X )), solve(q(X )), solve(true), clause(p(X ), q(X )), clause(q(b), true)}.
There is no call in Call(M0 ∪ ce(P ), solve(p(X ))) that is a variant of solve(q(f (Z )). However, there is a call solve(q(X )) in Call(M0 ∪ ce(P ), solve(p(X ))) such that solve(q(f (Z ))
is its instance.
✷
In Example 13 a correspondence was established between the sets of calls obtained
with respect to D and those obtained with respect to M0 . Lemma 3 proves that such a
correspondence can always be established for double extended meta-interpreters. Observe
that, in general, not every sound meta-interpreter has this property (Example 8).
Lemma 3
Let D be a double extended meta-interpreter. Let P be an interpreted program, Q0 be an
interpreted query and let u1 , . . . , un be a sequence of terms. Then, for every call solve(Q , t1 ,
. . . , tn ) in Call(D ∪ ceD (P ), solve(Q0 , u1 , . . . , un )) there exists a call solve(G) in Call(M0 ∪
ce(P ), Q0 ) such that Q is an instance of G.
Proof
The proof is similar to the proof of Lemma 1 and can be found in Appendix B.
Now we are ready to prove that double extended meta-interpreters do not violate termination. Before presenting the result formally we need to introduce the following auxiliary
definition.
18
Alexander Serebrenik and Danny De Schreye
Definition 12
Let P be a definite program and let Q be an atomic query, such that P is order-acceptable
with respect to {Q } via a quasi-ordering ≥. The quasi-ordering ≥ is called minimal if
there exists no quasi-ordering ≥1 such that P is order-acceptable with respect to {Q } via
≥1 and ≥1 ⊂≥.
First of all, we need to show the existence of a minimal ordering.
Lemma 4
Let P be a definite program and let Q be an atomic query. If P is order-acceptable with
respect to {Q }, there exists a minimal quasi-ordering ≥ such that P is order-acceptable
with respect to {Q } via ≥.
Proof
Let O be the set of all quasi-orderings such that P is order-acceptable with respect to {Q }
via them. Since P is order-acceptable with respect to {Q }, O is not empty. Hence we
define a new quasi-ordering on Call(P , Q ) as following:
A B
if
A is identical to B
A≻B
if
A > B for all ≥∈ O
It is straightforward to check that is again a quasi-ordering. We are going to show
that P is order-acceptable with respect to {Q } via , i.e., that ∈ O . Indeed, let A
be in Call(P , Q ), A′ ← B1 , . . . , Bn be a clause such that mgu(A, A′ ) = θ exists, Bi a
body subgoal such that rel(A) = rel(Bi ) and σ be a computed answer substitution for
← (B1 , . . . , Bi −1 )θ. Then, order-acceptability of P with respect to {Q } via the quasiorderings in O implies that for any ≥∈ O , A > Bi θσ. By definition of ≻, it holds that
A ≻ Bi θσ. Hence, P is order-acceptable with respect to {Q } via .
The construction of above also implies immediately that this quasi-ordering is minimal.
Intuitively, minimal quasi-orderings contain decreases that are essential for proving
order-acceptability, and only these decreases. To prove the statement formally we need
the following notions introduced by Verschaetse in (Verschaetse 1992).
Definition 13
• Let Q0 , Q1 , Q2 , . . . , θ1 , θ2 , . . . be a derivation with selected atoms A0 , A1 , A2 , . . . and
applied renamed clauses H i ← B1i , . . . , Bni i (i = 1, 2, . . .). We say that Ak is a direct
descendant of Ai , if k > i and Ak is the atom Bji +1 θi +1 . . . θk , (1 ≤ j ≤ ni +1 ).
• Let Q0 , Q1 , Q2 , . . . , θ1 , θ2 , . . . be a derivation with selected atoms A0 , A1 , A2 , . . ..
A subsequence of derivation steps, Qi (0) , Qi (1) , . . . , θi (0)+1 , . . . with selected atoms
Ai (0) , Ai (1) , Ai (2) , . . . is directed, if for each k (k > 1), Ai (k ) is a direct descendant
of Ai (k −1) in the given derivation. A derivation Q0 , Q1 , Q2 , . . . , θ1 , θ2 , . . . is directed
if it is its own directed subsequence.
Verschaetse (Verschaetse 1992) also proved the following lemma:
On termination of meta-programs
19
Lemma 5
Let P be a definite program and A be an atomic query. If P and A have an infinite derivation, then they have an infinite directed derivation.
Now we are ready to prove the statement of Lemma 6 formally.
Lemma 6
Let P be a program and Q be a query. Let ≥ be a minimal quasi-ordering such that P is
order-acceptable with respect to {Q } via it. Then, for all A and B in Call(P , Q ), if A > B
then there exists a directed derivation Q0 , . . . , Qn with selected atoms A0 , . . . , An , such that
A0 = A, An = B and for all 0 ≤ i < n, Ai > Ai +1 .
Proof
For the sake of contradiction assume that there exist A and B such that A > B and no
directed derivation exists as required. We are going define a new quasi-ordering on
Call(P , Q ) that will contradict the minimality of ≥.
Let K ≻ M be defined as a transitive closure of the following relation: “K > M and M
is a direct descendant of K ”. Let K M if and only if K is identical to M .
By definition of the notion of a direct descendant (Definition 13) and order-acceptability
of P with respect to {Q } via ≥, it follows that P is order-acceptable with respect to {Q }
via . Moreover, it is clear that ⊆ ≥. To complete the proof we show that A 6≻ B .
For the sake of contradiction assume that A ≻ B . Then, since ≻ is defined as a transitive
closure, there exists a sequence of atoms A0 , . . . , An such that Ai > Ai +1 and Ai +1 is a
direct descendant of Ai for all 0 ≤ i < n. Since Ai ∈ Call(P , Q ), Ai is a selected atom
of some query Qi . Thus, we have found a directed derivation Q0 , . . . , Qn as described by
the lemma for A and B . Therefore, our assumption was wrong and A 6≻ B . Hence, ⊂ ≥,
that contradicts the minimality of ≥.
Finally, we can prove the main result of this section, namely, that double extended metainterpreters do not violate termination (under certain extra conditions). Since the proof is
long and technical only the general out-line is presented. Technical details can be found
in Appendix B.
Theorem 3
E
,
Let P be an interpreted program, D a double extended meta-interpreter, and Q ∈ BD
∪ceD (P )
such that Q is terminating with respect to P . Let u1 , . . . , un be a sequence of terms such
that {A | A ∈ Call(D ∪ ceD (P ), solve(Q , u1 , . . . , un )), solve 6= rel(A)} is terminating with
respect to D . Then solve(Q , u1 , . . . , un ) terminates with respect to D ∪ ceD (P ).
Proof (sketch)
Let M0 be the “vanilla” meta-interpreter. One can show that M0 ∪ ce(P ) is order-acceptable
with respect to S = {Aη | A ∈ Call(M0 ∪ ce(P ), solve(Q )), η is a substitution}. Let ≥1 be
a minimal well-founded quasi-ordering, such that M0 ∪ ce(P ) is order-acceptable with
respect to S via it. Similarly, let ≥2 be a well-founded quasi-ordering such that D is
order-acceptable with respect to {A | A ∈ Call(D ∪ ceD (P ), solve(Q , u1 , . . . , un )), solve 6=
rel(A)} via ≥2 .
We have to show that there exists a well-founded quasi-ordering such that D ∪ ceD (P )
20
Alexander Serebrenik and Danny De Schreye
is order-acceptable with respect to {solve(Q , u1 , . . . , un )} via . By Theorem 1 this will
imply termination.
E
as follows for any terms t1 , t2 , t11 , . . . , tn1 , t12 , . . . , tn2 and
Let be defined on BD
∪ceD (P )
any atoms a1 , a2 :
1. solve(t1 , t11 , . . . , tn1 ) ≻ solve(t2 , t12 , . . . , tn2 ), if there is a term t , such that solve(t1 ) >1
solve(t ) and t2 = t θ for some substitution θ;
2. a1 ≻ a2 , if rel(a1 ) 6= solve, rel(a2 ) 6= solve and a1 >2 a2 ;
3. solve(t1 , t11 , . . . , tn1 ) ≻ a1 , if rel(a1 ) 6= solve;
4. a1 a2 , if a1 and a2 are identical.
First we show that ≻ is an ordering and that this ordering is well-founded. To this end we
make use of the minimality of >1 and of the Lifting Theorem (Theorem 3.22 (Apt 1997)).
Next we prove that D ∪ ceD (P ) is order-acceptable with respect to solve(Q , u1 , . . . , un ).
Let A0 ∈ Call(D ∪ ceD (P ), solve(Q , u1 , . . . , un )). If rel(A0 ) 6= solve the desired decrease
follows from the order-acceptability of D with respect to {A | A ∈ Call(D ∪ ceD (P ),
solve(Q , u1 , . . . , un )), solve 6= rel(A)} via >2 . If rel(A0 ) = solve each clause defining
solve has to be considered separately. In each one of the cases we show that if all arguments but the first one are dropped from A0 the resulting atom belongs to S and hence
order-acceptability via ≥1 can be used. Next we make use of Lemma 3 and complete the
proof by reasoning on the substitutions involved.
This theorem provides an important theoretical result, namely, that double extended
meta-interpreters do not violate termination if the interpreter terminates with respect to
a set of calls to predicates different from solve and generated by the meta-program and the
meta-query.
Example 14
Meta-interpreters presented in Examples 10, 11 and 13 are double extended meta-interpreters. Termination of the calls to predicates different from solve is immediate because
in all the examples these predicates can be completely unfolded, i.e., they do not depend
(directly or indirectly) on recursive predicates. Thus, by Theorem 3 meta-interpreters of
Examples 10, 11 and 13 do not violate termination.
The quasi-ordering derived by Theorem 3 for Example 11 has been discussed in Example 12.
✷
In general, to ensure that given a program P a double extended meta-interpreter D terminates with respect to {A | A ∈ Call(D ∪ ceD (P ), solve(Q , u1 , . . . , un )), solve 6= rel(A)}
one can require D to terminate for all calls to predicates different from solve. To verify the
latter condition one can use the notion of order-acceptability (Theorem 1).
5.2 Non-improving LD-termination
In this section we are going to study the opposite direction of the implication, namely,
given that a meta-program D ∪ ceD (P ) terminates with respect to solve(Q , u1 , . . . , un ) we
would like to prove that
• the meta-interpreter D terminates with respect to {A | A ∈ Call(D ∪ ceD (P ),
solve(Q , u1 , . . . , un )), solve 6= rel(A)}
On termination of meta-programs
21
• the interpreted program P terminates with respect to the interpreted query Q
To prove the first statement, observe that {A | A ∈ Call(D ∪ ceD (P ), solve(Q , u1 , . . . , un )),
solve 6= rel(A)} is a subset of Call(D ∪ ceD (P ), solve(Q , u1 , . . . , un )). Since D ∪ ceD (P )
terminates with respect to the latter set, it terminates with respect to the former set as well.
This implies that any subset of D ∪ ceD (P ) terminates with respect to the same set of
queries.
For general double extended meta-interpreter the second statement we would like to
prove, i.e., “if the meta-program terminates then the interpreted program terminates as
well” does not necessarily hold. Indeed, one can find many double extended meta-interpreters that are designed to improve termination. However, we are interested in termination non-improvement and would like to establish conditions that ensure it. Given a nonterminating interpreted program, termination of a meta-program can result from one of the
following problems:
• failure while unifying a call and a clause head.
Example 15
Indeed, consider the following meta-interpreter D :
solve(true, a).
solve((A, B ), a) ← solve(A, a), solve(B , a).
solve(A, a) ← clause(A, B ), solve(B , a).
Let P be an interpreted program, such that Q does not terminate with respect to it.
✷
However, solve(Q , b) terminates with respect to D ∪ ceD (P ).
To eliminate this problem we require that, for every call, the unification success or
failure with the head of the clause depends only on their first arguments. In general,
predicting success of the unification during the execution is known to be an undecidable problem. However, sufficient conditions ensuring unification success can be
proposed.
• failure of intermediate body subgoals.
Example 16
Indeed, consider the following meta-interpreter D :
solve(true).
solve((A, B )) ← solve(A), solve(B ).
solve(A) ← fail, clause(A, B ), solve(B ).
Let P be an interpreted program, such that Q does not terminate with respect to it.
✷
However, solve(Q ) terminates with respect to D ∪ ceD (P ).
To solve this problem, one has to guarantee non-failure of the intermediate body
subgoals. The general problem of non-failure analysis is well-known to be undecidable (Debray et al. 1997). Fortunately, the problem is decidable for a restricted class
of problems (Debray et al. 1997). For the specific meta-interpreters we consider, failure of the corresponding intermediate body subgoals turns out to be decidable.
It should also be noted that failure of the body atoms to the right of the last recursive
call may influence termination as well.
22
Alexander Serebrenik and Danny De Schreye
Example 17
solve(true) ← fail.
solve((A, B )) ← solve(A), solve(B ).
solve(A) ← clause(A, B ), solve(B ).
Let P be the following interpreted program:
r ← p, r .
p.
Clearly, the query r does not terminate with respect to P . However, solve(r ) terminates with respect to D ∪ ceD (P ).
✷
Therefore, non-failure is required also for these subgoals.
• different call sets. In principle, even if no failure occurs during the execution, D can
change the call set, as the following example illustrates:
Example 18
solve(true).
solve((A, B )) ← A = p(0), solve(A), solve(B ).
solve(A) ← clause(A, B ), solve(B ).
Let P be the following program:
q ← p(X ), r .
p(f (X )) ← p(X ).
p(0).
r.
The termination behaviour of q with respect to P differs from the termination behaviour of solve(q) with respect to D ∪ ce(P ). The former computation does not
terminate, while the latter terminates. The reason for this is that D changes the set of
calls, due to the unification A = p(0) in the body of the second clause. Indeed, the
call set of P with respect to {q} contains p(f (X )), while the call set of D ∪ ce(P )
with respect to solve(q) does not contain the corresponding atom solve(p(f (X ))).
✷
Similar problem occurs in Example 13. To solve this problem one has to ensure that
meta-variables are not affected by the intermediate body atoms.
We summarise the discussion above in the following definition.
On termination of meta-programs
23
Definition 14
Let D be the following double extended meta-interpreter:
solve(true, t11 , . . . , t1n ) ← C11 , . . . , C1m1 .
solve((A, B ), t21 , . . . , t2n ) ←
D11 , . . . , D1k1 , solve(A, t31 , . . . , t3n ),
D21 , . . . , D2k2 , solve(B , t41 , . . . , t4n ),
C21 , . . . , C2m2 .
solve(A, t51 , . . . , t5n ) ←
D31 , . . . , D3k3 , clause(A, B , s1 , . . . , sk ),
D41 , . . . , D4k4 , solve(B , t61 , . . . , t6n ),
C31 , . . . , C3m3 .
(together with the clauses defining Ckl and Dpq ), such that
• for any computed answer of the preceding atoms,
— either the corresponding instances of (t31 , . . . , t3n ), (t41 , . . . , t4n ), (t61 , . . . , t6n ),
and (s1 , . . . , sk ) are linear sequences of free variables,
— or (t11 , . . . , t1n ), (t21 , . . . , t2n ), (t51 , . . . , t5n ), are linear sequences of free variables and for every program P and for every clause(s, t , t1 , . . . , tk ) ∈ ceD (P ),
t1 , . . . , tk is a linear sequence of free variables;
• D11 , . . . , D1k1 , D21 , . . . , D2k2 , D31 , . . . , D3k3 , D41 , . . . , D4k4 , C11 , . . . , C1m1 , C21 , . . . ,
C2m2 , and C31 , . . . , C3m3 do not fail for the corresponding calls (independently on
the values of the meta-variables), i.e., for all P , for all Q and for all t1 , . . . , tn , calls
to Ckl and Dpq in Call(D ∪ ceD (P ), solve(Q , t1 , . . . , tn ) do not fail;
• for any instance (Di 1 , . . . , Diki )θ of Di 1 , . . . , Diki and for any computed answer substitution σ for (Di 1 , . . . , Diki )θ, Aθσ is identical to Aθ and B θσ is identical to B θ.
Then D is called restricted.
It should be noted that Definition 14 is not syntactical. However, syntactical conditions
implying it can be proposed. We postpone discussing them until after we formulate the
termination non-violation theorem (Theorem 4).
We also introduce a notion of a restricted query, corresponding to Definition 14.
Definition 15
Given a restricted double extended meta-interpreter D and a query solve(Q , v1 , . . . , vn ),
the query is called restricted if:
• either (v1 , . . . , vn ) ∈ Varsn ,
• or (t11 , . . . , t1n ), (t21 , . . . , t2n ), (t51 , . . . , t5n ) ∈ Varsn .
Example 19
Recall the meta-interpreter that constructs proof-trees we considered in Example 11. Note
that this meta-interpreter is restricted. Observe that t11 is true, i.e., t11 6∈ Varsn . Thus, for a
query solve(Q , u) to be restricted, u should be in Vars1 , i.e., u should be a free variable. ✷
First of all, we are going to see that the condition imposed on the arguments of the head
(or recursive body subgoals) ensures the requirement stated after Example 15.
24
Alexander Serebrenik and Danny De Schreye
Lemma 7
Let D be a restricted double extended meta-interpreter, P be an interpreted program, Q0 be
an interpreted query and (v1 , . . . , vn ) a sequence of terms such that solve(Q0 , v1 , . . . , vn ) is
restricted. Then, for any call solve(Q , u1 , . . . , un ) ∈ Call(D ∪ ceD (P ), solve(Q0 , v1 , . . . , vn ))
and for any solve(H , t1 , . . . , tn ) ← B1 , . . . , Bk in D , u1 , . . . , un is unifiable with t1 , . . . , tn .
Proof
We distinguish between two cases.
If (t11 , . . . , t1n ) 6∈ Varsn , then, (v1 , . . . , vn ) ∈ Varsn . Hence, the unification step succeeds
and if θ is the mgu, then (t11 , . . . , t1n )θ = (t11 , . . . , t1n ). The first condition in Definition 14
implies that for any computed answer of the preceding atoms, the corresponding instances
of (t31 , . . . , t3n ), (t41 , . . . , t4n ), (t61 , . . . , t6n ), and (s1 , . . . , sk ) are linear sequences of free
variables. Thus, for any call solve(Q , u1 , . . . , un ) ∈ Call(D ∪ ceD (P ), solve(Q0 , v1 , . . . , vn )),
u1 , . . . , un is a linear sequence of free variables. Therefore, for any sequence of terms
t1 , . . . , tn , the sequence u1 , . . . , un can be unified with t1 , . . . , tn .
If (t11 , . . . , t1n ) ∈ Varsn , then the second subcase of the first condition in Definition 14
holds, i.e., (t21 , . . . , t2n ), (t51 , . . . , t5n ) ∈ Varsn as well. Recall, that solve(H , t1 , . . . , tn ) ←
B1 , . . . , Bk a clause in D . Thus, t1 , . . . , tn is one of the (t11 , . . . , t1n ), (t21 , . . . , t2n ), (t51 , . . . ,
t5n ). In other words, (t1 , . . . , tn ) is a linear sequence of free variables. Therefore, for any
sequence of atoms (u1 , . . . , un ), (t1 , . . . , tn ) is unifiable with it.
The remainder of the section is dedicated to the proof that restricted double extended
meta-interpreters do not improve termination. In order to provide some intuition how the
actual proof will proceed we recall Example 11 and show that it does not improve termination. The treatment is done on the intuitive level. More precise discussion of this example
can be found in Example 22.
Example 20
Example 11, continued. In order to prove that this meta-interpreter does not improve LDtermination, we have to show that for any definite program P , and for any query Q if
a restricted query solve(Q , u) terminates with respect to D ∪ ceD (P ), then Q terminates
with respect to P . Observe that the requirement that solve(Q , u) should be restricted means
that u should be a free variable (Example 19).
Given that solve(Q , u) terminates with respect to D ∪ ceD (P ) there exists a quasiordering ≥ such that D ∪ ceD (P ) is order-acceptable with respect to solve(Q , u) via ≥. Let
E
defined as follows: for any atom a, it holds that a
be a quasi-ordering on BM
0 ∪ce(P )
a, and for any terms s, t , u1 and u2 , if solve(s, u1 ) > solve(t , u2 ) then solve(s) ≻ solve(t ).
Next, one has to show that is a well-founded quasi-ordering and that M0 ∪ ce(P ) is
order-acceptable with respect to solve(Q ). Since D is restricted, termination cannot be
enforced by the information contained in the second argument of solve. Hence, both wellfoundedness and order-acceptability follow from the corresponding properties of ≥.
✷
In order to prove that restricted double extended meta-interpreters do not improve termination, we would like to show the completeness result for this class of meta-interpreters.
However, as the following example illustrates, completeness does not necessarily hold.
On termination of meta-programs
25
Example 21
Consider the following restricted double extended meta-interpreter.
solve(true, X ).
solve((A, B ), X ) ← solve(A, Y ), solve(B , Z ).
solve(A, X ) ← p, clause(A, B ), solve(B , Y ).
p ← p.
This meta-interpreter is not complete due to its non-termination.
✷
Therefore, we prove a more restricted result that will be sufficient for showing termination non-improvement.
Lemma 8
Let D be a restricted double extended meta-interpreter, P be an interpreted program, Q be
an interpreted query and (v1 , . . . , vn ) be terms, such that solve(Q , v1 , . . . , vn ) is restricted,
and D ∪ ceD (P ) terminates with respect to {A | A ∈ Call(D ∪ ceD (P ), solve(Q , v1 , . . . , vn )), solve 6=
rel(A)}. Then, for every computed answer t for Q obtained with respect to P , there exists a
computed answer solve(t ′ , t1 , . . . , tn ) for solve(Q , v1 , . . . , vn ) with respect to D ∪ ceD (P ),
such that t is a variant of t ′ .
Proof
The proof, analogous to Lemma 2, can be found in Appendix C.
Lemma 8 implies that there is a one-to-one correspondence between the calls to solve
obtained with respect to D and those obtained with respect to M0 . More formally, there is a
call solve(Q ) in Call(M0 ∪ ce(P ), solve(Q0 )) if and only if, there is a call solve(Q ′ , u1 , . . . ,
un ) in the set Call(D ∪ ceD (P ), solve(Q0 , v1 , . . . , vn )), such that Q and Q ′ are variants.
Indeed, if there are no intermediate calls to solve, the claim follows from Definition 14.
Otherwise, it follows from the preceding Lemma 8.
Now we are ready to prove that restricted meta-interpreters preserve termination. Similarly to Theorem 3 only a proof sketch is included, technical details can be found in Appendix C.
Theorem 4
Let D be a restricted double extended meta-interpreter. Let P be an interpreted program
and let Q be an interpreted query, such that D ∪ ceD (P ) LD-terminates for solve(Q , v1 , . . . ,
vn ), where (v1 , . . . , vn ) are terms such that solve(Q , v1 , . . . , vn ) is restricted. Then, P LDterminates with respect to Q .
Proof (sketch)
In order to show that P LD-terminates for Q it is sufficient to prove that M0 ∪ ce(P ) LDterminates with respect to solve(Q ). Then, by Theorem 2 P LD-terminates with respect to
Q . Thus, we aim to establish order-acceptability of M0 ∪ ce(P ) with respect to solve(Q ).
E
. Since D ∪ ceD (P ) LD-terminates for
First of all, we define a relationship on BM
0 ∪ce(P )
solve(Q , v1 , . . . , vn ), D ∪ ceD (P ) is order-acceptable with respect to solve(Q , v1 , . . . , vn )
via a quasi-ordering. Let a minimal quasi-ordering such that D ∪ ceD (P ) is order-acceptable with respect to solve(Q , v1 , . . . , vn ) via it, be denoted ≥. Then, we define solve(s) ≻
26
Alexander Serebrenik and Danny De Schreye
solve(t ) if there exist solve(s, s1 , . . . , sn ), solve(t , t1 , . . . , tn ) ∈ Call(D ∪ ceD (P ), solve(Q ,
v1 , . . . , vn )) such that solve(s, s1 , . . . , sn ) > solve(t , t1 , . . . , tn ) and solve(s) solve(t )
if solve(s) and solve(t ) are identical.
One can show that ≻ is indeed a well-founded ordering. In order to show that M0 ∪ ce(P )
is order-acceptable with respect to solve(Q ) via we make use of Lemmata 7 and 8, and
of Definition 14.
Example 22
Example 10, continued. The meta-interpreter is restricted and Theorem 4 ensures that it
preserves termination. However, if the clause (11) would have been removed, the metainterpreter would no longer be restricted. Indeed, the call to before would fail, violating the
second requirement of Definition 14. Thus, Theorem 4 would not have been applicable. It
should be noted that indeed, this meta-interpreter improves termination.
✷
The following example illustrates that the fact that D is restricted is sufficient but not
necessary for LD-termination of a restricted query solve(Q , v1 , . . . , vn ) with respect to D ∪
ceD (P ) to imply LD-termination of Q with respect to P .
Example 23
Let D be the following meta-interpreter.
solve(true).
solve((A, B )) ← fail, solve(A), solve(B ).
solve(A) ← loop, clause(A, B ), solve(B ).
loop ← loop.
This meta-interpreter is double extended, but it is not restricted since one of the intermediate body atoms fails. Observe that D does not improve termination. Indeed, for any
program P and for any query Q the restricted query solve(Q ) does not terminate with
respect to D ∪ ceD (P ). Thus, the following implication is trivially true: “if solve(Q ) LDterminates with respect to D ∪ ceD (P ) then Q LD-terminates with respect to P ”.
✷
To conclude this section we discuss syntactical conditions that can be used to ensure
that a double extended meta-interpreter is restricted. The first condition of Definition 14 requires certain sequences of arguments to be linear sequences of variables for any computed
answer of the preceding atoms. Recall that we made a distinction between two possibilities:
• either the corresponding instances of (t31 , . . . , t3n ), (t41 , . . . , t4n ), (t61 , . . . , t6n ), and
(s1 , . . . , sk ) are linear sequences of free variables. To ensure this we require that
(t31 , . . . , t3n ), (t41 , . . . , t4n ), (t61 , . . . , t6n ), and (s1 , . . . , sk ) are linear sequences of
free variables and that none of these variables appear in the preceding subgoals.
• or (t11 , . . . , t1n ), (t21 , . . . , t2n ), (t51 , . . . , t5n ), are linear sequences of free variables
and for every program P and for every clause(s, t , t1 , . . . , tk ) ∈ ceD (P ), t1 , . . . , tk is
a linear sequence of free variables. Observe that the sequences of arguments appear
in heads of the clauses in this case. Thus, there are no preceding atoms. In other
words, if the condition holds on the syntactic level, then it trivially holds for any
computed answer of the preceding atoms.
On termination of meta-programs
27
In order to ensure the remaining conditions we require every atom a among Ckl and Dpq
to satisfy one of the following (A and B denote the meta-variables of the clauses):
1.
2.
3.
4.
a
a
a
a
is true
is u = f (u1 , . . . , un ) and u is a fresh variable and A, B 6∈ Var(f (u1 , . . . , un ));
is a call to a built-in predicate p and p is either write or nl;
is p(u1 , . . . , un ) for a user-defined predicate p, p cannot fail.
The latter condition can be safely approximated by compiler by means of determinism
analysis (cf. (Henderson et al. 1996)).
These requirements may seem to be very restrictive. However, they are satisfied by the
majority of the meta-interpreters considered including a meta-interpreter that constructs
proof trees presented in Example 11, as well as a reasoner with uncertainty (Sterling and Shapiro 1994),
and meta-interpreters allowing to reason about theories and provability (Brogi et al. 1990;
Martens and De Schreye 1995a). However, as the following example illustrates, not every
restricted meta-interpreter satisfies these conditions.
Example 24
Consider the following variant of the meta-interpreter that constructs proof trees (cf. 11).
solve(true, true).
solve((A, B ), (ProofA, ProofB)) ← solve(A, ProofA), solve(B , ProofB).
solve(A, (A ← Proof)) ← clause(A, B ), foo(Proof), solve(B , Proof).
foo( ).
This meta-interpreter is a restricted double extended meta-interpreter. However, the syntactic conditions specified above do not hold, since Proof appears in the preceding subgoal
of foo.
✷
6 Extending the language of the interpreted programs
So far we have considered only definite programs. However, in order to make our approach
practical, the language of the underlying interpreted programs should be extended to include negation, frequently appearing in applications of the meta-interpreters.
As earlier, in order to prove that meta-interpreters with negation preserve termination, we
use among others a termination analysis framework based on order-acceptability. By using
this result and applying the same methodology as above one can prove that the following meta-interpreter M4 , being an immediate extension of the “vanilla” meta-interpreter
to normal programs (Hill and Gallagher 1998), preserves LDNF-termination. By LDNFtermination we understand finiteness of the LDNF-forest. Soundness and completeness of
M4 are proved in Theorem 2.3.3 (Hill and Lloyd 1989).
solve(true).
solve((Atom, Atoms)) ← solve(Atom), solve(Atoms).
solve(¬Atom) ← ¬solve(Atom).
solve(Head) ← clause(Head, Body), solve(Body).
28
Alexander Serebrenik and Danny De Schreye
Theorem 5
Let P be a normal program, S be a set of queries. Then P LDNF-terminates with respect
to S if and only if M4 ∪ ce(P ) LDNF-terminates with respect to {solve(Q ) | Q ∈ S }.
Proof
Mimicking the proof of Theorem 2 and the result of Pedreschi and Ruggieri (Pedreschi and Ruggieri 1997).
First, for each one of the LDNF-trees, calls and semantics are preserved by the corresponding results for definite programs. Second, given the definition of an LDNF-forest, if ¬A is
discovered, the new tree with A as a root is started. Observe that ¬solve(A) is ground if
and only if A is ground. Thus, the derivation obtained with respect to M4 ∪ ce(P ) flounders
if and only if the derivation obtained with respect to P does.
Theorem 5 allows us to consider termination of different kinds of meta-interpreters,
namely, those using the ground representation of interpreted programs (Bowen and Kowalski 1982;
Hill and Lloyd 1994; Hill and Gallagher 1998). This idea can be traced back to Gödel, who
suggested a one-to-one mapping, called Gödel numbering, of expressions in a first order language to natural numbers (Gödel 1931). The idea of numbering is a key idea of
ground representation. Intuitively, we number predicates p(0), p(1), p(2), . . ., then functors f (0), f (1), f (2), . . ., constants c(0), c(1), c(2), . . . and, finally, variables used in the
program v (0), v (1), v (2), . . . Each one of the sets is finite since the program itself is finite. Atoms are represented as atom(P , L), where P is the encoding of the predicate and
L is the list of the encodings of the arguments. Terms are represented in a similar way as
term(F , L), where F is the encoding of the main functor and L is the list of the encodings of the arguments. To represent a clause, we use and, denoting a conjunction, and if,
standing for an implication.
For example, instead of representing a clause
permute(L, [El |T ]) ← delete(El , L, L1), permute(L1, T ),
as clause(permute(L, [El |T ]), (delete(El , L, L1), permute(L1, T ))) as we used to do, it is
represented as
if(atom(p(0), [v (0), term(f (0), [v (1), term(f (0), [v (2), c(0)])])]),
and(atom(p(1), [v (1), v (0), v (3)]), atom(p(0), [v (3), v (2)]))),
where the following correspondence holds:
predicates p(0)
p(1)
functors
f (0)
constants c(0)
variables v (0)
v (1)
v (2)
v (3)
permute
delete
·/2 also known as cons
[]
L
El
T
L1.
Meta-interpreters using the ground representation can be considered “more pure” than
other meta-interpreters we studied, as the meta language and the language of the interpreted program are strictly separated. However, a number of primitive operations, such as
On termination of meta-programs
29
unification, provided for the non-ground case by the underlying Prolog system, have to be
defined explicitly. Moreover, while the preceding meta-interpreters can be recognised as
such by looking for the built-in predicate clause, recognising a meta-interpreter based on
the ground representation can not be done easily, unless some extra information, such as
type declarations, is provided explicitly.
The following meta-interpreter idemo, inspired by (Kowalski 1990) has been borrowed
from (Hill and Gallagher 1998). Given the ground representation of a normal program and
the ground representation of a query the meta-interpreter returns ground representations of
the computed answers corresponding to the query.
Example 25
Given the ground representation of a program and the ground representation of a query,
predicate idemo proceeds in two steps. First it computes the non-ground version of a query
by calling predicate instance of, i.e., replaces v (i)’s with variables, while recording bindings. Secondly, it calls an alternative version of the meta-interpreter (idemo1) to resolve the
non-ground version of a query with the ground representation of a given program. Observe
how a non-ground instance of clause is computed in the last clause of idemo1.
idemo(P , X , Y ) ←
instance of(X , Y ),
idemo1(P , Y ).
instance of(X , Y ) ←
inst formula(X , Y , [], ).
inst formula(atom(Q , Xs),
idemo1( , true).
atom(Q , Ys), S , S 1) ←
idemo1(P , and(X , Y )) ←
inst args(Xs, Ys, S , S 1).
idemo1(P , X ),
inst formula(and(X , Y ),
idemo1(P , Y ).
and(Z , W ), S , S 2) ←
idemo1(P , not(X )) ←
inst formula(X , Z , S , S 1),
¬idemo1(P , X ).
inst formula(Y , W , S 1, S 2).
idemo1(P , atom(Q , Xs)) ←
inst formula(if(X , Y ),
member(Z , P ),
if(Z , W ), S , S 2) ←
instance of(Z ,
inst formula(X , Z , S , S 1),
if(atom(Q , Xs), B )),
inst formula(Y , W , S 1, S 2).
idemo1(P , B ).
inst formula(not(X ), not(Z ), S , S 1) ←
inst formula(X , Z , S , S 1).
inst term(v (N ), X , [], [bind(N , X )]). inst formula(true, true, S , S ).
inst term(v (N ), X , [bind(N , X )|S ],
inst args([], [], S , S ).
[bind(N , X )|S ]).
inst term(v (N ), X , [bind(M , Y )|S ], inst args([X |Xs], [Y |Ys], S , S 2) ←
inst term(X , Y , S , S 1),
[bind(M , Y )|S 1]) ←
N 6= M ,
inst args(Xs, Ys, S 1, S 2).
inst term(v (N ), X , S , S 1).
inst term(term(F , Xs),
term(F , Ys), S , S 1) ←
inst args(Xs, Ys, S , S 1).
We are interested in proving termination of idemo(p, q, v ), where p is the ground represen-
30
Alexander Serebrenik and Danny De Schreye
tation of a program, q is a ground representation of a query and v is a free variable that will
be bound to the ground representations of computed answers corresponding to the query.
Existing termination techniques, such as (Dershowitz et al. 2001) are powerful enough
to prove termination of idemo1 calls to instance of(t , v ), where t is a term, being a ground
representation of a term, atom or clause, and v is a variable that will be bounded to the
non-ground representation of the same object. However, they are not powerful enough to
analyse correctly this example, both due to imprecise representation of all possible ground
terms (in particular all possible ground representations of programs, by the same abstraction) and due to the nature of idemo1 as a meta-interpreter.
It should be noted that the “troublesome” part of this example is a definition of idemo1.
However, idemo1 is very similar to the meta-interpreter M4 discussed. The only differences
are that the clauses of the interpreted program are stored in the first argument and that a
non-ground instance of a a clause has to be computed before resolving a query with it.
Despite of these differences a theorem analogous to Theorem 5 holds. Hence, termination
of the meta-program is equivalent to termination of the interpreted program.
✷
7 Conclusion
We have presented a methodology for proving termination properties of meta-programs.
It is well-known that termination verification plays a crucial role in meta-programming
(Pfenning and Schuermann 1998). Our main contribution is in providing a technique linking termination behaviour of an interpreted program with a termination behaviour of the
meta-program. We have shown that for a wide variety of meta-interpreters, a relatively simple relation can be defined between the ordering that satisfies the requirements of orderacceptability for an interpreted program and the ordering that satisfies the requirements
of order-acceptability for the meta-interpreter extended by this interpreted program and
a corresponding set of queries. This category of meta-interpreters includes many important ones, such as extended meta-interpreters studied by (Martens and De Schreye 1995b),
meta-interpreter, that constructs proof trees (Sterling and Shapiro 1994), reasoners about
theories and provability (Brogi et al. 1990; Martens and De Schreye 1995a), and reasoners
with uncertainty (Sterling and Shapiro 1994). Moreover, it also describes a depth tracking
tracer for Prolog, a reasoner with threshold cutoff (Sterling and Shapiro 1994), a pure four
port box execution model tracer (Bowles and Wilk 1989) and the idemo meta-interpreter
of (Hill and Gallagher 1998). The relationship established between the orderings allows
termination proofs to be reused, i.e., a termination proof obtained for an interpreted program can be used for showing termination of the meta-program and vice versa. Example 2
demonstrated such a simple relation cannot be established if linear level mappings were
considered instead of general orderings.
Ease of meta-programming is often considered to be one of the advantages of logic programming. From the early days meta-interpreters were developed to implement different
control strategies for Prolog (Gallaire and Lasserre 1982; Beckstein et al. 1996). Furthermore, meta-programming finds a wide variety of applications in such areas as artificial intelligence, compilation, constraints solving, debugging, and program analysis (Codish and Taboch 1999;
Hill and Gallagher 1998; Lamma et al. 1996; Martens and De Schreye 1995b; Sterling and Shapiro 1994).
On termination of meta-programs
31
Meta-interpreters have also been successfully applied to aspect-oriented programming (De Volder and D’Hondt 1999;
Brichau et al. 2002). Recently, Sheard presented a number of challenges in meta-programming (Sheard 2001).
Despite the intensive research on meta-programming inside the logic programming community (Apt and Ben-Eliyahu 1996; Apt and Turini 1995; Levi and Ramundo 1993; Martens and De Schreye 1995b),
termination behaviour of meta-programs has attracted relatively little attention, with Pedreschi and Ruggieri being the only known notable exception. In their work (Pedreschi and Ruggieri 1997),
a generic verification method is used, based on specifying preconditions and postconditions. Unfortunately, their termination results are restricted only to the “vanilla” metainterpreter M0 . It is not immediately obvious how their results can be extended to alternative meta-interpreters, nor if a relationship between termination characterisation of the
interpreted program and the meta-program can be established.
Researchers working on modular termination aim to discover how level mappings required to prove termination of separate modules can be combined to obtain a termination
proof for the entire program (Apt and Pedreschi 1994; Bossi et al. 2002; Pedreschi and Ruggieri 1996;
Verbaeten et al. 2001). Since meta-program can be viewed as a union of a meta-interpreter
and of the clause-encoding of an interpreted program, these results might seem applicable.
However, clause-encoding represents a program as a set of facts. Therefore, for any program P , termination of clause(H , B ) with respect to ce(P ) is trivial and any level-mapping
is sufficient to show termination. Hence, no useful information on termination of P is provided by the level-mapping and termination of the meta-program cannot be established.
Our methodology gains its power from the use of the integrated approach presented
in (De Schreye and Serebrenik 2002), which extends the traditional notion of acceptability
by adding a wide class of orderings that have been studied in the context of the termrewriting systems. Theoretically, this approach has exactly the same power as the classical
level mappings based results, but in practice, quite often a simple ordering is sufficient to
prove termination in an example that would otherwise require the application of a complex
level mapping. Meta-programs provide typical examples of this kind.
The study of termination preservation for general meta-interpreters is an extremely difficult task. We do not believe that termination preservation conditions can be formulated
without assuming any additional information on the meta-interpreter or on the interpreted
programs. Therefore, we have identified a number of important classes of meta-interpreters
and proposed conditions implying termination preservation for each one of the classes.
Some authors (Bruynooghe et al. 1992; Cheng et al. 1989; van Harmelen 1989) have studied a meta-interpreter that uses a list of goals instead of a traditional conjunction of goals.
Study of termination preservation properties of this meta-interpreter is considered as a future work.
The paper by Pedreschi and Ruggieri (Pedreschi and Ruggieri 1997) is, to the best of our
knowledge, the only one to study additional verification properties of the meta-interpreters
such as absence of errors and partial correctness. Their results hint at further research
directions in the context of verification of meta-interpreters.
References
A PT, K. R. 1997. From Logic Programming to Prolog. Prentice-Hall International Series in Computer Science. Prentice Hall.
32
Alexander Serebrenik and Danny De Schreye
A PT, K. R. AND B EN -E LIYAHU , R. 1996. Meta-variables in logic programming, or in praise of
ambivalent syntax. Fundamenta Informaticae 28, 1–2, 23–36.
A PT, K. R. AND P EDRESCHI , D. 1994. Modular termination proofs for logic and pure Prolog
programs. In Advances in Logic Programming Theory, G. Levi, Ed. Oxford University Press,
183–229.
A PT, K. R. AND T URINI , F., Eds. 1995. Meta-Logics and Logic Programming. Logic Programming.
The MIT Press, Cambridge, MA, USA.
A RORA , T., R AMAKRISHNAN , R., ROTH , W. G., S ESHADRI , P., AND S RIVASTAVA , D. 1993. Explaining program execution in deductive systems. In Deductive and Object-Oriented Databases,
Third International Conference, DOOD’93, Phoenix, Arizona, USA, December 6-8, 1993, Proceedings, S. Ceri, K. Tanaka, and S. Tsur, Eds. Lecture Notes in Computer Science, vol. 760.
Springer Verlag, 101–119.
A RTS , T. 1997. Automatically proving termination and innermost normalisation of term rewriting
systems. Ph.D. thesis, Universiteit Utrecht.
B ECKSTEIN , C., S TOLLE , R., AND T OBERMANN , G. 1996. Meta-programming for generalized
Horn clause logic. In Proceedings of the 5th International Workshop on Metaprogramming and
Metareasoning in Logic (META-96), 1996. Bonn, Germany. Bonn, Germany, 27–42.
B OSSI , A. AND C OCCO , N. 1994. Preserving universal temination through unfold/fold. In Algebraic
and Logic Programming, G. Levi and M. Rodrı́guez-Artalejo, Eds. Lecture Notes in Computer
Science, vol. 850. Springer Verlag, 269–286.
B OSSI , A., C OCCO , N., E TALLE , S., AND ROSSI , S. 2002. On modular termination proofs of
general logic programs. Theory and Practice of Logic Programming 2, 3, 263–291.
B OSSI , A., G ABBRIELLI , M., L EVI , G., AND M ARTELLI , M. 1994. The s-semantics approach:
theory and applications. Journal of Logic Programming 19/20, 149–197.
B OWEN , K. A. AND KOWALSKI , R. A. 1982. Amalgamating language and meta-language in logic
programming. In Logic Programming, K. Clark and S.-Å. Tärnlund, Eds. Academic Press, 153–
172.
B OWLES , A. AND W ILK , P. 1989. Tracing requirements for multi-layered meta-programming. In
Meta-Programming in Logic Programming, H. Abramson and M. H. Rogers, Eds. The MIT Press,
Cambridge, MA, USA, 205–216.
B RICHAU , J., M ENS , K., AND D E VOLDER , K. 2002. Building composable aspect-specific languages with logic metaprogramming. In Generative Programming and Component Engineering,
ACM SIGPLAN/SIGSOFT Conference, D. S. Batory, C. Consel, and W. Taha, Eds. Lecture Notes
in Computer Science, vol. 2487. Springer Verlag, 110–127.
B ROGI , A., M ANCARELLA , P., P EDRESCHI , D., AND T URINI , F. 1990. Composition operators for
logic theories. In Proceedings Esprit Symp. on Comp. Logic, J. W. Lloyd, Ed. Springer Verlag,
117–134.
B RUYNOOGHE , M., C ODISH , M., G ENAIM , S., AND VANHOOF, W. 2002. Reuse of results in
termination analysis of typed logic programs. In Static Analysis, 9th International Symposium,
M. V. Hermenegildo and G. Puebla, Eds. Lecture Notes in Computer Science, vol. 2477. Springer
Verlag, 477–492.
B RUYNOOGHE , M., D E S CHREYE , D., AND M ARTENS , B. 1992. A general criterion for avoiding
infinite unfolding during partial deduction. New Generation Computing 11, 1, 47–79.
B UENO , F., G ARC ÍA DE LA BANDA , M. J., AND H ERMENEGILDO , M. V. 1994. Effectiveness
of global analysis in strict independence-based automatic parallelization. In Logic Programming,
Proceedings of the 1994 International Symposium, M. Bruynooghe, Ed. MIT Press, 320–336.
B YRD , L. 1980. Understanding the control flow of Prolog programs. In Proceedings of the Logic
Programming Workshop, S.-Å. Tärnlund, Ed. 127–138.
C HENG , M. H.,
VAN
E MDEN , M. H.,
AND
S TROOPER , P. A. 1989. Complete sets of frontiers in
On termination of meta-programs
33
logic-based program transformation. In Meta-Programming in Logic Programming, H. Abramson
and M. H. Rogers, Eds. The MIT Press, Cambridge, MA, USA, 283–297.
C ODISH , M. AND TABOCH , C. 1999. A semantic basis for termination analysis of logic programs.
Journal of Logic Programming 41, 1, 103–123.
D E S CHREYE , D. AND S EREBRENIK , A. 2002. Acceptability with general orderings. In Computational Logic. Logic Programming and Beyond. Essays in Honour of Robert A. Kowalski, Part I,
A. C. Kakas and F. Sadri, Eds. LNCS, vol. 2407. Springer Verlag, 187–210.
D E S CHREYE , D., V ERSCHAETSE , K., AND B RUYNOOGHE , M. 1992. A framework for analyzing
the termination of definite logic programs with respect to call patterns. In Proceedings of the
International Conference on Fifth Generation Computer Systems., I. Staff, Ed. IOS Press, 481–
488.
D E VOLDER , K. AND D’H ONDT, T. 1999. Aspect-orientated logic meta programming. In MetaLevel Architectures and Reflection, Second International Conference, P. Cointe, Ed. Lecture Notes
in Computer Science, vol. 1616. Springer Verlag, 250–272.
D EBRAY, S. K., L ÓPEZ -G ARC ÍA , P., AND H ERMENEGILDO , M. V. 1997. Non-failure analysis for
logic programs. In Proceedings of the Fourteenth International Conference on Logic Programming, L. Naish, Ed. MIT Press, 63–77.
D ECORTE , S. AND D E S CHREYE , D. 1998. Termination analysis: some practical properties of the
norm and level mapping space. In Proceedings of the 1998 Joint International Conference and
Symposium on Logic Programming, J. Jaffar, Ed. MIT Press, 235–249.
D ECORTE , S., D E S CHREYE , D., AND VANDECASTEELE , H. 1999. Constraint-based termination
analysis of logic programs. ACM TOPLAS 21, 6 (November), 1137–1195.
D ERSHOWITZ , N., L INDENSTRAUSS , N., S AGIV, Y., AND S EREBRENIK , A. 2001. A general
framework for automatic termination analysis of logic programs. Applicable Algebra in Engineering, Communication and Computing 12, 1-2, 117–156.
D ERSHOWITZ , N. AND M ANNA , Z. 1979. Proving termination with multiset orderings. Communications of the ACM (CACM) 22, 8 (August), 465–476.
FALASCHI , M., L EVI , G., PALAMIDESSI , C., AND M ARTELLI , M. 1989. Declarative modeling of
the operational behavior of logic languages. Theoretical Computer Science 69, 3, 289–318.
G ALLAIRE , H. AND L ASSERRE , C. 1982. Metalevel control for logic programs. In Logic Programming, K. L. Clark and S.-Å. Tärnlund, Eds. Academic Press, 153–172.
G ENAIM , S., C ODISH , M., G ALLAGHER , J., AND L AGOON , V. 2002. Combining norms to prove
termination. In Third International Workshop on Verification, Model Checking and Abstract Interpretation, A. Cortesi, Ed. Lecture Notes in Computer Science, vol. 2294. Springer Verlag, 126–
138.
G ÖDEL , K. 1931. Über formal unentscheidbare Sätze der Principia Mathematica und verwandter
Systeme I. Monatshefte für Mathematik und Physik 38, 173–198.
H AMMOND , P. 1984. micro-PROLOG for Expert Systems. In micro-PROLOG: Programming in
Logic, K. L. Clark and F. G. McCabe, Eds. Prentice-Hall International Series in Computer Science.
Prentice-Hall, 294–319.
H ENDERSON , F., S OMOGYI , Z., AND C ONWAY, T. 1996. Determinism analysis in the Mercury
compiler. In Proceedings of the Australian Computer Science Conference. 337–346.
H ILL , P. AND G ALLAGHER , J. P. 1998. Meta-programming in logic programming. In Handbook of
logic in Artificial Intelligence and Logic Programming, D. M. Gabbay, C. Hogger, and J. Robinson, Eds. Clarendon press, 421–498. volume 5. Logic Programming.
H ILL , P. AND L LOYD , J. 1994. The Gödel Programming Language. The MIT Press, Cambridge,
MA, USA.
H ILL , P.
AND
L LOYD , J. W. 1989. Analysis of meta-programs. In Meta-Programming in Logic
34
Alexander Serebrenik and Danny De Schreye
Programming, H. Abramson and M. H. Rogers, Eds. The MIT Press, Cambridge, MA, USA, 23–
52.
JANSSENS , G. AND B RUYNOOGHE , M. 1992. Deriving descriptions of possible values of program
variables by means of abstract interpretation. Journal of Logic Programming 13, 2&3 (July),
205–258.
JANSSENS , G., B RUYNOOGHE , M., AND E NGLEBERT, V. 1994. Abstracting numerical values in
CLP(H, N). In Programming Language Implementation and Logic Programming, 6th International
Symposiumsium, PLILP’94, M. V. Hermenegildo and J. Penjam, Eds. Lecture Notes in Computer
Science, vol. 844. Springer Verlag, 400–414.
Logic for Problem Solving.
North-Holland.
KOWALSKI , R. A. 1979.
http://www-lp.doc.ic.ac.uk/UserPages/staff/rak/rak.html.
Available at
KOWALSKI , R. A. 1990. Problems and promises of computational logic. In Computational Logic,
J. W. Lloyd, Ed. Springer Verlag, 1–36.
L AMMA , E., M ILANO , M., AND M ELLO , P. 1996. Combining solvers in a meta constraint logic
programming architecture. In Frontiers of Combining Systems, F. Baader and K. U. Schulz, Eds.
Applied Logic Series, vol. 3. Kluwer Academic Publishers, 267–283.
L EE , C. S. 2002. Program termination analysis in polynomial time. In Generative Programming
and Component Engineering: ACM SIGPLAN/SIGSOFT Conference, GPCE 2002, D. Batory,
C. Consel, and W. Taha, Eds. Lecture Notes in Computer Science, vol. 2487. ACM, Springer
Verlag, 218–235.
L EVI , G. AND R AMUNDO , D. 1993. A formalization of metaprogramming for real. In Logic
Programming, Proceedings of the 10th International Conferencerence on Logic Programming,
D. S. Warren, Ed. MIT Press, 354–373.
M ARTENS , B. AND D E S CHREYE , D. 1995a. Two semantics for definite meta-programs, using the
non-ground representation. In Meta-Logics and Logic Programming, K. R. Apt and F. Turini, Eds.
The MIT Press, Cambridge, MA, USA, 57–81. ISBN: 0-262-01152-2.
M ARTENS , B. AND D E S CHREYE , D. 1995b. Why untyped nonground metaprogramming is not
(much of) a problem. Journal of Logic Programming 22, 1 (January), 47–99.
M ESNARD , F. AND RUGGIERI , S. 2003. On proving left termination of constraint logic programs.
ACM Transaction on Computational Logic 4, 2, 207–259.
NAISH , L. 1997. A three-valued declarative debugging scheme. In Workshop on Logic Programming
Environments, A. J. Kusalik, M. Ducassé, and U. Neumerkel, Eds. 1–12.
P EDRESCHI , D. AND RUGGIERI , S. 1996. Modular verification of logic programs. Tech. Rep.
TR-96-24, Dipartimento di Informatica, Università di Pisa.
P EDRESCHI , D. AND RUGGIERI , S. 1997. Verification of meta-interpreters. Journal of Logic and
Computation 7, 2 (November), 267–303.
P FENNING , F. AND S CHUERMANN , C. 1998. Twelf user’s guide. Tech. Rep. CMU-CS-98-173,
Department of Computer Science, Carnegie Mellon University. November.
S HEARD , T. 2001. Accomplishments and research challenges in meta-programming. In Semantics,
Applications, and Implementation of Program Generation, Second International Workshop, SAIG
2001, Florence, Italy, September 6, 2001, Proceedings, W. Taha, Ed. Lecture Notes in Computer
Science, vol. 2196. Springer Verlag, 2–44.
S TERLING , L. AND S HAPIRO , E. 1994. The Art of Prolog. The MIT Press, Cambridge, MA, USA.
H ARMELEN , F. 1989. A classification of meta-level architectures. In Meta-Programming in
Logic Programming, H. Abramson and M. H. Rogers, Eds. The MIT Press, Cambridge, MA, USA,
103–122.
VAN
V ERBAETEN , S., S AGONAS , K., AND D E S CHREYE , D. 2001. Termination proofs for logic programs with tabling. ACM Transactions on Computational Logic 2, 1, 57–92.
On termination of meta-programs
35
V ERSCHAETSE , K. 1992. Static termination analysis for definite horn clause programs. Ph.D. thesis,
Department of Computer Science, K.U.Leuven, Leuven, Belgium.
Appendix A “Vanilla” preserves the calls set
In this section we present a formal proof that the “vanilla” meta-interpreter M0 preserves
the set of calls (Lemma 1).
Before presenting the actual proof, we introduce an auxiliary notion of partition. Intuitively, a sequence of sequences (x1,1 , . . . , x1,n1 ), . . . , (xm ,1 , . . . , xm ,nm ) forms a partition of
a sequence (x1 , . . . , xΣni ) if they are exactly the same, except for additional division into
subsequences. More formally,
Definition 16
Let S be a set, and let (x1 , . . . , xk ) be a sequence of elements of this set. Let (x11 , . . . , x1n1 ),
. . . , (xm 1 , . . . , xmnm ) be sequences of elements of S . We say that (x11 , . . . , x1n1 ), . . . , (xm 1 ,
. . . , xmnm ) forms a partition of (x1 , . . . , xk ) if the following holds:
• x1 = x11
• xk = xmnm
• If xl = xij then
xi (j +1)
xl +1 =
x(i +1)1
if j < ni
otherwise
Proposition 1
The following properties hold:
• Let S be a set, (x1 , . . . , xk ) be a sequence of elements of S and let
(x11 , . . . , x1n1 ), . . . , (xm 1 , . . . , xmnm )
form a partition of (x1 , . . . , xk ). Then, for any substitution θ,
(x11 , . . . , x1n1 )θ, . . . , (xm 1 , . . . , xmnm )θ
forms a partition of (x1 , . . . , xk )θ.
• Let S be a set, x1 , . . . , xk and y1 , . . . , yl be sequences of elements of S and let
(x11 , . . . , x1n1 ), . . . , (xm 1 , . . . , xmnm ) and (y11 , . . . , y1p1 ), . . . , (yq 1 , . . . , yqpq ) form a
partition of x1 , . . . , xk and y1 , . . . , yl , respectively. Then,
(x11 , . . . , x1n1 ), . . . , (xm 1 , . . . , xmnm ), (y11 , . . . , y1p1 ), . . . , (yq 1 , . . . , yqpq )
forms a partition of (x1 , . . . , xk , y1 , . . . , yl ).
Proof
Immediately from Definition 16.
36
Alexander Serebrenik and Danny De Schreye
Proof of Lemma 1
In order to prove that the “vanilla” meta-interpreter M0 preserves the calls set we have to
show
{solve(A) | A ∈ Call(P , Q )} ≡ Call(M0 ∪ ce(P ), solve(Q )) ∩ {solve(A) | A ∈ BPE },
where ≡ means equality up to variable renaming.
We prove the set-equality by proving containment in both directions. We start by proving
that the left-hand side set is contained in the right-hand side set and then prove the other
direction.
(⊆) Clearly, Call(P , Q ) ⊆ BPE . Thus, {solve(A) | A ∈ Call(P , Q )} ⊆ {solve(A) | A ∈
E
BP }. To prove the inclusion we need, therefore, to prove that {solve(A) | A ∈ Call(P , Q )}
⊆ Call(M0 ∪ ce(P ), solve(Q )). We show that every element of {solve(A) | A ∈ Call(P ,
Q )} is also an element of Call(M0 ∪ ce(P ), solve(Q )).
Let K ∈ {solve(A) | A ∈ Call(P , Q )}. That is, K = solve(K ′ ) for some K ′ ∈ Call(P ,
Q ). The proof is inductive and based on the derivation of K ′ .
Note that we are going to prove a stronger claim than we actually need: we prove that
for every query A1 , A2 , . . . , Ak in the LD-tree of P and Q , there is a query solve(A0 ),
solve((A21 , . . . , A2n2 )), . . . , solve((Am 1 , . . . , Amnm )) in M0 ∪ ce(P ) and solve(Q ) such
that A0 , (A21 , . . . , A2n2 ), . . . , (Am 1 , . . . , Amnm ) forms a partition of A1 , . . . , Ak up to variable renaming. Observe that this also means that A0 is a variant of A1 .
• Induction base K ′ = Q and K = solve(Q ), implying K ∈ Call(M0 ∪ ce(P ), solve(Q )).
Since Q is an atomic query, the proof is completed.
• Inductive assumption Assume that for some query A1 , . . . , Ak in the LD-tree of P
and Q , there exists a query
solve(A0 ), solve((A21 , . . . , A2n2 )), . . . , solve((Am 1 , . . . , Amnm ))
in the LD-tree of M0 ∪ ce(P ) and solve(Q ), such that
A0 , (A21 , . . . , A2n2 ), . . . , (Am 1 , . . . , Amnm )
forms a partition of A1 , . . . , Ak up to variable renaming. This also implies that A0 is
a variant of A1 .
• Inductive step Let H ← H1 , . . . , Hl be a renamed apart version of a clause in P .
Then, the query (H1 , . . . , Hl , A2 , . . . , Ak )θ, is the LD-resolvent of A1 , . . . , Ak and
H ← H1 , . . . , Hl , where θ = mgu(A1 , H ).
We are going to construct the required query. The only clause in M0 ∪ ce(P ) that
is applicable for solve(A0 ), solve((A21 , . . . , A2n2 )), . . . , solve((Am 1 , . . . , Amnm )) is
solve(Head) ← clause(Head, Body), solve(Body). Thus, the LD-resolvent is
clause(Headτ, Bodyτ), solve(Bodyτ),
solve((A21 , . . . , A2n2 ))τ, . . . , solve((Am 1 , . . . , Amnm ))τ,
where τ = mgu(solve(A0 ), solve(Head)). We denote this resolvent R.
Recall that Head is a variable. Thus, Headτ = A0 τ = A0 . Moreover, Head is the only
variable affected by τ. Therefore, Body = Bodyτ and Aij τ = Aij for all i and j .
Thus, R is
clause(A0 , Body), solve(Body), solve((A21 , . . . , A2n2 )), . . . , solve((Am 1 , . . . , Amnm )).
On termination of meta-programs
37
Let H ′ ←H ′ 1 , . . . , H ′ l be a renamed apart variant of the same clause as H ←H1 , . . . , Hl .
By definition of ce, the atom clause(H ′ , (H ′ 1 , . . . , H ′ l )) is a variant of an element in
ce(P ). Thus, R can be resolved with clause(H ′ , (H ′ 1 , . . . , H ′ l )). Let σ be the most
general unifier of clause(A0 , Body) and of clause(H ′ , (H ′ 1 , . . . , H ′ l ))). The resolvent of R and clause(H ′ , (H ′ 1 , . . . , H ′ l )) is, therefore,
solve((H ′ 1 , . . . , H ′ l )σ), solve((A21 , . . . , A2n2 ))σ, . . . , solve((Am 1 , . . . , Amnm ))σ.
Since Body is a variable, σ is the most general unifier of A0 and H ′ , i.e., σ =
mgu(A0 , H ′ ) ∪ {Body/(H ′ 1 , . . . , H ′ l )σ}. Thus, the following holds:
θ = mgu(A1 , H )
A0 is a variant of A1
H ′ is a variant of H
Amnm is a variant of Ak
Thus, A0 σ, H ′ 1 σ, . . . , H ′ l σ are variants of A1 θ, H1 θ, . . . , Hl θ. Therefore, by Inductive assumption H ′ 1 σ, . . . , H ′ l σ, (A21 , . . . , A2n2 )σ, . . . , (Am 1 , . . . , Amnm )σ forms a
partition of (H1 , . . . , Hl , A2 , . . . , Ak )θ up to variable renaming.
If l = 1 the proof is completed. Otherwise, the main functor of (H ′ 1 , . . . , H ′ l )σ is
comma and the first rule of M0 should be applied. Reasoning as above one can
show that the unification with the head of the rule binds the meta-variables only. The
resolvent is thus,
solve(H ′ 1 σ), solve((H ′ 2 , . . . , H ′ l )σ),
solve((A21 , . . . , A2n2 ))σ, . . . , solve((Am 1 , . . . , Amnm ))σ
Recalling our observation on the relation between σ and θ and applying Inductive
assumption completes the proof.
(⊇) Now we are going to prove the second part of the equality. That is
{solve(A) | A ∈ Call(P , Q )} ⊇
Call(M0 ∪ ce(P ), solve(Q )) ∩ {solve(A) | A ∈ BPE }
Let K ∈ Call(M0 ∪ ce(P ), solve(Q )) ∩ {solve(A) | A ∈ BPE }. Then, K = solve(K ′ )
for some K ′ ∈ BPE . We need to show that K ′ ∈ Call(P , Q ).
As earlier, we are going to prove this claim inductively and, similarly, we prove a
stronger claim than we need. We show that for every query solve(A0 ), solve((A21 , . . . , A2n2 )),
. . . , solve((Am 1 , . . . , Amnm )) in the LD-tree of M0 ∪ ce(P ) and solve(Q ), such that A0
differs from true, there is a query A1 , A2 , . . . , Ak in the LD-tree of P and Q , such that
A0 , (A21 , . . . , A2n2 ), . . . , (Am 1 , . . . , Amnm ) forms a partition of A1 , . . . , Ak . Proving this
will imply the statement we would like to prove, since true 6∈ BPE .
• Induction base If K = solve(Q ), then K ′ = Q , and K ′ ∈ Call(P , Q ). Q is an atomic
query, and it obviously partitions itself.
• Inductive step As above, assume that given a query
solve(A0 ), solve((A21 , . . . , A2n2 )), . . . , solve((Am 1 , . . . , Amnm ))
38
Alexander Serebrenik and Danny De Schreye
in the LD-tree of M0 ∪ ce(P ) and solve(Q ), such that A0 6= true, there exists a query
A1 , A2 , . . . , Ak in the LD-tree of P and Q , such that A0 , (A21 , . . . , A2n2 ), . . . , (Am 1 ,
. . . , Amnm ) forms a partition of A1 , . . . , Ak . In particular, this means that A1 is a
variant of A0 .
Since A0 6= true, there is only one clause in M0 that can be used to resolve solve(A0 ),
solve((A21 , . . . , A2n2 )), . . . , solve((Am 1 , . . . , Amnm )). This clause is solve(Head) ←
clause(Head, Body), solve(Body). The resolvent obtained is
clause(Headτ, Bodyτ), solve(Bodyτ),
solve((A21 , . . . , A2n2 )τ), . . . , solve((Am 1 , . . . , Amnm )τ),
where τ = mgu(solve(A0 ), solve(Head)). Recall that Head is a variable, i.e., Headτ =
A0 τ = A0 and that neither Body nor any of Aij ’s can be instantiated by τ.
Next, the clause-atom of the resolvent has to be unified with a renamed apart variant of one of the facts in the clause encoding of the interpreted program. Let it be
clause(H , (H1 , . . . , Hl )) and let θ be the most general unifier of clause(A0 , Body)
and clause(H , (H1 , . . . , Hl )). In fact, since Body is a variable, θ is mgu(A0 , H ) ∪
{Body/(H1 , . . . , Hl )θ}. Then, the next resolvent is
← solve((H1 , . . . , Hl )θ), solve((A21 , . . . , A2n2 )θ), . . . ,
solve((Am 1 , . . . , Amnm )θ)·
If l > 1 we can apply another rule of M0 and in one step obtain
← solve(H1 θ), solve(H2 θ, . . . , Hl )θ),
solve((A21 , . . . , A2n2 )θ), . . . , solve((Am 1 , . . . , Amnm )θ)·
If H1 θ is true, the proof is completed. Otherwise, we need to show that there exists
a query in the LD-tree of P and Q satisfying the conditions above. We are going to
construct this query. Let H ′ ← H ′ 1 , . . . , H ′ l be a renamed apart variant of the same
clause as represented by an a variant of clause(H , (H1 , . . . , Hl )). Such a clause exists
by definition of ce(P ). Since A1 is a variant of A0 and A0 is unifiable with H (via
θ), A1 is unifiable with H ′ . Moreover, if σ = mgu(A1 , H ′ ), then H ′ 1 θ is a variant of
H1 σ and (H2 θ, . . . , Hl θ) forms a partition of H ′ 2 σ, . . . , H ′ l σ.
The inductive assumption implies that (A21 , . . . , A2n2 ), . . . , (Am 1 , . . . , Amnm ) forms
a partition of A2 , . . . , Ak . Thus, by Proposition 1 (A21 , . . . , A2n2 )θ, . . . , (Am 1 , . . . ,
Amnm )θ forms a partition of A2 σ, . . . , Ak σ.
Therefore, by Proposition 1 H ′ 1 σ, . . . , H ′ l σ, A2 σ, . . . , Ak σ satisfies the condition,
completing the proof.
Appendix B Double extended meta-interpreters do not violate LD-termination
In this section we present the formal proofs of the statements in Section 5.1. The first result
we need to prove is soundness of the double extended meta-interpreters. As mentioned
above, in order to prove the soundness result, we use the s-semantics approach presented
in (Bossi et al. 1994). For the sake of clarity, we present first the relevant results of their
work (notation has been adapted).
On termination of meta-programs
39
Definition 17
(Definition 3.2 (Bossi et al. 1994)) (Computed answer substitutions semantics, s-semantics)
Let P be a definite program.
O (P ) = {A | ∃x1 , . . . , xn ∈ Varsn , ∃σ,
σ
p(x1 , . . . , xn ) 7→P ✷
A = p(x1 , . . . , xn )σ
},
σ
where Q 7→P ✷ denotes the LD-refutation of Q in the program P with computed answer
substitution σ.
Instead of considering Herbrand interpretations, we are going to study π-interpretations,
defined as subsets of BPE . Next, an immediate consequence operator TPπ on π-interpretations
is defined:
Definition 18
(Definition 3.13 (Bossi et al. 1994)) Let P be a definite program and I be a π-interpretation.
TPπ (I ) = {A ∈ BPE | ∃A′ ← B1 , . . . , Bn ∈ P ,
∃ B1′ , . . . , Bn′ variants of atoms in I and renamed apart,
}
∃ θ = mgu((B1 , . . . , Bn ), (B1′ , . . . , Bn′ )) and A = A′ θ
/ to TDπ , TDπ (TDπ (0))
/ to (TDπ )2 , etc.
As usual, we abbreviate TDπ (0)
Example 26
Let D be the meta-interpreter presented in Example 11. Then, the following holds:
TDπ
π 2
= {solve(true, true)}
(TD )
= {solve((true, true), (true, true)), solve(true, true)}
..
.
(TDπ )ω
= {solve(t , t ) | t is a finite sequence of true}
✷
The existence of (TPπ )ω as observed in Example 26 is not a coincidence: one can show
that (TPπ )ω exists and that it is a fixpoint of the computation. Moreover, O (P ) = (TPπ )ω .
Formally, this relationship is given by the following theorem (cf. Theorems 3.14 and
3.21 (Bossi et al. 1994) and (Falaschi et al. 1989)).
Theorem 6
Let P be a positive program. Then (TPπ )ω exists, it is a fixpoint of the computation and
O (P ) = (TPπ )ω .
Using this result, we can show formally that double extended meta-interpreters are
sound.
40
Alexander Serebrenik and Danny De Schreye
Proof of Lemma 2
Let D be a double extended meta-interpreter. Let P be an interpreted program, Q0 be an
interpreted query and let u1 , . . . , un be a sequence of terms. Then we need to show that
for every call solve(Q , t1 , . . . , tn ) in Call(D ∪ ceD (P ), solve(Q0 , u1 , . . . , un )) there exists
a call solve(G) in Call(M0 ∪ ce(P ), Q0 ) such that Q is an instance of G.
Since M0 is known to be sound and complete, we are going to compare computed answers obtained with respect to D with computed answers obtained with respect to M0 .
Let P be an interpreted program, Q be an interpreted query and let u1 , . . . , un be a
sequence of terms. We have to show that for any computed answer solve(t D , t1 , . . . , tn )
for solve(Q , u1 , . . . , un ) (with respect to D ∪ ceD (P )) there exists a computed answer
solve(t M0 ) for solve(Q ) (with respect to M0 ∪ ce(P )), such that t D is an instance of t M0 .
By Theorem 6, instead of reasoning on the computed answers we can apply the T π operator. Formally, we have to show that the following holds:
∀ solve(t D , t1 , . . . , tn ) ∈ (TDπ ∪ceD (P ) )ω
π
∃ solve(t M0 ) ∈ (TM
)ω such that t D is an instance of t M0
0 ∪ce(P )
We prove the claim by induction on the power α of TDπ ∪ceD (P ) .
• If α = 0, then (TDπ ∪ceD (P ) )α = 0/ and the claim holds vacuously.
• If α is a successor ordinal, then (TDπ ∪ceD (P ) )α = TDπ ∪ceD (P ) ((TDπ ∪ceD (P ) )α−1 ).
Let solve(t D , t1 , . . . , tn ) ∈ (TDπ ∪ceD (P ) )α . By definition of the immediate consequence operator, there exist a clause (A′ ← B1 , . . . , Bk ) ∈ D and atoms B1′ , . . . , Bk′
(variants of atoms in (TDπ ∪ceD (P ) )α−1 ) such that there exists θ=mgu((B1 , . . . , Bk ), (B1′ , . . . , Bk′ ))
and A′ θ = solve(t D , t1 , . . . , tn ). Then, one of the following holds:
— A′ is solve(true, t11 , . . . , t1n ). Then, t D = true. By definition of M0 , solve(true) ∈
π
)1 . Thus, the claim holds for t M0 = true.
(TM
0 ∪ce(P )
′
— A is solve((A, B ), t21 , . . . , t2n ). Then,
θ = mgu((B1′ , . . . , Bk′ ),
(D11 , . . . , D1k1 , solve(A, t31 , . . . , t3n ), D21 , . . . , D2k2 ,
solve(B , t41 , . . . , t4n ), C21 , . . . , C2m2 ))
Let i = solve(t , t1i , . . . , tni ) and Bj′ = solve(t D ,j , t1j , . . . , tnj ) be atoms that
are unified with solve(A, t31 , . . . , t3n ) and solve(B , t41 , . . . , t4n ), respectively. By
definition of θ, θ unifies A with t D ,i , B with t D ,j , and maps (A, B )θ to t D . In
other words, t D = (t D ,i , t D ,j )θ, i.e., t D is an instance of (t D ,i , t D ,j ).
Both Bi′ and Bj′ are variants of atoms in (TDπ ∪ceD (P ) )α−1 . Therefore, the inducB′
D ,i
tive assumption is applicable, and there exist atoms solve(t M0 ,i ) and solve(t M0 ,j )
π
)ω , such that t D ,i = t M0 ,i δi and t D ,j = t M0 ,j δj , for some substiin (TM
0 ∪ce(P )
tutions δi and δj . Let s M0 ,i and s M0 ,j be renamed apart variants of t M0 ,i and
t M0 ,j respectively.
Then, given the clause solve((A, B )) ← solve(A), solve(B ), s M0 ,i can be unified with A and s M0 ,j with B . Since A and B are free variables in the body, there
exists an mgu θM0 of (solve(A), solve(B )) and (solve(s M0 ,i ), solve(s M0 ,j )) and
On termination of meta-programs
41
π
solve((A, B ))θM0 = solve((s M0 ,i , s M0 ,j )) holds. Since (TM
)ω is a fix0 ∪ce(P )
π
point for TM ∪ce(P ) (see (Falaschi et al. 1989; Bossi et al. 1994)), solve((s M0 ,i ,
0
π
)ω . Moreover, since s M0 ,i and s M0 ,j are variable disjoint,
s M0 ,j )) ∈ (TM
0 ∪ce(P )
t D is an instance of (s M0 ,i , s M0 ,j ), completing the proof in this case.
— A′ is solve(A, t51 , . . . , t5n ), where A is an atom. Then,
θ = mgu((B1′ , . . . , Bk′ ),
(D31 , . . . , D3k3 , clause(A, B , s1 , . . . , sl ),
D41 , . . . , D4k4 , solve(B , t61 , . . . , t6n )
C31 , . . . , C3m3 ))
Then, let clause(t1D , t2D , t11 , . . . , tl1 ) and solve(t3D , t12 , . . . , tn2 ) be elements of B1′ , . . . ,
Bk′ that can be unified with clause(A, B , s1 , . . . , sl ) and solve(B , t61 , . . . , t6n ), respectively. By definition of θ, t D = t1D θ and t2D θ = t3D θ.
Since ceD and ce encode the same program, there exists an atom clause(t1D , t2D )
M
π
ω
in ce(P ). By the inductive assumption, there exists solve(t3 0 ) ∈ (TM
∪ce(P ) ) ,
M
M
M
0
M
such that t3D is an instance of t3 0 . Let s3 0 be a variant of t3 0 , such that s3 0
is variable disjoint from clause(t1D , t2D ). Let ρ be a variable renaming such that
t3M0 = s3M0 ρ. The only variables that can be affected by ρ are the variables of
s3M0 . By choice of s3M0 , this implies that t1D ρ = t1D . It should also be observed
that t2D and s3M0 are unifiable.
The composition ρθ is a unifier of (clause(A, B ), solve(B )) and (clause(t1D ,
t2D ), solve(s3M0 )). Let θM0 be the most general unifier of these expressions. Thus,
there exists a substitution δ such that ρθ = θM0 δ. The head instance t M0 that will
be inferred is AθM0 , that is t1D θM0 . Therefore, the following holds: t D = t1D θ =
t1D (ρθ) = t1D (θM0 δ) = (t1D θM0 )δ = t M0 δ, completing the proof.
• If α is a limit ordinal, (TDπ ∪ceD (P ) )α = β<α (TDπ ∪ceD (P ) )β . In our case, the only
S
limit ordinal is ω. In other words, (TDπ ∪ceD (P ) )ω = n <ω (TDπ ∪ceD (P ) )n . Thus, if an
atom belongs to (TDπ ∪ceD (P ) )ω , there exists a natural number n, such that it belongs
to (TDπ ∪ceD (P ) )n . For such atoms the claim follows inductively from the previous
cases.
S
As we have seen already in Example 13, unlike the “vanilla” interpreter M0 , double
extended meta-interpreters do not necessarily preserve the set of calls. However, Lemma 3
allowed us to establish a correspondence between the sets of calls obtained with respect to
D and those obtained with respect to M0 . We present the formal proof of the lemma.
Proof of Lemma 3
The proof is similar to the proof of Lemma 1. It is inductive and based on the derivation of
solve(Q , t1 , . . . , tn ). We are going to prove a stronger claim than we need: we prove that
for every query
solve(A0 , t10 , . . . , tn0 ), E01 , . . . , E0p0 ,
solve((A21 , . . . , A2n2 ), t12 , . . . , tn2 ), E21 , . . . , E2p2 ,
. . . , solve((Am 1 , . . . , Amnm ), t1m , . . . , tnm ), Em 1 , . . . , Empm
42
Alexander Serebrenik and Danny De Schreye
in the LD-tree of D ∪ ceD (P ) and solve(Q0 , u1 , . . . , un ), such that A0 differs from true and
rel(Eij ) differs from solve for all i and j , there is a query
solve(B0 ), solve((B21 , . . . , B2n2 )), . . . , solve((Bm 1 , . . . , Bmnm )),
such that A0 is an instance of B0 and for all i, j , Aij is an instance of Bij .
• Induction base If solve(Q , t1 , . . . , tn ) = solve(Q0 , u1 , . . . , un ), then Q = Q0 , and the
statement of the lemma holds.
• Inductive step As above, assume that given a query
solve(A0 , t10 , . . . , tn0 ), E01 , . . . , E0p0 ,
solve((A21 , . . . , A2n2 ), t12 , . . . , tn2 ), E21 , . . . , E2p2 ,
. . . , solve((Am 1 , . . . , Amnm ), t1m , . . . , tnm ), Em 1 , . . . , Empm
in the LD-tree of D ∪ ceD (P ) and solve(Q0 , u1 , . . . , un ), such that A0 differs from
true and for all i, j ,, rel(Eij ) differs from solve.
Since A0 differs from true, there is only one clause in D that can be applied to resolve
the query. This clause is (variables are renamed for the clarity of presentation):
solve(Head, t51 , . . . , t5n ) ←
D31 , . . . , D3k3 , clause(Head, Body, s1 , . . . , sk ),
D41 , . . . , D4k4 , solve(Body, t61 , . . . , t6n )
C31 , . . . , C3m3 ·
If the unification fails, the next query is not produced. Thus, let τ be the most general
unifier of solve(A0 , t10 , . . . , tn0 ) and the head of the clause. In particular, A0 τ = Headτ.
The resolvent obtained is thus,
D31 τ, . . . , D3k3 τ, clause(Head, Body, s1 , . . . , sk )τ,
D41 τ, . . . , D4k4 τ, solve(Body, t61 , . . . , t6n )τ, C31 τ, . . . ,
C3m3 τ, E01 τ, . . . , E0p0 τ, solve((A21 , . . . , A2n2 ), t12 , . . . , tn2 )τ,
E21 τ, . . . , E2p2 τ, . . . , solve((Am 1 , . . . , Amnm ), t1m , . . . , tnm )τ,
Em 1 τ, . . . , Empm τ
Let σ be a computed answer substitution for D31 τ, . . . , D3k3 τ. If no such a substitution exists the next query is not produced. Next, the appropriately instantiated atom
of clause has to be unified with one of the facts in the clause encoding of the interpreted program. Let it be clause(H , (H1 , . . . , Hl ), s 1 , . . . , s k ) and let θ be the corresponding most general unifier. The unifier θ should exist, otherwise, the computation
would have failed. Let δ be a computed answer substitution for D41 τ, . . . , D4k4 τσθ.
Then, the next resolvent is
solve((H1 , . . . , Hl ), t61 , . . . , t6n )τσθδ,
C31 τσθδ, . . . , C3m3 τσθδ,
E01 τσθδ, . . . , E0p0 τσθδ,
solve((A21 , . . . , A2n2 ), t12 , . . . , tn2 )τσθδ,
On termination of meta-programs
43
E21 τσθδ, . . . , E2p2 τσθδ, . . . ,
solve((Am 1 , . . . , Amnm ), t1m , . . . , tnm )τσθδ,
Em 1 τσθδ, . . . , Empm τσθδ
If l > 1 another clause of D can be applied and the following resultant is obtained
after solving also appropriately instantiated calls to D11 , . . . , D1k1 (where ρ denotes
a substitution obtained during this application):
solve(H1 , t31 , . . . , t3n )τσθδρ,
D21 τσθδρ, . . . , D2k2 τσθδρ,
solve(H2 , . . . , Hl ), t41 , . . . , t4n )τσθδρ,
C21 τσθδ, . . . , C2m2 τσθδρ,
C31 τσθδ, . . . , C3m3 τσθδ,
E01 τσθδρ, . . . , E0p0 τσθδρ,
solve((A21 , . . . , A2n2 ), t12 , . . . , tn2 )τσθδ,
E21 τσθδρ, . . . , E2p2 τσθδρ, . . . ,
solve((Am 1 , . . . , Amnm ), t1m , . . . , tnm )τσθδρ,
Em 1 τσθδρ, . . . , Empm τσθδρ·
We need to show that there exists a query in the LD-tree of M0 ∪ ce(P ) and solve(Q0 )
that satisfies our inductive statement. We are going to construct such a query.
By the Inductive Assumption, there exists a query
solve(B0 ), solve((B21 , . . . , B2n2 )), . . . , solve((Bm 1 , . . . , Bmnm )),
such that A0 is an instance of B0 and for all i, j , Aij is an instance of Bij . The only
clause that can be applied to resolve this query is the clause corresponding to the
clause applied to resolve the corresponding query above. Let clause(H ′ , (H ′ 1 , . . . , H ′ l ))
be a clause encoding of the same clause as represented by clause(H , (H1 , . . . , Hl ), s 1 ,
. . . , s k ). In order to show that the unification of B0 and H ′ succeeds observe that the
following holds:
A0 is an instance of B0
A0 τσ is unifiable with H
H ′ is a variant of H
Let µ be the most general unifier of B0 and H ′ . Then, (H1 , . . . , Hl )τσθ is an instance
of (H ′ 1 , . . . , H ′ l ))µ. The following resolvent is obtained
solve((H ′ 1 , . . . , H ′ l )µ), solve((B21 , . . . , B2n2 )µ),
. . . , solve((Bm 1 , . . . , Bmnm )µ)
If l > 1 another rule of M0 can be applied and the following resolvent will be obtained:
solve(H ′ 1 µ), solve((H ′ 2 , . . . , H ′ l )µ), solve((B21 , . . . , B2n2 )µ),
. . . , solve((Bm 1 , . . . , Bmnm )µ),
44
Alexander Serebrenik and Danny De Schreye
We claim that the latter query satisfies the conditions of the lemma. Indeed, since
(H1 , . . . , Hl )τσθ is an instance of (H ′ 1 , . . . , H ′ l ))µ, the query (H1 , . . . , Hl )τσθδρ
is also an instance of (H ′ 1 , . . . , H ′ l ))µ. Thus, H1 τσθδρ is an instance of H ′ 1 µ and
(H2 , . . . , Hl )τσθδρ is an instance of (H ′ 2 , . . . , H ′ l ))µ. Recalling the inductive assumption allows us to complete the proof.
Finally we present a formal proof of Theorem 3.
Theorem 3
E
Let P be an interpreted program, D a double extended meta-interpreter, and Q ∈ BD
,
∪ceD (P )
such that Q is terminating with respect to P . Let u1 , . . . , un be a sequence of terms such
that {A | A ∈ Call(D ∪ ceD (P ), solve(Q , u1 , . . . , un )), solve 6= rel(A)} is terminating with
respect to D . Then solve(Q , u1 , . . . , un ) terminates with respect to D ∪ ceD (P ).
Proof
Let M0 be the “vanilla” meta-interpreter. By Corollary 1 M0 ∪ ce(P ) terminates with respect to solve(Q ). This is equivalent to saying that M0 ∪ ce(P ) terminates with respect to
Call(M0 ∪ ce(P ), solve(Q )). Moreover, this also means that M0 ∪ ce(P ) terminates with
respect to S = {Aη | A ∈ Call(M0 ∪ ce(P ), solve(Q )), η is a substitution}. By Theorem 1
M0 ∪ ce(P ) is order-acceptable with respect to S . Let ≥1 be a minimal well-founded quasiordering, such that M0 ∪ ce(P ) is order-acceptable with respect to S via it.
Similarly, let ≥2 be a well-founded quasi-ordering such that D is order-acceptable with
respect to {A | A ∈ Call(D ∪ ceD (P ), solve(Q , u1 , . . . , un )), solve 6= rel(A)} via ≥2 .
We have to show that there exists a well-founded quasi-ordering such that D ∪ ceD (P )
is order-acceptable with respect to {solve(Q , u1 , . . . , un )} via . By Theorem 1 this will
imply termination.
E
as follows for any terms t1 , t2 , t11 , . . . , tn1 , t12 , . . . , tn2 and
Let be defined on BD
∪ceD (P )
any atoms a1 , a2 :
1. solve(t1 , t11 , . . . , tn1 ) ≻ solve(t2 , t12 , . . . , tn2 ), if there is a term t , such that solve(t1 ) >1
solve(t ) and t2 = t θ for some substitution θ;
2. a1 ≻ a2 , if rel(a1 ) 6= solve, rel(a2 ) 6= solve and a1 >2 a2 ;
3. solve(t1 , t11 , . . . , tn1 ) ≻ a1 , if rel(a1 ) 6= solve;
4. a1 a2 , if a1 and a2 are identical.
In order to prove that ≻ is an ordering and that this ordering is well-founded we make
use of the minimality of > and of the Lifting Theorem (Theorem 3.22 (Apt 1997)). We
prove irreflexivity only as antisymmetry, transitivity and well-foundedness can be proved
in a similar way. Let A be an atom such that A ≻ A. If A is of the form solve(t1 , t11 , . . . , tn1 ),
then solve(t1 ) >1 solve(t ) and t1 = t θ should hold for some substitution θ. By Lemma 6,
there exists a directed derivation Q0 , . . . , Qn , such that Q0 = solve(t1 )(= solve(t θ)), Qn =
solve(t ), for all 0 ≤ i < n, Qi >1 Qi +1 . In other words, Q0 = Qn θ. Then, by the Lifting
Theorem (Theorem 3.22 (Apt 1997)) there exists a derivation starting with Qn , selecting
the same atoms as in Q0 , . . . , Qn , and resulting in Q2n , such that Qn is an instance of Q2n .
Proceeding in this way we can construct an infinite directed derivation, contradicting the
On termination of meta-programs
45
well-foundedness of >1 . Alternatively, if the predicate of A differs from solve, A >2 A
should hold, contradicting the irreflexivity of >2 .
Next we prove that D ∪ ceD (P ) is order-acceptable with respect to solve(Q , u1 , . . . , un ).
Let A0 ∈ Call(D ∪ ceD (P ), solve(Q , u1 , . . . , un )). We distinguish between the following
two cases.
First, assume that rel(A0 ) 6= solve. If rel(A0 ) = clause the order-acceptability condition
holds immediately, since there are no recursive clauses defining this predicate. Otherwise,
order-acceptability of D with respect to {A | A ∈ Call(D ∪ ceD (P ), solve(Q , u1 , . . . , un )),
solve 6= rel(A)} via >2 implies that for any clause A′ ← B1 , . . . , Bs , such that mgu(A0 ,
A′ ) = θ exists, for any atom Bi , such that rel(A0 ) ≃ rel(Bi ) and for any computed answer
substitution σ for ← (B1 , . . . , Bi −1 )θ holds A0 >2 Bi θσ. Therefore, A0 > Bi θσ holds.
Hence, in the remainder of the proof we assume that rel(A0 ) = solve. In this case, there
are three different kinds of clauses A′ ← B1 , . . . , Bs , such that mgu(A0 , A′ ) = θ exists.
• A′ ← B1 , . . . , Bs is solve(true, t11 , . . . , t1n ) ← C11 , . . . , C1m1 . In this case there are
no recursive body subgoals and order-acceptability condition is trivially satisfied.
• A′ ← B1 , . . . , Bs is
solve((A, B ), t21 , . . . , t2n ) ← D11 , . . . , D1k1 , solve(A, t31 , . . . , t3n ),
D21 , . . . , D2k2 , solve(B , t41 , . . . , t4n ), C21 , . . . , C2m2 .
By our assumption for all k , l , p, q, neither rel(Ckl ) nor rel(Dpq ) depend on solve.
Thus, the only recursive subgoals are an instance of solve(A, t31 , . . . , t3n ), and an instance of solve(B , t41 , . . . , t4n ). We have to show that A0 ≻ solve(A, t31 , . . . , t3n )θσ
and A0 ≻ solve(B , t41 , . . . , t4n )θσδρ, where θ = mgu(A0 , solve((A, B ), t21 , . . . , t2n )),
σ is a computed answer substitution for (D11 , . . . , D1k1 )θ, δ is a computed answer
substitution for solve(A, t31 , . . . , t3n )θσ, and ρ is a computed answer substitution for
(D21 , . . . , D2k2 )θσδ.
Let A′0 be obtained from A0 by dropping all the arguments except for the first one. By
definition of θ, θ is a unifier of A′0 and solve((A, B )). Let θ′ be a most general unifier
of A′0 and solve((A, B )). Thus, there exists a substitution θ′′ such that θ = θ′ θ′′ .
Therefore, Aθσ = A(θ′ θ′′ )σ = Aθ′ (θ′′ σ), i.e., Aθσ is an instance of Aθ′ .
Moreover, by Lemma 3, A′0 is an instance of some A′′0 ∈ Call(M0 ∪ ce(P ), solve(Q )).
Thus, A′0 ∈ S . Thus, by definition of >1 , A′0 >1 solve(Aθ′ ) holds, and by definition
of , A0 ≻ solve(A, t31 , . . . , t3n )θσ.
Since δ is a computed answer substitution for solve(A, t31 , . . . , t3n )θσ, by Corollary 3.23 (Apt 1997), there exists a computed answer substitution δ′ for solve(A,
t31 , . . . , t3n )θ′ , such that solve(A, t31 , . . . , t3n )θ′ δ′ is more general than solve(A,
t31 , . . . , t3n )θσδ. Moreover, by Lemma 2 there exists a computed answer substitution
δ′′ for solve(Aθ′ ) such that Aθ′ δ′ is an instance of Aθ′ δ′′ . Transitivity implies that
θ′ δ′′ is more general than θσδρ. Moreover, since all the unifiers are relevant, i.e., the
only variables affected are the variables of the terms to be unified, solve(B θσδρ) is
an instance of solve(B θ′ δ′′ ). Furthermore, since M0 ∪ ce(P ) is order-acceptable with
respect to solve(Q ) via ≥1 , and δ′′ is a computed answer substitution for solve(A)θ′ ,
A′0 >1 solve(B θ′ δ′′ ). Thus, by definition of , A0 ≻ solve(B , t41 , . . . , t4n )θσδρ.
46
Alexander Serebrenik and Danny De Schreye
• A′ ← B1 , . . . , Bs is
solve(A, t51 , . . . , t5n ) ← D31 , . . . , D3k3 , clause(A, B , s1 , . . . , sk ),
D41 , . . . , D4k4 , solve(B , t61 , . . . , t6n ), C31 , . . . , C3m3 .
Similarly to the previous case, let θ be a most general unifier of A0 and solve(A,
t51 , . . . , t5n ). Then, let A′0 be an atom obtained from A0 by dropping all the arguments except for the first one. Observe that θ is a unifier of A′ and A, and,
therefore, if θ′ is a most general unifier of these atoms, θ = θ′ θ′′ for some substitution θ′′ . Clearly, if an encoding of a clause in P via ceD can be unified with
clause(A, B , s1 , . . . , sk )θσ for a computed answer σ for ← (D31 , . . . , D3k3 )θ, the encoding of the same clause by ce can be unified with clause(A, B )θ′ . Thus, if δ denotes the computed answer substitution for clause(A, B , s1 , . . . , sk )θσ and δ′ denotes
the computed answer substitution for clause(A, B )θ′ , B θσδ is an instance of B θ′ δ′ .
Furthermore, for any computed answer substitution ρ for ← (D41 , . . . , D4k4 )θσδ,
B θσδρ is an instance of B θ′ δ′ . Reasoning as above and applying order-acceptability
via ≥1 , proves A′0 >1 solve(B θ′ δ′ ) and, thus, by definition of , A0 ≻ solve(B , t61 ,
. . . , t6n )θσδρ.
Thus, D ∪ ceD (P ) is order-acceptable with respect to solve(Q ) and, by Theorem 1 terminates with respect to it.
Appendix C Restricted double extended meta-interpreters do not improve
LD-termination
Example 21 illustrated that restricted double extended meta-interpreters are not necessarily
complete. However, a weaker result, stated in Lemma 8 can be shown. Here we prove this
result formally.
Proof of Lemma 8
By the completeness result of Levi and Ramundo (Levi and Ramundo 1993) every LDderivation of P and Q can be mimicked by an LD-derivation of M0 ∪ ce(P ) and solve(Q ).
Similarly to Lemma 2 the proof is done by induction on powers of the immediate consequence operator. In this case, however, the immediate consequence operator for M0 ∪ ce(P )
is considered. More formally, we have to show that
π
∀ α ≤ ω ∀ solve(t M0 ) ∈ (TM
)α
0 ∪ce(P )
∃ solve(t D , t1 , . . . , tn ) ∈ (TDπ ∪ceD (P ) )ω such that t M0 is a variant of t D
• If α = 1, the only value for t M0 is true. Assumptions of the lemma and the fact that D
is restricted imply that (C11 , . . . , C1m1 ) finitely succeeds. Thus, there exists a finite
power l of the immediate consequence operator TDπ ∪ceD (P ) for D ∪ ceD (P ) such
that solve(true, t11 , . . . , t1n ) is contained in (TDπ ∪ceD (P ) )l .
• If α is a successor ordinal, solve(t M0 ) has been produced by applying one of the
clauses. We distinguish between the following cases:
On termination of meta-programs
47
— Let solve((A, B )) ← solve(A), solve(B ) be the applied clause. Then, there exist
α−1 , such that there
π
solve(t1M0 ) and solve(t2M0 ), variants of atoms in (TM
∪ce(P ) )
0
exists a most general unifier θ of (solve(A), solve(B )) and (solve(t1 0 ), solve(t2 0 )).
M
M
M
M
Then, t M0 is (t1 0 , t2 0 )θ, i.e., t1 0 , t2 0 , since A and B are free variables.
By our inductive assumption there exist atoms solve(t1D , t11 , . . . , tn1 ) and solve(t2D ,
M
M
t12 , . . . , tn2 ) in (TDπ ∪ceD (P ) )ω , such that t1 0 is a variant of t1D and t2 0 is a variant
M
M
of t2D . Observe that (solve(t1D , t11 , . . . , tn1 ), solve(t2D , t12 , . . . , tn2 )) is unifiable with
(solve(A, t31 , . . . , t3n ), solve(B , t41 , . . . , t4n )), since A and B are free variables
and by Lemma 7.
Assumptions of the lemma and Definition 14 imply that there exists a finite
power l , such that all computed answers of rel(Cpq ) and rel(Drs ) are contained
in (TDπ ∪ceD (P ) )l . Then, there exist atoms d11 , . . . , d1k1 , d21 , . . . , d2k2 , c21 , . . . , c2m2
such that there exists
θD
=
mgu((d11 , . . . , d1k1 , solve(t1D , t11 , . . . , tn1 ), d21 , . . . , d2k2 ,
solve(t2D , t12 , . . . , tn2 ), c21 , . . . , c2m2 ), (D11 , . . . , D1k1 ,
solve(A, t31 , . . . , t3n ), D21 , . . . , D2k2 , solve(B , t41 ,
. . . , t4n ), C21 , . . . , C2m2 ))
By the third requirement of Definition 14, for every computed answer substitution σ for (D11 , . . . , D1k1 ), σ does not affect A. Thus, the same holds for any
correct answer substitution as well. In other words, for any d11 , . . . , d1k1 , the sequence
(d11 , . . . , d1k1 , solve(t1D , t11 , . . . , tn1 ))
is unifiable with (D11 , . . . , D1k1 , solve(A, t31 , . . . , t3n )) and, in particular, t1D θD =
t1D . Reasoning in a similar way allows us to conclude that t2D θD = t2D . Thus, an
element t D inferred at this step is (t1D θD , t2D θD ) = (t1D , t2D ). By choice of t1D
M
M
and t2D , t M0 = (t1 0 , t2 0 ) is a variant of (t1D , t2D ) = t D , completing the proof.
— Let solve(A) ← clause(A, B ), solve(B ) be the clause applied. Then, there exist
M
M
M
π
α−1
atoms clause(t1 0 , t2 0 ) and solve(t3 0 ), variants of some atoms in (TM
,
∪ce(P ) )
0
such that there exists an mgu θ of (clause(A, B ), solve(B )) and (clause(t1M0 , t2M0 ),
solve(t3M0 )). Then, t M0 is t1M0 θ, and t2M0 θ = t3M0 θ. Moreover, the restriction of
θ to the variables of t2M0 and of t3M0 is an mgu of these terms.
Since ce and ceD encode the same interpreted program P , there are some s 1 , . . . , s k ,
such that clause(t1M0 , t2M0 , s 1 , . . . , s k ) belongs to ceD (P ). Moreover, by our inductive assumption, there exists an atom solve(t3D , t13 , . . . , tn3 ) ∈ (TDπ ∪ceD (P ) )ω ,
such that t3M0 is a variant of t3D . Reasoning as above, observe that there exist
atoms d31 , . . . , d3k3 , d41 , . . . , d4k4 and c31 , . . . , c3m3 such that there exists
θD
=
mgu((d31 , . . . , d3k3 , clause(t1M0 , t2M0 , s 1 , . . . , s k ), d41 , . . . ,
d4k4 , solve(t3D , t13 , . . . , tn3 ), c31 , . . . , c3m3 ), (D31 , . . . ,
D3k3 , clause(A, B , s1 , . . . , sk ), D41 , . . . , D4k4 ,
solve(B , t61 , . . . , t6n ), C31 , . . . , C3m3 ))
and, similarly to the previous case, t D = t1 0 θD and t2 0 θD = t3D θD . The third
M
M
48
Alexander Serebrenik and Danny De Schreye
condition of Definition 14 implies that θD restricted to variables of t2
is an mgu. Thus,
M0
and t3D
θD |
=θ|
ρ
Var(t2M0 )∪Var(t3D )
Var(t2M0 )∪Var(t3M0 )
for some variable renaming ρ. In other words, t1 0 θ(= t M0 ) and t1 0 θD (= t D )
are variants, completing the proof.
M
M
• Finally, similarly to Lemma 2 the only case of a limit ordinal is ω, and, since
π
)ω =
TM
0 ∪ce(P )
[
n <ω
π
TM
)n
0 ∪ce(P )
the claim follows from the established result for the finite powers of the operator.
Next we present a formal proof of Theorem 4.
Theorem 4
Let D be a restricted double extended meta-interpreter. Let P be an interpreted program
and let Q be an interpreted query, such that D ∪ ceD (P ) LD-terminates for solve(Q , v1 , . . . ,
vn ), where (v1 , . . . , vn ) are terms such that solve(Q , v1 , . . . , vn ) is restricted. Then, P LDterminates with respect to Q .
Proof
In order to show that P LD-terminates for Q it is sufficient to prove that M0 ∪ ce(P ) LDterminates with respect to solve(Q ). Then, by Theorem 2 P LD-terminates with respect to
Q . Thus, we aim to establish order-acceptability of M0 ∪ ce(P ) with respect to solve(Q ).
E
First of all, we define a relationship on BM
. Then we show that the relationship
0 ∪ce(P )
is a quasi-ordering, that it is well-founded and that M0 ∪ ce(P ) is order-acceptable with
respect to solve(Q ) via the relationship defined.
Since D ∪ ceD (P ) LD-terminates for solve(Q , v1 , . . . , vn ), D ∪ ceD (P ) is order-acceptable with respect to solve(Q , v1 , . . . , vn ) via a quasi-ordering. Let a minimal quasi-ordering
such that D ∪ ceD (P ) is order-acceptable with respect to solve(Q , v1 , . . . , vn ) via it, be denoted ≥. Then, we define solve(s) ≻ solve(t ) if there exist solve(s, s1 , . . . , sn ), solve(t , t1 ,
. . . , tn ) ∈ Call(D ∪ ceD (P ), solve(Q , v1 , . . . , vn )) such that solve(s, s1 , . . . , sn ) > solve(t , t1 ,
. . . , tn ) and solve(s) solve(t ) if solve(s) and solve(t ) are identical.
Next we have to show that ≻ is indeed an ordering. We prove irreflexivity only. Antisymmetry and transitivity can shown in a similar fashion, and well-foundedness of ≻ follows
immediately from the well-foundedness of >.
Let solve(t ) ≻ solve(t ) for some t . Then, there exist atoms solve(t , s1 , . . . , sn ) and
solve(t , t1 , . . . , tn ) in Call(D ∪ ceD (P ), solve(Q , v1 , . . . , vn )) such that solve(t , s1 , . . . , sn ) >
solve(t , t1 , . . . , tn ).
If (t11 , . . . , t1n ) 6∈ Varsn then, s1 , . . . , sn and t1 , . . . , tn are linear sequences of fresh variables. Recall that ≻ is defined on the extended Herbrand base, i.e., in the factor set obtained
with respect to the variance relationship. Thus, solve(t , s1 , . . . , sn ) is, in fact, identical to
solve(t , t1 , . . . , tn ) up to variable renaming. Hence, the inequality solve(t , s1 , . . . , sn ) >
solve(t , t1 , . . . , tn ) contradicts the irreflexivity of >.
Alternatively, if (t11 , . . . , t1n ) ∈ Varsn we have to use the choice of ≥ as a minimal
On termination of meta-programs
49
quasi-ordering. By Lemma 6, there exists a directed derivation Q0 = solve(t , s1 , . . . , sn ),
Q1 , . . . , Qk = solve(t , t1 , . . . , tn ). Let ci be a clause used to resolve Qi and produce Qi +1 .
By Lemma 7, Qk is unifiable with the head of c0 . By the second condition of Definition 14 and by Lemma 8 the atom that produced Q1 can be selected to obtain Qk +1 . By
the third condition, the intermediate body atoms do not affect the first position of solve,
i.e., the first argument of Qk +1 should coincide with the first argument of Q1 . Moreover,
order-acceptability implies that Qk > Qk +1 . Proceeding in this way one can construct an
infinitely decreasing sequence of atoms, contradicting the well-foundedness of > and completing the proof of irreflexivity of ≻. As stated above the remaining properties of ≻ can
be established analogously.
Next we are going to prove order-acceptability. Let solve(t0 ) be a call in Call(M0 ∪
ce(P ), solve(Q )). Distinguish between the following cases.
• t0 is unifiable with true. By definition of double extended meta-interpreters none of
the predicates of C11 , . . . , C1m1 is mutually recursive with solve. Thus, the orderacceptability condition holds trivially.
• t0 is unifiable with (A, B ) via an mgu θM0 . Then, we have to prove that solve(t0 ) ≻
solve(AθM0 ) and solve(t0 ) ≻ solve(B θM0 ρM0 ), where ρM0 is a computed answer
substitution for solve(AθM0 ).
′
By the observation preceding the theorem, there exists a call AD
0 = solve(t0 , u1 ,
. . . , un ) in Call(D ∪ ceD (P ), solve(Q , v1 , . . . , vn )), where t0′ is a variant of t0 . Since
t0 is unifiable with (A, B ) and Lemma 7 holds, AD
0 can be unified with the head of
the second clause in D . Moreover, if θD is the mgu, then θD = θM0 {u1 /t21, . . . , un /t2n }.
Let σD be a computed answer substitution for (D11 , . . . , D1k1 )θD . By the third condition of Definition 14, AθD σD coincides with AθD . Thus, AθD σD = AθD = AθM0 .
D D
D D
D D
Since D ∪ ceD (P ) is order-acceptable, AD
0 > solve(Aθ σ , t31 θ σ , . . . , t3n θ σ ).
′
M0
D D
D D
Then, it holds that solve(t0 , u1 , . . . , un ) > solve(Aθ , t31 θ σ , . . . , t3n θ σ ). Recalling the definition of ≻ and that if a1 and a2 are variants, then a1 a2 , we conclude solve(t0 ) ≻ solve(AθM0 ), proving one of the order-acceptability decreases.
Next, we are going to see that solve(t0 ) ≻ solve(B θM0 ρM0 ). Indeed, order-acceptability of D ∪ ceD (P ) with respect to solve(Q , v1 , . . . , vn ) implies that AD
0 > solve(B , t41 ,
. . . , t4n )θD σD ρD δD , where θD and σD as above, ρD is a computed answer substitution for solve(A, t31 , . . . , t3n )θD σD and δD is a computed answer substitution for
(D21 , . . . , D2k2 )θD σD ρD .
The third condition of Definition 14 implies that σD cannot affect instances of B . In
other words, B θD σD = B θD . Thus, B θD σD ρD δD = B θD ρD δD . The same condition applied to δD implies B θD ρD δD = B θD ρD . Lemma 8 implies that for every
computed answer AθD ρD obtained with respect to D ∪ ceD (P ) there exists a computed answer AθD ρM0 obtained with respect to M0 ∪ ce(P ), such that AθD ρM0 is a
variant of AθD ρD . Recall, that AθD coincides with AθM0 . This implies as well that
B θD ρD is a variant of B θM0 ρM0 . Hence,
solve(t0′ , u1 , . . . , un ) > solve(B θM0 ρM0 , t41 θD σD ρD δD , . . . , t44 θD σD ρD δD ).
Thus, solve(t0 ) ≻ solve(B θM0 ρM0 ), completing the proof in this case.
• t0 is unifiable with A via θM0 , i.e., the last clause of M0 is applied. In this case we
50
Alexander Serebrenik and Danny De Schreye
have to show that solve(t0 ) ≻ solve(B θM0 ρM0 ), where ρM0 is a computed answer
substitution for clause(A, B )θM0 .
By the same observation on the call set, there exist solve(t0′ , t1 , . . . , tn ) ∈ Call(D ∪
ceD (P ), solve(Q , v1 , . . . , vn )), such that t0′ is a variant of t0 . Lemma 7 implies that
solve(t0′ , t1 , . . . , tn ) can be unified with the head of the corresponding clause in D .
Moreover, the restriction of an mgu θD to A coincides with θM0 up to a variable
renaming. Let σD be a computed answer substitution for (D31 , . . . , D3k3 )θD . By the
third condition of Definition 14, AθD σD = AθD = AθM0 . Thus, the call to clause
can be unified with the atom corresponding to the one used to compute ρM0 . In other
words, there exists a computed answer substitution ρD for clause(AθD σD , B , s1 θD σD ,
. . . , sk θD σD ), such that ρD restricted to the variables of AθD σD and B is ρM0 (up
to a variable renaming). Finally, the third condition of Definition 14 implies that
the computed answer substitution δD for an instance of (D41 , . . . , D4k4 ) cannot affect the corresponding instance of B . Taking this discussion in consideration, the
order-acceptability decrease implies
solve(t0′ , t1 , . . . , tn ) > solve(B θM0 ρM0 , t61 θD σD ρD δD , . . . , t6n θD σD ρD δD )
and, by definition of ≻, solve(t0 ) > solve(B θM0 ρM0 ), completing the proof.