File Information
File: 05-lr/acl_arc_1_sum/cleansed_text/xml_by_section/metho/91/w91-0112_metho.xml
Size: 27,008 bytes
Last Modified: 2025-10-06 14:12:47
<?xml version="1.0" standalone="yes"?> <Paper uid="W91-0112"> <Title>A GENERAL COMPUTATIONAL METHOD FOR GRAMMAR INVERSION</Title> <Section position="4" start_page="91" end_page="95" type="metho"> <SectionTitle> ESSENTIAL ARGUMENTS: AN EXTENSION </SectionTitle> <Paragraph position="0"> The notion of an essential argument in a PROLOG literal has been first introduced in (Strzalkowski, 1989), and subsequently extended in (Strzalkowski, 1990bc; Sttzalkowski and Peng, 1990). In short, X is an essential argument in a literal p (&quot; .- X * -- ) if X is required to be &quot;in&quot; for a successful evaluation of this literal. By a successful evaluation of a literal we mean here the execution that is guaranteed to stop, and moreover, that will proceed along an optimal path. For instance, an evaluation of the goal mere (a,L), with an intention to find a list L of which a is a member, leads to a non-terminating execution unless L's value is known. Likewise, a request to generate a main verb in a sentence when the only information we have is its root form (or &quot;logical form&quot;) may lead to repeated access to the lexicon until the &quot;correct&quot; surface form is chosen. Therefore, for a lexicon access goal, say acclex (Word,Feats,Root), it is reasonable to require that both Feats and Root are the essential arguments, in other words, that the set {Feat,Root} is a minimal set of essential arguments, or a MSEA, for acclex.</Paragraph> <Paragraph position="1"> The following procedure computes the set of active</Paragraph> <Paragraph position="3"> MSEA's in a clause head literal, s</Paragraph> <Paragraph position="5"> \[computing active MSEAs\] Given a clause p(X1,.&quot; ,X,) :- r1(Xl, |.&quot; .Xl.kt), * &quot;, rs(X,.l &quot;&quot;Xs.~,), where i_>1, we compute the set of active MSEAs in the head predicate p as follows: 9</Paragraph> <Paragraph position="7"> p is returned in MS.</Paragraph> <Paragraph position="8"> (2) For i=l,'&quot;,s, let MR i be the set of active MSEA's of r i, and let MRUi = {ml.j I j=l ... ri} be obtained from MR i by replacing all variables by their corresponding actual arguments of ri.</Paragraph> <Paragraph position="9"> (3) Compute the set MPi = {I.q.j I j=l --. ri}l , where IXi.j = (VAR (mi.j) - OUTi-l.k), where OUTi_t.6 is the set of all :'out&quot; arguments in literals r~ to ri-l.</Paragraph> <Paragraph position="10"> (4) For each l.tij in MPi where l~.s do the following: null (a) if l.tid = O then: (i) compuie set OUTj of &quot;out&quot; arguments of ri; (ii) compute OUTij := OUTj u OUTi-l.t; (iii) call MSEAS (MSi. j,|.\[i_l .k, VP,i + 1, OUTi.j); (b) otherwise, if ~i.j ~ (~ then find all distinct minimal size sets vt c VP such that whenever the arguments in vt are &quot;in&quot;, then the arguments ida I.ti,j are &quot;out&quot;. If such vt's exist, then for eve W vt do: (i) assumeiv, is &quot;in&quot; in p; (ii) compute the set OUTi.h of &quot;out&quot; arguments in all literals from r I to ri; (iii) call MSEAS,(MSi.h ,I.ti_1.t t.A,,, VP,i + l,OUTi.h ); (c) otherwise, if no such v, exist, MSij := C/~. (5) Compute MS :=: t,...) MSij; j=l..r ' Active MSEA's are those existing with a given definition of a predicate. Other, non-active MSEA's can be activated when * he clauses making up thi~ definition are altered in some way. The procedure can be straightforwardly augmented to compute all MSEAs (Strzalkowski, 1990c).</Paragraph> <Paragraph position="11"> 9 For i=l the sets of essential arguments are selected so as to minimize the number of possible solutions to 1. (6) For MSEAS (MS,MSEA,VP,s+I,OUT), i.e., for</Paragraph> <Paragraph position="13"> As a simple example consider the following clause: sent(P) :- vp(N,P),np(N).</Paragraph> <Paragraph position="14"> Assuming that MSEA'S for vp and np are {P} and {N}, respectively, and that N is &quot;out&quot; in vp, we can easily compute that {P} is the MSEA in sent. To see it, we note that MRU1 for vp is { {P} } and, therefore, that I.q.l = {P}. Next, we note that MRU2 for np is { {N}}, and since OUTi.1 from vp is {N}, we obtain that l.t2.1 = ~, and subsequently that {P} is the only MSEA in sent.</Paragraph> <Paragraph position="15"> The procedure presented above is sufficient in many cases, but it cannot properly handle certain types of recursive definitions. Consider, for example, the problem of assigning the set of MSEA's to mem(Elem,List), where mem (list membership) is defined as follows: mem (Elem, \[First IList \]) :mere (Elem,List).</Paragraph> <Paragraph position="16"> mem (Elem, \[Elem I List \]).</Paragraph> <Paragraph position="17"> The MSEAS procedure assigns MS=\[ {Elem},{List} }, we note however, that the first argument of mem cannot alone control the recursion in the first clause since the right-hand side (rhs) literal would repeatedly unify with the clause head, thus causing infinite recursion. This consideration excludes {Elem} from the list of possible MSEAs for mere. In (Strzalkowski, 1989) we introduced the directed relation always unifiable among terms, which was informally characterized as follows. A term X is always unifiable with term Y if they unify regardless of any bindings that may occur in X, providing that variables in X and Y are standardized apart, and that Y remains unchanged. According to this definition any term is always unifiable with a variable, while the opposite is not necessarily Irue. For example, the variable X is not always unifiable with the functional term f(Y) because binding X with g(Z) will make these two terms non-unifiable. This relation can be formally characterized as follows: given two terms X and Y we say that Y is always unifiable with X (and write X_<Y) iff the unification of X and Y yields Y, where the variables occurring in X and Y have been standardized apart. 1deg Since _< describes a partial order among terms, we can talk of its transitive closure _<*. Now we can augment the MSEAS procedure with the following two steps (to be placed between steps (2) and ,0 So defined, the relation always uni~ble becomes an inverse of another relation: less instantiat~d, hence the particular direction of S sign.</Paragraph> <Paragraph position="18"> (3)) that would exclude certain MSEAs from re.cursive clauses.</Paragraph> <Paragraph position="19"> (2A) If r i = p then for every mi, u E MRUi if for every argument Yt ~ mi.,,, where Yt is the l-th argument in ri, and Xi is the l-th argument in p, we have that Xt_<* Yi then remove mi, u from MRU i.</Paragraph> <Paragraph position="20"> (2B) For every set mi, uj = mi. u u { Zi. j }, where Zi,j is the j-th argument in r~ such that it is not already in mi.u and it is not the case that YiS'Zid, where Yj is a j-th argument in p, if mi.ui ts not a superset of any other mi, t remaining in MRUi, then add mi, ui to MRU1.</Paragraph> <Paragraph position="21"> In order for the MSEAS procedure to retain its practical significance we need to restrict the closure of <_ to be defined only on certain special sets of terms that we call ordered series. H It turns out that this restricted relation is entirely sufficient in the task of grammar inversion, if we assume that the original grammar is itself well-defined.</Paragraph> <Paragraph position="22"> DEFINITION 1 (argument series) Let p(. * * Yo &quot; * * ) :- rl, * * * ,rn be a clause, and ril, &quot; &quot; * ,rid be an ordered subset of the literals on the right-hand side of this clause. Let ri~,t be either a literal to the right of rlk or the head literal p. The ordered set of terms <Yo,Xi,Yl, &quot;'&quot; ,Xk,Yk,Xk+l > is an argument series iff the following conditions are met: (1) Xk+~ is an argument in ri~+~; (2) for every i=1 &quot;.-k, Xi is different from any Xj for j <i; (3) for every j=l &quot;.- k, X i and Yi are arguments to %, that is, rlj(...Xi,Yj... ), such that if Xj is &quot;in&quot; then Yj is &quot;out&quot; 12; and (4) for every j=0..-k, either Xj+i=Y j or X j+ 1 =f (Yj) or Yj=f (X j+l), where f (X) denotes a term containing a subterm X.</Paragraph> <Paragraph position="23"> Note that this definition already ensures that the argument series obtained between X0 and Xk+t is the shortest one. As an example, consider the following clauses: u A similar concept of guide-structure is introduced in (Dymetman et al., 1990), however the ordered series is less restrictive and covers a larger class of recursive programs. 12 yj may be partially &quot;out&quot;; see (Strzalkowski, 1990c) for the definition of delayed &quot;out&quot; status. vp(X) :- np(X,Y),vp(Y).</Paragraph> <Paragraph position="24"> np ff (x),x).</Paragraph> <Paragraph position="25"> Assuming that the argument X in the literal vp (X) on the left-hand side (lhs) of the first clause is &quot;in&quot;, we can easily check that <X,X,Y,Y> constitutes an argument series between arguments of vp in the first clause.</Paragraph> <Paragraph position="26"> DEFINITION 2 (weakly ordered series) 13 An argument series <Yo,X1,Y1,... ,Xk,YkX~+i> in the clause P:-rl ...r, is weakly ordered iff Yo_<*Xk+l \[or Xk+l_<'Y0\], where _<* is a closure of <_ defined as follows: (1) for every i=1 .-. k, such that rij(&quot;&quot; Xj,Yi&quot;&quot; ) there exists a clause rij(&quot;&quot; ,X,Y, .-&quot;):-sl, * &quot;&quot; ,s,, where X and Y unify with X; and Y./, respectively, such that X_<*Y \[or Y_<*:(\]; (2) for every i=O.. &quot;k, Xi+l=Yi or Xi+l=f(Yi) \[or ri=f (Xi+l)\].</Paragraph> <Paragraph position="27"> Looking back at the definition of mem (Elem,List) we note that the first (recursive) clause contains two ordered series. The first series, <Elem,Elem >, is not ordered (or we may say it is ordered weakly in both directions), and therefore Elem on the left-hand side of the clause will always unify with Elem on the right, thus causing non-terminating recursion. The other series, <\[First IList\],List>, is ordered in such a way that \[First IList\] will not be always unifiable with List, and thus the recursion is guaranteed to terminate. This leaves {List} as the only acceptable MSEA for mem.</Paragraph> <Paragraph position="28"> Consider now the following new example:</Paragraph> <Paragraph position="30"> Note that the series <X,X,Y,Y> in the first clause is ordered so that X_<*Y. In other words, Y in vp on the rhs is always unifiable with X on the lhs. This means that a non-terminating recursion will result if we attempt to execute the first clause top-down. On the other hand, it may be noted that since the series is ordered in one direction only, that is, we don't have Y_<*X, we could invert it so as to obtain Y_<*X, but not X_<*Y. To accomplish this, it is enough to swap the arguments in the clause defining np, thus redirecting the recursion. The revised program is guaranteed to ,3 A series can also be strongly ordered in a given direction, if it is weakly ordered in that direction and it is not weakly ordered in the opposite direction.</Paragraph> <Paragraph position="31"> F terminate, providing that vp's argument is bound, which may be achieved by further reordering of goals.t4 ! The ordered Series relation is crucial in detecting and removing!of non-terminating left-recursive rules of the grammar. The first of the following two algorithms finds if an argument series is ordered in a specified directio n, without performing a partial evaluation of goals~ The second algorithm shows how a directed series can be inverted.</Paragraph> <Paragraph position="32"> ALGORITHM l (finding if Yo_<'Xk+~ (weakly)) Given an: argument series <Y0,Xl ,Y1, &quot;'&quot; ,X~,YkX~+1 > do the following: (1) Find if for every i=0.., k, either Xi+l=Yi or Xi+l=f(Yi); if the answer is negative, return NO and quit.</Paragraph> <Paragraph position="33"> (2) For every i=1 * * * k, find a clause ri~(&quot; &quot; . X,Y. &quot;':):-sl, &quot;&quot;,sin such that Xj and Yj unify with X and Y, respectively, and there is a leading series ~.X * * * Y> such that X_<*Y. Return NO if no such clause is found, and quit.</Paragraph> <Paragraph position="34"> (3) In the special i case when k=0, i.e., p has no right-hand side, Yo_<degX~ if either Yo=X~ or Xl=f(Yo). If this is not the ease return NO, and quit.</Paragraph> <Paragraph position="35"> (4) Otherwise, return YES.</Paragraph> <Paragraph position="36"> When ALGoRrrHM i returns a YES, it has generated an ordered path (i.e,, the series with all the necessary subseries) between X 0 and Xk+l to prove it. If this path is ordered in one direction only, that is, there exists at least one pair of adjacent elements Xi and Yj within this path such that either Xi=f(Yj) or Yj=f(Xi), but not Xi=Yj, then we say that the path is properly ordered. :In addition, if we force ALGORITHM I tO generate all the paths for a given series, and they all turn out to be properly ordered, then we will say that the series itself is properly ordered. We can attempt to invert a properly ordered path, but not the one which is only improperly ordered, i.e., in both directions. Therefore, for a series to be invertible all its paths must be properly ordered, though not necessarily in the sahae direction) s ALGORITHM 2 (inverting properly ordered series) Given a clause p !-rl,-..,r,, and an argument 14 Reordering of goals may be required to make sure that appropnate essenual arguments are bound.</Paragraph> <Paragraph position="37"> ts Recursion defi~ed with respect to improperly ordered series is oonsidered ill-formed.</Paragraph> <Paragraph position="38"> series <Yo,X1,Y1,''',Xk,YkX,+i> such that it is properly (weakly) ordered as X0_<'Xk+l \[or Xk+l_<'X0\], invert it as follows: (1) For each %(--.,Xj,Yj, &quot;') appearing on the rhs of the clause, find all clauses rlj(. . . ,X,Y, ... ) :- sl, &quot;'&quot; ,sin such that X and Y unify with X/and Yj, respectively, and there is a proper ordering X_<*Y \[or Y_<*X\].</Paragraph> <Paragraph position="39"> (2) Recursively invert the series <X .. * Y>; for the special case where m =0, that is, rij clause has no rhs, exchange places of X and Y.</Paragraph> <Paragraph position="40"> (3) For every pair of Yi and Xi+t (i=O..&quot; k), if either Yi=f(Xi+l) or Xi+l=f(Yi), where f is fully instantiated, exchange Yi with Xi+l, and do nothing otherwise.</Paragraph> <Paragraph position="41"> We now return to the MSEAS procedure and add a new step (2C), that will follow the two steps (2A) and (2B) discussed earlier. The option in (2C) is used when the expansion of a MSEA rejected in step (2A) has failed in (2B). In an earlier formulation of this procedure an empty MSEA was returned, indicating an non-executable clause. In step (2C) we attempt to rescue those clauses in which the recursion is based on invertible weakly ordered series.</Paragraph> <Paragraph position="42"> (2C) Find an argument Y~ ~ mi.u, a t-th argument of r i, such that Xt_<&quot; Yt, where Xt is the t-th argument in the head literal p and the series <Xt &quot;'&quot; Yt> is properly ordered. If no such Yt is found, augment mi,u with additional arguments; quit if no further progress is possible) 6 Invert the series with ALGORITHM 2, obtaining a strong.ly ordered series <X't&quot;&quot; Y't> such that Y't_< X't. Replace Yi with Y't in rni,u and add the resulting set to MRU~.</Paragraph> <Paragraph position="43"> At this point we may consider a specific linguistic example involving a generalized left-recursive production based on a properly ordered series) 7</Paragraph> <Paragraph position="45"> Is As in step (2B) we have to maintain the minimality of m~...</Paragraph> <Paragraph position="46"> i~ This example is loosely based on the grammar described in (Shieber et al., 1990).</Paragraph> <Paragraph position="47"> We concentrate here on the clause \[2\], and note that there are three argument series between the vp literals: <V1,VI>, <Args, \[Csem IArgs\]>, and <Vsem,Vsem >, of which only the second one is invertible. We also note that in clause \[3\], the collection of MSEAs for vp include {V1} and {Vsem}, where V1 represents the surface suing, and Vsem its &quot;semantics&quot;. When we use this grammar for generation, {V1} is eliminated in step (2A) of the MSEAS procedure, while {Vsem}, is rescued in step (2C), where it is augmented with Args which belongs to the invertible series. We obtain a new set {Args',Vsem}, which, if we decide to use it, will also alter the clause \[2\] as shown below, is</Paragraph> <Paragraph position="49"> This altered clause can be used in the generator code, but we still have to solve the problem of having the \[Csem IArgs\] bound, in addition to Vsem. 19 It must be noted that we can no longer meaningfully use the former &quot;in&quot; status (if there was one) of this argument position, once the series it heads has been inverted.</Paragraph> <Paragraph position="50"> We shall return to this problem shortly.</Paragraph> </Section> <Section position="5" start_page="95" end_page="95" type="metho"> <SectionTitle> INTRA-CLAUSAL INVERSION </SectionTitle> <Paragraph position="0"> The following general rule is adopted for an effective execution of logic programs: never expand a goal before at least one of its active MSFEAs is &quot;in&quot;. This simple principle can be easily violated when a program written to perform in a given direction is used to run &quot;backwards&quot;, or for that matter, in any other direction. In particular, a parser frequently cannot be used as a generator without violating the MSEA-binding rule. This problem is particularly acute within a fixed-order evaluation strategy, such as that of PROLOG. The most unpleasant consequence of disregarding the above rule is that the program may go into an infinite loop and have to be aborted, which happens surprisingly often for non-trivial size Is In our inversion algorithm we would not alter the clause until we find that the MSEA needs to be used.</Paragraph> <Paragraph position="1"> 19 Vsem is expected to be &quot;in&quot; during generation, since it carties the &quot;semantics&quot; of vp, that is, provides the input to the generator. null programs. Even if this does not happen, the program performance can be seriously hampered by excessive guessing and backtracking. Therefore, in order to run a parser in the reverse, we must rearrange the order in which its goals are expanded. This can be achieved in the following three steps:</Paragraph> </Section> <Section position="6" start_page="95" end_page="96" type="metho"> <SectionTitle> PROCEDURE INVERSE </SectionTitle> <Paragraph position="0"> (1) Compute &quot;in&quot; and &quot;out&quot; status of arguments for the reversed computation. If the top-level goal parse (String,Sem) is used to invoke a generator, then Sere is initially &quot;in&quot;, while String is expected to have &quot;out&quot; status.</Paragraph> <Paragraph position="1"> (2) Compute sets of all (active and non-active) MSEAs for predicates used in the program.</Paragraph> <Paragraph position="2"> (3) For each goal, if none of its MSEAs is &quot;in&quot; then move this goal to a new position with respect to other goals in such a way that at least one of its MSEAs is &quot;in&quot;. If this &quot;in&quot; MSEA is not an active one, recursively invert clauses defining the goal's predicate so as to make the MSEA become active.</Paragraph> <Paragraph position="3"> In a basic formulation of the inversion algorithm the movement of goals in step (3) is confined to be within the fight-hand sides of program clauses, that is, goals cannot be moved between clauses. The inversion process proceeds top-down, starting with the top-level clause, for example parse (String,Sere) * - sent(String,\[\],Sere). The restricted movement inversion algorithm INVERSE has been documented in detail in (Strzalkowski, 1990ac). It is demonstrated here on the following clause taken from a parser program, and which recognizes yes-no questions: yesnoq (A1,A4,P) :verb (A1,A2,Num,P2), subject (A2,A3,Num,P1), object (A3,A4,P I,P2,P).</Paragraph> <Paragraph position="4"> When rewriting this clause for generation, we would place object first (it has P &quot;in&quot;, and A3, P1, P2 &quot;out&quot;), then subject (it has the essential PI &quot;in&quot;, and A2 and Num &quot;out&quot;), and finally verb (its MSEA is either {A1} or {Num,P2}, the latter being completely &quot;in&quot; now). The net effect is the following generator clause: 2o</Paragraph> <Paragraph position="6"> verb (A1,A2,Num,P2).</Paragraph> <Paragraph position="7"> INVERSE works satisfactorily for most grammars, but it cannot properly handle certain types of clauses 20 Note that the surface linguistic string is not generated from the left to the tight.</Paragraph> <Paragraph position="8"> where no definite ordering of goals can be achieved even after redefinition of goal predicates. This can happen when two or more literals wait for one another to have bindings delivered to some of their essential argument. The extended MSEAS procedure is used to define a general inversion procedure INTER-CLAUSAL tO be discussed next.</Paragraph> </Section> <Section position="7" start_page="96" end_page="96" type="metho"> <SectionTitle> INTER-CLAUSA'L INVERSION </SectionTitle> <Paragraph position="0"> Consider again the example given at the end of the section on essential arguments. After applying MSEAS procedure we find that the only way to save MSEA {Args, Vsera} is to invert the series ~.Args,\[Csem IArgs\]> between vp literals. This alters the affected, clause \[2\] as shown below (we show also other clauses that will be affected at a later stage): 2\] In order to use the second clause for generation, we now require \[CsemlArgs\] to be &quot;in&quot; at the head literal vp. This, however, is not the case since the only input we receive for generation is the binding to Sera in clause \[1\], and subsequently, Vsem in \[2\], for example, ?-sent (chased (Fido,John)). Therefore the code still cannot be executed. Moreover, we note that clause \[1\] is now deadlocked, since neither vp nor np can be executed first. 22 At this point the only remaining option is to usel interclausal ordering in an effort to inverse \[1\]. We move v from the rhs of \[3\] to \[1\], while np travels from \[1\] to \[3\]. The following new code is obtained (the second argument in the new vp&quot; can be dropped, and the new MSEA for vp&quot; is {Args} ): 2a aZ The string variables VI, V2, etc. are dropped for clarity. 22 Them are situations when a clause would not appear deadlocked but still require expansion, for example if we replace \[11 by sent(Sem,Ssern) :-Ivp(Ssern,Sem), with Ssem bound in sent. This clause is equivalent to sent(Sera,Ssem) :. . . Vsem=Ssern,vp(Vsem,Sem), but since the series m 121 has been inverted we can no longerlmeaningfull y evaluate the ths fiterals in the given order. In fact we need to evaluate vp first which cannot be done until Vsem is bound.</Paragraph> <Paragraph position="1"> An alternative is:to leave Ill intact (except for goal ordering) and add an &quot;interface&quot; clause that would relate the old vp to the new vp'. In such case the procedure would generate an additional argument for vp t ih order to remm the final value of Ar&s which needs to be passed to np.</Paragraph> <Paragraph position="2"> This code is executable provided that Sere is bound in sent. Since Args is &quot;out&quot; in v, the recursion in \[2'\] is well defined at last. The effect of the interclausal ordering is achieved by adopting the tNTERCLAUSAL procedure described below. The procedure is invoked when a deadlocked clause has been identified by INVERSE, that is, a clause in which the right-hand side literals cannot be completely ordered.</Paragraph> </Section> <Section position="8" start_page="96" end_page="96" type="metho"> <SectionTitle> PROCEDURE INTERCLAUSAL(DLC) </SectionTitle> <Paragraph position="0"> \[Inter-clausal inversion\] (1) Convert the deadlocked clause into a special canonical form in which the clause consists exclusively of two types of literals: the unification goals in the form X=Y where X is a variable and Y is a term, and the remaining literals whose arguments are only variables (i.e., no constants or functional terms are allowed). Any unification goals derived from the head literal are placed at the front of the rhs. In addition, if p (... X.-. ) is a recursive goal on the rhs of the clause, such that X is an &quot;in&quot; variable unifiable with the head of an inverted series in the definition of p, then replace X by a new variable X1 and insert a unification goal XI=X. The clause in \[1\] above is transformed into the following form: with the &quot;semantic-head&quot; goal (if any), for static expansion. The &quot;semantic-head&quot; goal is the one that shares an essential argument with the literal at the head of the clause. Recursive clauses in the definitions of goal predicates should never be used for expansion. In the example at hand, vp can be expanded with \[3\].</Paragraph> <Paragraph position="1"> (3) Convert the clauses to be used for goal expansion into the canonical form. In our example \[3\] needs no conversion.</Paragraph> <Paragraph position="2"> (4) Expand deadlocked goals by replacing them with appropriately aliased fight-hand sides of the clauses selected for expansion. In effect we perform a partial evaluation of these goals. Expanding vp in \[1\] with \[3\] yields the following new expanded clause. If not possible, expand more goals by recursively invoking INTFERCLAUSAL, until the clause can he ordered or no further expansion is possible. In our example \[la\] can be ordered as follows: more) &quot;original&quot; clauses in such a way that: (a) the resulting clauses are executable, and (b) the clause which has been expanded is made as general as possible by moving as many unification goals as possible out to the clause(s) used in expansion. In our example v(Args, Sem) has to remain in \[lb\], but the remainer of the rhs can be moved to the new vp&quot; clause. We obtain the following clauses (note that clause \[2\] has thus far remained unchanged throughout this process): (7) Finally, simplify the clauses and return to the standard form by removing unification goals.</Paragraph> <Paragraph position="3"> Remove superfluous arguments in literals. The result are the clauses \[1'\] to \[3'\] above.</Paragraph> </Section> class="xml-element"></Paper>