File Information
File: 05-lr/acl_arc_1_sum/cleansed_text/xml_by_section/metho/93/e93-1009_metho.xml
Size: 29,389 bytes
Last Modified: 2025-10-06 14:13:17
<?xml version="1.0" standalone="yes"?> <Paper uid="E93-1009"> <Title>A Strategy for Dynamic Interpretation: a Fragment and an Implementation</Title> <Section position="3" start_page="0" end_page="61" type="metho"> <SectionTitle> 1 The Idea of Dynamic </SectionTitle> <Paragraph position="0"> Interpretation Recent developments in Natural Language semantics have witnessed a shift away from static representation languages towards representation languages with a dynamic flavour. Such representation languages can be viewed as definitions of very simple imperative programming languages.</Paragraph> <Paragraph position="1"> To see how the imperative style comes in, consider the treatment of indefinite descriptions (or: existential phrases). Existential quantifiers are viewed dynamically as random assignment statements followed by tests. The translation of the natural language phrase 'a man' becomes something like:</Paragraph> <Paragraph position="3"> The first part of this statement can be viewed as a random assignment to register x, the second part as a test on the value ofx. This sequence of instructions is performed against the background of a database, i.e., a model of first order logic. The sequence succeeds if the database contains (representations of) men, and it can succeed in as many ways as there are men available in the database.</Paragraph> <Paragraph position="4"> The motivating examples for the shift from static to dynamic representation have to do with pronoun binding. The translation of phrases like 'a man' in terms of assignments of values to registers makes it possible to treat binding of pronouns across sentence boundaries (the next sentence can start with 'He' to pick up the reference to 'a man'). The nice thing about the treatment in terms of assignment is that the scope of the existential quantification is not closed off at the end of a sentence, as used to be the case for NL systems that employ static representation (in terms of the existential quantifiers of predicate logic, with their irritating closing brackets). Recently, it has become clear that dynamic representation has some other interesting features: * It becomes possible to give an account of presupposition failure phenomena in terms of the definition of an error state semantics for the dynamic representation language \[3; 2\]. Presupposition failure occurs for example if one tries to interpret &quot;John's wife is unhappy&quot; in a situation where John is not married.</Paragraph> <Paragraph position="5"> * A more natural treatment of tense becomes possible. A sequence of sentences in the past tense like &quot;A man walked in. He sat down. He ordered a drink&quot; etc, is represented using subsequent assignments of values (time intervals) to a dedicated time register t \[10\].</Paragraph> <Paragraph position="6"> The dynamic representation language can be analysed with tools that were originally designed for analysing imperative programming languages, namely the tools for precondition reasoning from Itoare logic or dynamic logic \[11\]. Precondition reasoning for dynamic predicate logic with standard semantics was introduced in \[4\]. Precondition reasoning gives the truth conditions of DPL representations in the form of formulas of first order logic (FOL).</Paragraph> <Paragraph position="7"> When applied to the error state semantics of DPL, precondition reasoning can also be used to find the presupposition failure conditions of DPL representations as FOL formulas.</Paragraph> <Paragraph position="8"> We provide an integrated treatment of syntax and semantics of a small fragment of natural language and test this by implementing it. The syntax of our toy grammar is a version of categorial grammar with feature unification. The semantics uses DPL representations, with an error state semantics which is reflected in the rules for precondition reasoning implemented in the precondition module. This module generates predicate logical formulas expressing the weakest preconditions of success, failure or error of the DPL representations.</Paragraph> <Paragraph position="9"> In detail, our interpretation strategy consists of the following steps: 1. Parsing a sentence or text and building a representation tree of its structure.</Paragraph> <Paragraph position="10"> 2. Translating the parse tree into a DPL program.</Paragraph> <Paragraph position="11"> 3. Using precondition reasoning to compute pre-conditions as formulas of FOL.</Paragraph> <Paragraph position="12"> 4. Simplifying the preconditions using a simplifier for FOL formulas.</Paragraph> <Paragraph position="13"> 5. Evaluating the resulting formulas in a database model.</Paragraph> <Paragraph position="14"> The current implementation produces for an input text within the grammar fragment: a LaTeX form report containing the sentence, the parse tree, the DPL translation, the precondition of success, the precondition of failure and the precondition of error, all in simplified form, and the result of evaluation in the database.</Paragraph> </Section> <Section position="4" start_page="61" end_page="64" type="metho"> <SectionTitle> 2 Dynamic Predicate Logic 2.1 Informal discussion </SectionTitle> <Paragraph position="0"> DPL meaning representations for natural language sentences can be viewed as procedures or programs with a relational semantics. The programs that represent the meanings are interpreted as relations between input states and output states. A state is a mapping from variables to values in a model (in our simple set-up all variables are of the same type). The representation for an example sentence such as &quot;John saw a man&quot; is a program which associates John with a variable z, a man with a variable y, and first checks whether the value of x equals John, next puts a value in y which satisfies the predicate of being a man, and finally checks whether the values of z and y are such that the first saw the second.</Paragraph> <Paragraph position="1"> Thus, the representation of &quot;John saw a man&quot; is a program which relates input states where z is mapped to John to output states where z is mapped to John and y is mapped to some man seen by John.</Paragraph> <Paragraph position="2"> If the evaluation takes place in a model where John saw several men, then there are several possible output states. If the evaluation takes place in a model where John saw no men at all, then there is no output. A program that yields no output for a given input fails for that input. A program yielding at least one output for a given input succeeds for that input.</Paragraph> <Paragraph position="3"> A program which yields at most one output for a given input is deterministic for that input. A program which yields more than one output for a given input is indeterministic for that input. The example &quot;John saw a man&quot; shows that indefinite descriptions may give rise to indeterministic programs. Deterministic programs that do not change their input are called test programs. If a test program succeeds, its output equals its input. The sentence &quot;John saw him&quot; would give rise to a test program. Assuming that the variable z, y are used for the subject and object of the sentence, respectively, the program will succeed for any input with x mapped to John and ~/ mapped to some male individual seen by John. In this case success means that the output state equals the input state. The program will fail for any other input.</Paragraph> <Paragraph position="4"> All basic programs of DPL are tests; they do not change their input, and they succeed if the values of terms are in a specified relation and fail otherwise.</Paragraph> <Paragraph position="5"> Indeterminism in DPL arises from assignment programs. The assignment program for an indefinite description a man will assign a new value to a variable x and succeed for any value of z which is a man.</Paragraph> <Paragraph position="6"> This is called indefinite assignment. The assignment program for a definite description ~he manager gives a value to a variable if and only if there is only one possible value in the model under consideration.</Paragraph> <Paragraph position="7"> Complex programs can be formed by means of negation, implication and sequential composition.</Paragraph> <Paragraph position="8"> Negation and implication always form tests, but se- null quential composition does not. Sequential compositions are tests if and only if the component programs are tests.</Paragraph> <Section position="1" start_page="62" end_page="62" type="sub_section"> <SectionTitle> 2.2 Syntax </SectionTitle> <Paragraph position="0"> For ease of exposition we will assume there are no function symbols in the DPL representation language, so the terms of DPL are either constants or variables. Let C be the set of constants, V the set of variables, and assume c E C, v E V.</Paragraph> <Paragraph position="1"> DPL terms t ::= c I v.</Paragraph> <Paragraph position="2"> Assume a set of relation symbols R with arities.</Paragraph> <Paragraph position="3"> Then the programs of DPL are given by the following BNF definition.</Paragraph> <Paragraph position="4"> DPL programs ~r ::= t = t I Rt...t \[ Qr;r) \[(r ::~ I I v: I,v : We will use man, see as the relation symbols that translate &quot;man&quot;, &quot;see&quot;, and so on. Thus, (1) is a DPL program.</Paragraph> <Paragraph position="6"> We will omit outermost brackets and brackets in sequential compositions like ((71&quot;1;7i'2);r3). This is harmless, for sequential composition is associative.</Paragraph> <Paragraph position="7"> Also, we will abbreviate r\]v : v = t as v := t. This abbreviation is natural, as the sequential composition of random assignment to v and test for equality with t boils down to assigning the value of t to v.</Paragraph> </Section> <Section position="2" start_page="62" end_page="63" type="sub_section"> <SectionTitle> 2.3 Indices for Antecedents and Anaphors </SectionTitle> <Paragraph position="0"> In the natural language fragment we treat, we use co-indexing to indicate intended anaphoric links.</Paragraph> <Paragraph position="1"> We follow Barwise \[1\] in using superscripts for antecedents and subscripts for anaphors.</Paragraph> <Paragraph position="2"> (2) A man walked in. He smiled.</Paragraph> <Paragraph position="3"> If we intend the pronoun in (2) to refer to the subject of the first sentence, we indicate this intention as follows.</Paragraph> <Paragraph position="4"> (3) A man 1 walked in. He1 smiled.</Paragraph> <Paragraph position="5"> The superscript on the indefinite noun phrase indicates that this NP acts as an antecedent for NPs with the same index as a subscript. The subscript on the pronoun indicates the antecedent to which the pronoun is linked.</Paragraph> <Paragraph position="6"> The use of subscripts and superscripts is necessary because noun phrases can act as anaphors and antecedents at the same time.</Paragraph> <Paragraph position="7"> (4) A man I walked in.</Paragraph> <Paragraph position="8"> Another man~ walked ont.</Paragraph> <Paragraph position="9"> Hez was angry.</Paragraph> <Paragraph position="10"> In example (4) the noun phrase another man is anaphorically constrained by an antecedent noun phrase a man (it must have a different referent), and at the same time acts as antecedent for the second occurrence of a man.</Paragraph> <Paragraph position="11"> The superscripts and subscripts refer to the variables we employ in the translation of the noun phrases. Superscripts correspond to variables that get assigned a value in the translation, subscripts to variables that are simply used. Sentence (5) will get translated as (6) (tense is ignored, here and hereafter, for ease of exposition).</Paragraph> <Paragraph position="12"> (5) John 1 saw a man 2.</Paragraph> <Paragraph position="13"> (6) vl := J; : man( 2); see( l,,2).</Paragraph> <Paragraph position="14"> Sentence (7) gets translated as (8).</Paragraph> <Paragraph position="15"> (7) Mary 3 ignored himx.</Paragraph> <Paragraph position="16"> (8) va := M; ignore(va, vl).</Paragraph> <Paragraph position="17"> Sentence (9) gets translated as (10).</Paragraph> <Paragraph position="18"> (9) Shea saw another man~.</Paragraph> <Paragraph position="19"> (10) ~/v4; v4 C/ v2; man(v4); see(va, v4).</Paragraph> <Paragraph position="20"> Turning now to definite descriptions, the natural translation of example (11) is (12).</Paragraph> <Paragraph position="21"> (11) John I saw the man 2.</Paragraph> <Paragraph position="22"> (12) vl := J; ~v2 : man(v2); see(vl, v2).</Paragraph> <Paragraph position="23"> In the error state semantics for DPL that we have in mind for this, (12) gives error in every model where there is no unique man. It is clear that in most cases this is too strong. Still, we do not think this is a serious problem for our general approach. It seems to be a linguistic fact that definite descriptions often are used in a context-dependent way, to designate a unique referent in a very specific context, which however is not made fully explicit.</Paragraph> <Paragraph position="24"> One context where (11) makes perfect sense is a situation where John and some other male individual are present, and where it is left implicit that John is excluded from the context where the reference is unique. In such cases we propose to read the definite description as uniquely satisfying the description plus the extra condition of being non-identical with some constraining antecedent, in this case the subject of the sentence. This strategy boils down to reading (11) as (13).</Paragraph> <Paragraph position="25"> (13) John 1 saw the other man~.</Paragraph> <Paragraph position="26"> Here the determiner the otheri is treated similarly to anotheri. This gives translation (14).</Paragraph> <Paragraph position="27"> (14) Vl := J; ,v2:(v2 C/ vi; man(v2)); see(vi, cases another mechanism seems to be at In many work.</Paragraph> <Paragraph position="28"> (15) A man walked in. John saw the man.</Paragraph> <Paragraph position="29"> Example (15) has a natural reading where the definite description is anaphorically linked to an antecedent. We propose to make such implicit anaphoric links explicit, as in (16).</Paragraph> <Paragraph position="30"> (16) A man a walked in. John 2 saw the man~.</Paragraph> <Paragraph position="31"> If we provide the right translation instruction for such anaphoric uses of the, we arrive at translation</Paragraph> <Paragraph position="33"> This gives the man~ the meaning: the unique man that is equal to vl, with v3 available for later reference to this individual. It seems to us that this gives the correct result, in the present case and in lots of other cases.</Paragraph> <Paragraph position="34"> In the case of (18) we still run into trouble, how- null ever.</Paragraph> <Paragraph position="35"> (18) The man with the hat smiled.</Paragraph> <Paragraph position="36"> Here, the natural translation is (19).</Paragraph> <Paragraph position="37"> (19) +vx : (man(v1); ,vz : hat(v2); is-of(v2, vl); smile(v1).</Paragraph> <Paragraph position="38"> This translation contains a definite assignment ev2 : hat(v2), so it seems to assume that there is a unique hat in the domain of discourse, which is perhaps a bit too strong. There are at least the following two ways out. One is by handwaving. Just remark that in descriptions like the man with the golden gun, the second definite article is not quite as definite as it looks, and the description is in fact idiomatic for the more strictly correct the man with a golden gun. The other escape is to add an epicycle to the analysis, in order to achieve that man 1 with1 the hat 2 translates into (20).</Paragraph> <Paragraph position="39"> (20) man(~)l); t~)2: (hat(I)2)&quot; ~ i8-0f(I;2,1)1) ). We provisionally opt for the first solution.</Paragraph> </Section> <Section position="3" start_page="63" end_page="64" type="sub_section"> <SectionTitle> 2.4 Semantics </SectionTitle> <Paragraph position="0"> The standard DPL semantics maps input states to sets of possible output states. Let a model .A4 = (M, II, where M is the domain and I the interpretation function for a set of constants and relation symbols be Kiven. Then the set of states is the set of functions M v , and the standard semantics for DPL is given by a function \[.\]~ : M V --+ ~p(MV).</Paragraph> <Paragraph position="1"> In order to capture the uniqueness presuppositions of definite descriptions, we replace the standard semantics by an error state semantics. In a Russellian account of definite descriptions, &quot;The king of France is bald&quot; when evaluated with respect to the state of affairs in 1905 or 1993 is false, for there is no unique referent for the description. But it is much more natural to follow Frege, Strawson and the majority of the linguistic community in assuming that statements involving &quot;the king of France&quot;, when interpreted with respect to a state of affairs where there is no unique king of France, may be neither true nor false, because they suffer from presupposition failure.</Paragraph> <Paragraph position="2"> We propose to use an error state semantics to take in account the failure of uniqueness presuppositions of t assignments. The error state semantics of DPL if given by a function \[.\].~ : (M e t.J <r) -+- :P(M V 12 e).</Paragraph> <Paragraph position="3"> In the definition of this function, which follows, e refers to a special error state, A ranges over proper states, B ranges over states in general (including the error state), and A\[x := d\] is used for the proper state which is like A, except for the fact that z is mapped to d.</Paragraph> <Paragraph position="5"> if d exists {e} otherwise. More information on this definition can be found in \[2\]. For present purposes it is sufficient to note that a DPL program can execute in three different ways, when acting on a given input state: 1. The program reports success by producing at least one proper output state. For example, the program man(vx) when acting on an input state where Vl refers to John will succeed and return the input state as its only output state.</Paragraph> <Paragraph position="6"> 2. The program reports failure by not producing any output at all. For example, the program rlvl : woman(v1) will fail for any input state (except e) if there are no women in the model under consideration (its output state set will be empty).</Paragraph> <Paragraph position="7"> 3. The program reports error by producing e as its only output. For example, the program ,.vl : manager(v1) will produce e for any input state if the model under consideration does not have a unique manager.</Paragraph> </Section> </Section> <Section position="5" start_page="64" end_page="65" type="metho"> <SectionTitle> 3 Preconditions of DPL programs </SectionTitle> <Paragraph position="0"> Above, we have referred to DPL formulas as programs. We are now going to use tools for programming language analysis on DPL. We will use quantified dynamic logic over DPL to describe the pre-conditions for success, failure and error of DPL programs. null QDL terms t ::= c I v, qDLprograms lr ::= t = t \] Rt...t I Or; It) \] QDLformulas ~::=t--tIRt..-tl(~A~)l--~l Note that the QDL programs are precisely the DPL programs. An atomic relation Rtl, ..., tn can occur inside a QDL program or as an atomic QDL formula, so we need to distinguish the programs of QDL from the static QDL relations. We use boldface for the test program Rt~ ... tn and italics for the formula Rt t ...t~.</Paragraph> <Paragraph position="1"> We omit outermost parentheses as usual, and use T for a formula which is always true, I for a formula which is always false.</Paragraph> <Paragraph position="2"> The semantics of QDL is as for first order logic, with the following clauses for the program modalities Note that (~r) and \[~r\] are not duals. (~')T expresses the conditions for success of ~r, \[~-\].L the conditions for failure of z. It follows that ~(~r)T A --\[~r\].l_ expresses the conditions for error.</Paragraph> <Paragraph position="3"> The following axiom schemata can be used to compute these conditions as formulas of FOL.</Paragraph> <Paragraph position="4"> 1. (Rt, ... t,,)~ ~ (ntt ...t, A ~).</Paragraph> <Paragraph position="5"> 2. \[Rt, ...t,\]to ~ (Rtt...tn -~ 9).</Paragraph> <Paragraph position="6"> ~. (t, = t,)~, ~ (t~ = t~ ^ 9).</Paragraph> <Paragraph position="7"> 4. It, = t~\]~, ~ (t~ = t~ --. 9)6. \[~, ;~:~\]~ ~ \[~,\]\[~\]~.</Paragraph> <Paragraph position="8"> 7. (-,~)~ ~ (~, ^ \[~\]+-).</Paragraph> <Paragraph position="9"> 8. \[-~-\]~, ~ ((~)-r v (~, ^ \[~-\]+-)).</Paragraph> <Paragraph position="10"> 10. \[~r, =~ ~r,\]~ ~ ((\[~',\]((~r,)T V \[~r,\]J_)) A (\[~r,\](~,)T --~ 9))11. (n,,: ,r)~, ~. a~,(,,-)~,.</Paragraph> <Paragraph position="11"> 12. Nv: ~r\]~# --Vv\[vr\]~.</Paragraph> <Paragraph position="12"> 14. \[,,,: ~-\]~, ~ (a!v(~-)T ^ V,,((~-)T --+ \[~-\]~)). The most interesting item of this list is the universal schema for t assignment (item 14). To see what it means, note that \[~r\]m expresses that all output states of ~r are proper. The schema states that the following are equivalent: * For proper input state A, the program tv : lr does only have proper output states, and all of these satisfy ~a.</Paragraph> <Paragraph position="13"> * For proper input state A there is precisely one d E M for which 7r has a proper output on input A\[v :- d\], and for all d' for which ~r has proper outputs on A\[v := d'\], all outputs of lr on A\[v := d'\] are proper and satisfy 9.</Paragraph> <Paragraph position="14"> It is not very difficult to see that these are indeed equivalent, so the axiom schema is sound, as are the other axiom schemata.</Paragraph> <Paragraph position="15"> The axiom schemata can be used to calculate the truth, falsity and error conditions of DPL programs as formulas of FOL. If we represent a first order model as a database, then evaluation of DPL in a model reduces to evaluation of first order formulas in the database.</Paragraph> <Paragraph position="16"> An example will make clear how the axioms may be used to compute preconditions of DPL programs as FOL formulas. Consider example (21) with translation (22).</Paragraph> <Paragraph position="17"> (21) If a woman is married, her husband looks after her.</Paragraph> <Paragraph position="18"> (22) (qx : Wx; Mx) =~ (~y: gyx; Lyx).</Paragraph> <Paragraph position="19"> Here is the derivation of the truth conditions.</Paragraph> <Paragraph position="21"> To calculate the falsity conditions, we can use theorem (23), which is derivable from the axiom schemata: Applying theorem (23), we get the following falsity conditions for (22):</Paragraph> <Paragraph position="23"> and doesn't fail. Modulo some FOL reasoning the conditions for this are given by (24): (24) 3x(Wx A Mx A -,d!yYyx).</Paragraph> <Paragraph position="24"> This means that in all models where married women do have unique husbands, program (22) will never abort with error. In other words, the calculus allows us to derive that the presupposition of the definite description has been cancelled by the implication.</Paragraph> </Section> <Section position="6" start_page="65" end_page="67" type="metho"> <SectionTitle> 4 The Implementation </SectionTitle> <Paragraph position="0"> The parser The grammar for our fragment uses categorial feature unification, and the parser is based on standard techniques for such grammars. The syntax consists of a lexicon, which associates categories with lexical items, a category descriptor which gives definitions of complex categories in terms of simpler categories and some reduction rules.</Paragraph> <Paragraph position="1"> Basic categories are S without features, and E with features for number, person, case, uindez for up index (= antecedent index) and dindex for down index (= anaphor index). Complex categories are built with / and \ and the constraints on feature unification in the usual way. The index features uindez and dindez also occur on noun phrases and determiners. Here are some examples of complex categories (, marks the feature values that do not matter).</Paragraph> <Paragraph position="3"/> <Paragraph position="5"> mS.</Paragraph> <Paragraph position="6"> The translator The translator uses A-calculus to translate parse trees into DPL programs* We could have translated on the fly, building translations while parsing, but the present set-up seemed preferable for reasons of modularity of design.</Paragraph> <Paragraph position="7"> The translation algorithm makes use of a lexical function mapping pairs consisting of a lexical item with an associated category to A-expressions in the lexicon, along the lines of \[9\].</Paragraph> <Paragraph position="8"> Translating a sentence into DPL boils down to lambda reduction of the lambda expression which results from combining the lambda expressions associated with the leaves of the parse tree, according to the rules of functional application dictated by the categorial structure.</Paragraph> <Paragraph position="9"> Here are some examples of lambda expressions associated with lexical items with categories. Note that we assume the presence of indices in the lexicon, so we can handle anaphoric links by co-indexing.</Paragraph> <Paragraph position="10"> For a proper understanding of the translation instructions one should bear in mind the distinction between DPL variables that are used for DPL assignment and lambda calculus variables. We use lower case for the first and upper case for the latter.</Paragraph> <Paragraph position="11"> Translation for man, N(Sg): AVl.m..(VI).</Paragraph> <Paragraph position="12"> Translation for John i,NP(Sg,Third,*,i,*):</Paragraph> <Paragraph position="14"/> <Paragraph position="16"> All these translations are typed, but we have left most of the typing discipline implicit. For example, the translations of noun phrases all are of the type of (dynamic) generalized quantifiers, which take a property to give a DPL program. The translation of proper names is a dynamic variation of the Montague treatment for proper names \[8\]. In extensional Montague grammar, proper names translate into expressions denoting the set of properties which are true of the named individual. Here, proper names translate into expressions that for every property give the DPL program which first assigns the name of the individual to the index variable of the proper name, and then tests for the property. This is like in Montague grammar, but with a dynamic touch added. Anaphoric links to the name remain possible by means of the index variable as long as its value remains unchanged.</Paragraph> <Paragraph position="17"> Other noun phrases with a dynamic flavour are indefinite and definite descriptions. Indefinite descriptions translate into expressions that for every property give the DPL program which does an indefinite assignment to an index variable and tests for the property. Definite descriptions are handled likewise, but with definite assignment instead of indefinite assignment.</Paragraph> <Paragraph position="18"> (25) John x uses his pc~.</Paragraph> <Paragraph position="19"> As an example, we treat the translation of (25), which is obtained starting from the following parse tree:</Paragraph> <Paragraph position="21"> In the same way, (26) gets translated into (27).</Paragraph> <Paragraph position="22"> The declarative semantics of GSdel improves on the semantics of Prolog: extra-logical Predicates (such as vat, nonvar, assert, retract, ! .... ) are avoided and sometimes replaced by declarative counterparts. Like Lambda Prolog \[7\], GSdel is a typed language: it is necessary to declare the type and domain of all functions and predicates (polymorphism is allowed, however). This convention makes program writing a bit more cumbersome, For example, we have to declare the type Program for representing a DPL program. For each DPL statement, it is necessary to define a function to build a Program (example: Piota : Variable * Program ~ Program). We also have to declare a type Expression for A-expressions. Some complications arise from the fact that an expression may contain a DPL program and vice versa. On the plus side, more errors are detected during compilation, the compiler generates more efficient code, and the typing discipline makes for more legible, comprehensible programs. Last but not least, the typing discipline has obliged us to think a bit more about the clauses we were writing than we perhaps would have done otherwise.</Paragraph> <Paragraph position="23"> GSdel has facilities that permit elegant metaprogramming. In Prolog the program and the meta-program are not independent: the predicates assert and retract modify the program itself in which these predicates occur. In GSdel, program and meta-program are completely independent. It is possible for a program to load another program, to modify this other program by inserting or retracting predicates, functions or types, and to demonstrate a goal. In our implementation we use these facilities to represent a model as a logic database and a precondition as a complex goal.</Paragraph> </Section> class="xml-element"></Paper>