################################################ # # # ## ## ###### ####### ## ## ## ## ## # # ## ## ## ## ## ### ## ## ## ## # # ## ## ## ## #### ## ## ## ## # # ## ## ###### ###### ## ## ## ## ### # # ## ## ## ## ## #### ## ## ## # # ## ## ## ## ## ## ### ## ## ## # # ####### ###### ####### ## ## ## ## ## # # # ################################################ The following paper was originally published in the Proceedings of the USENIX 1996 Conference on Object-Oriented Technologies (COOTS) Toronto, Ontario, Canada, June 1996. For more information about USENIX Association contact: 1. Phone: 510 528-8649 2. FAX: 510 548-5738 3. Email: office@usenix.org 4. WWW URL: https://www.usenix.org Highly Concurrent Distributed Knowledge Objects K.L. Clark, T. I. Wang Department of Computing Imperial College London klc,tiw @doc.ic.ac.uk Abstract This paper introduces a distributed object oriented logic programming language, DK Parlog , in which each object, in addition to the normal procedural methods for accessing and updating state components, also has knowledge methods in the form of Prolog rules. The language is an OO extension of a distributed, multi-threaded, logic programming system. Encapsulation is by class definitions linked via single inheritance. Procedural method invocation is via asynchronous message send to the unique object identifier. Knowledge method invocation is via synchronous remote procedure call. Classes are also objects - they have their own state components and methods. An application in D Parlog consists of a collection of concurrently executing objects(classes and instances) distributed over a local area network. The knowledge methods can be public or private, and can be dynamically modified by the procedural methods of the object using Prolog style knowledge base manipulation primitives. The dynamic knowledge of an object can be used as a declarative representation of part of its state. This paper assumes some familiarity with concepts of concurrent object oriented programming and logic programming, ideally concurrent logic programming, but familiarity with Prolog will probably suffice. Introduction Shapiro and Takeuchi first demonstrated the potential of combining Concurrent Logic Programming (CLP) and OOP to form a new programming paradigm. They investigated the possibility of implementing active objects, with encapsulated state, as processes in a CLP language. In their model, an object is implemented as a tail-recursive process that passes the updated state components of the object as arguments in the recursive call. Following their model, several language proposals such as Polka , Vulcan and A'UM have since emerged. Each is essentially syntactic sugar for defining the CLP process that will implement each instance object. Most of these languages use a class declaration (or an equivalent) just as the vehicle for defining the methods of the instances of the class. The class declaration is compiled into a procedure definition in the CLP language. Creating an instance of a class is then just syntactic sugar for a direct invocation of this procedure as a recursive process. In this approach, no global information about these created instances is automatically kept. Thus, no managing operations on these instances can be conveniently performed. For example, one cannot easily broadcast a message to all the members of the class. In addition, objects cannot be given public names, so in order for one object O to send a message to another object O', O must be passed the identity of O' in a message, or be given the identity as the value of one of its state components when it is created. Finally, inheritance is generally implemented as message delegation, and for each created instance of a subclass there will be a string of processes forked, one for each level in the class hierarchy. This is perhaps acceptable in a non-distributed system, but is not accepted if the different processes might reside on different machines. We have adopted a somewhat different approach in constructing our OO extension of a distributed version of the concurrent logic programming (CLP) language Parlog . In our approach, classes are active objects, they have there own methods and, like the class instances, are implemented as Parlog processes. Classes are also the main mechanism for distributing the computation. We just load different class objects onto different machines of a local area network. All the active instances of a class will, by default, reside on the same machine as the class, but an inheriting class, and hence all its instances, can reside on another machine. Inheritance of class methods is implemented using delegation, but inheritance of instance methods is implemented using code copying at compile time as in Smalltalk . So instance level method inheritance, even when the superclass resides on a different machine, does not require a delegation communication between the machines. All object methods, whether for class or instance objects, are invoked by sending a message to the object denoted by its unique object identity. A class object's identity is its public name, such as bank , given in the program. An instance identity can either be programmer assigned, or system generated. The fact that instance objects can have public names is another distinguishing feature of the language. M => O sends message M to O asynchronously. The language is highly concurrent. All objects can process their stream of incoming messages concurrently. That is, as soon as a message is accepted, and the method for the message is activated, the object is able to accept the next message. In addition, each of the actions of a method can be executed concurrently. So DK Parlog objects can exhibit the high degree of internal concurrency of actors . On the other hand, the actions of a method can be sequentialised if need be, and much more easily than in the actor paradigm. It is simply a matter of defining the method as a sequential, rather than parallel, conjunction of actions. Adding knowledge to objects A major shortcoming of the CLP based OO languages is that method calls can only return one solution. This is because of the committed choice non-determinism of the underlying CLP language. However, to many, logic programming is identified as the definition of relations, and with queries that return multiple solutions. So, as well as having the normal single solution procedural methods, every object in D Parlog can also have knowledge methods, expressed as Prolog clauses. These knowledge methods can be further subdivided into public and private knowledge methods. In contrast to the procedural methods, which cannot be changed, knowledge methods can be dynamically modified during the lifetime of an object. The public knowledge component of an object O can be queried from any other object with a query the form O?Q . This is a synchronous remote procedure call. Since a new query on an object's public knowledge can arrive before it has answered the last query, an object will accept and concurrently execute a new query as soon as the preceding query evaluation has commenced. For each object there is a queue of queries to its public knowledge, as well as the queue of messages invoking its procedural methods. The caller receives an answer as soon as the first solution to its query is found. If the query was from in a procedural method of the caller, this is the end of the query computation. However, if it was from a knowledge method of the call, backtracking within this caller knowledge method may require further solutions of the query. A distributed backtracking scheme handles the request and delivery of successive solutions between caller and callee object. Finally, the dynamic knowledge of an object gives us an alternative way of encoding state information about the object. The special knowledge manipulation primitives, which can only be called from a procedural method of an object or its class, allows the runtime manipulation of the dynamic knowledge of an object. A knowledge update call enters the query queue for an object, however, to maintain consistency of evaluation, the knowledge update will be only be executed when all previously accepted queries have completely terminated. No new query will be accepted until the update has terminated. Evaluation of the knowledge queries is handled by IC-Prolog II , a multiple-threaded Prolog system which is linked with the underlying Parlog system of DK Parlog . Full details of the implementation of DK Parlog are given in . An introductory example Our first example comprises the two class definitions given in Program . In this example there are no program defined class variables or methods (although as we shall see there are system added class variables and methods) and there are no knowledge methods. The first class, called account , defines the basic information and some simple operations for a bank account. The instance state component includes variables for the name of the account holder, the balance of the account and the accumulated interest over a certain period. Two methods are shown in the instance definition. The first is a simple inquiry method which returns the present balance of the account, and the second is a method to calculate, on request, the interest earned by the account. Notice that the second instance method calculate interest/0 uses a state component InterestRate which is not defined yet. The assumption is that this will be an instance variable of each subclass of account and that only instances of these subclasses will be created. In this example, there is no particular advantage to not having the state component InterestRate in account . It is done just to demonstrate the flexibility of using inheritance for organizing classes. However, using the same idea for methods is quite useful. We can invoke an as yet undefined method using a self communication and different subclasses can implement the method in different ways. class account at laotzu with instance_definition states Holder,Balance:=0,AccInterest:=0. methods balance(BAL) -> BAL = Balance. calculate_interest -> AccInterest := AccInterest + InterestRate * Balance. class current isa account at lipo with instance_definition states InterestRate, CreditLimit. methods credit(AMOUNT) -> Balance := Balance + AMOUNT. debit(AMOUNT, ANSWER): Balance >= AMOUNT -> ANSWER = AMOUNT, Balance := Balance - AMOUNT. debit(AMOUNT, ANSWER): VitualBalance is Balance + CreditLimit & VitualBalanc >= AMOUNT -> ANSWER = AMOUNT, Balance := Balance-AMOUNT. debit(AMOUNT, ANSWER) -> ANSWER is Balance+CreditLimit, Balance := - CreditLimit. collect_interest -> Balance := Balance+AccInterest, AccInterest := 0. Current Account class through inheritance Next, the program defines another class current , which inherits the account class. Every class does have some systen added class variables and methods. For example, in each class there is a class variable Members which holds the identities of all the current instances of the class. It also has a visible method for accessing the value of this class variable and invisible methods, invoked on instance creation and termination, for updating it. In current class, two instance state variables are defined, one is the expected InterestRate , and the other is the CreditLimit , which will hold the maximum amount an account can be overdrawn. Thus, for creating an instance of the current class, one might use a create message as: create(AccountID,0.02,400, `Debbie',2000,_) => current Notice that initial values for the bottom object are given first, but also that all state components, including the inherited ones, need to be mentioned in the create. The value of the last state variable, AccInterest , is given as `_'. This indicates that the default value given in the class definition should be used. The 2000 given for the initial value of Balance overrides its default value. In addition to the two methods inherited from its superclass, instances of the current class have five more methods. The credit/1 method is very simple, and just adds the AMOUNT into the balance of the account. The next three are all mehtods for handling a debit/2 message but each deals with it differently depending upon the current value of the state variable Balance . The first two have the structure message_pattern : test -> actions with the : introducing the test to be applied before that method is used. Notice that the last method for debit/2 does not have a test. It is the default rule that will be used only if the previous two rules are not applicable. The first method treats the case that the current Balance is sufficient for the withdrawal. The withdrawal is granted by assigning the value of AMOUNT to the ANSWER variable and the balance is reduced accordingly. If the balance is insufficient, but the shortage can be covered by the credit limit, the withdrawal is also granted with the balance going into a debt status. The sum of the balance and the credit limit is, however, the maximum amount for a withdrawal. If the credit limit cannot cover the shortfall then the amount withdrawn is reduced to Balance + CreditLimit (the default method). Finally, there is a method collect interest/0 for transferring the accumulated interest into the balance and clearing the accumulated interest. As can be seen in these methods, instance state variables declared in the superclass can be accessed directly in the instance methods of the subclass. Finally, note that the account class is specified as residing on the machine laotzu, while the current class is on the machine lipo. Knowledge Representation in Objects Static Knowledge is given as Knowledge Methods alongside the procedural methods. Dynamic knowledge is asserted into objects either when the object is created or after it has been created. Knowledge declared in the class definition section of a class is local to the class process, while knowledge declared in the instance definition section of a class is global to all instances, i.e. it is automatically possessed by any instance when it is being created. Knowledge asserted into an object is local to the object itself. All instance level knowledge methods declared in the class are inherited when an inheritance link is declared. As in L O , knowledge inheritance can be inclusive or overriding. Static Knowledge Declaration A knowledge method is just a Prolog clause for a predicate p/k of the form: CallPattern [ :- Actions ] . The CallPattern is an atomic formula of the form: p( t ,...., t ) Knowledge methods are distinguished from procedural methods by use of the Prolog if connective :- instead of the connective -> . Actions is a conjunction of Prolog conditions, and constitutes the body of the clause. To query the knowledge in another object O we use the call O ? Q . A simple example is: customer?the best(Banks,Prof,Type,BestBank, BestRate,InitCredit). It is executed as a remote procedure call. Invoking a knowledge method not defined in an object simply fails the invocation. As with procedural methods, the next call to a knowledge method can be accepted and executed by an object whilst the previous call is still being processed. There are exceptions to this immediate acceptance of the next call. Knowledge update calls will be delayed until all existing query calls have terminated. This will be discussed more fully later. Private knowledge can be given as Prolog clauses in a special code section of the object. This section can also include Parlog definitions, which can be used as private procedural methods. class customer with class_definition methods ..... the_best(Banks,Prof,Type,BestBank, BestRate,InitCredit):- findall( (Bank,Rate,Init), (on(Bank,Banks), Bank?rate(Type,Prof,Rate,Init)), ANS), find_the_best(ANS, BestBank, BestRate, InitCredit). instance_definition states Name. methods which_bank(Prof,Type,Bank,Rate, InitCredit) :- members(Banks) => banks, class?the_best(Banks,Prof, Type,BestBank,BestRate,InitCredit). : : code_definition find_the_best(Tuples,BestBank, BestRate,InitCredit):- .. . Knowledge methods in a customer class A simplified class structure which declares a class customer for a financial advice program is shown in Program to demonstrate the use of knowledge methods. The which highest/6 knowledge method in the class definition is meant to find out which bank offers the best interest rate on a certain type of account for a certain type of customer. It receives from its first three arguments a list of bank names, the profession of a customer and the type of the account the customer intends to open, then uses the Prolog style findall/3 predicate to find out, of all the banks, the interest rate for the specified types of account and profession and the initial credit required for the type of account, and finally passes the information to a private procedure to figure out which bank should be recommended. The use of findall/3 predicate fully reflects the desire of the searching capability in an object. A knowledge access communication is used in the call of the findall/3 predicate to access the interest rate and the required initial credit of an account type for each kind of profession, the semantics of such knowledge access operation will become clearer later. The other instance level knowledge method which bank/5 uses a mutual communication to get the list of banks from the banks class.( member/1 is a system added class method for accessing the list of current member of a class.) It then uses a class communication to access the knowledge of the best bank choice. Class communications can be used deliberately to access knowledge kept in the class level. The purpose of Program is to show how knowledge methods can be declared in both class and instance definition sections. Here, the functionality of the only the best/6 class knowledge method could have been implemented by a procedural method which invoked a private Parlog recursive procedure. However, morte generally, there might be several different ways of `rules of thumb' for determining the best bank for for a type of customer and account in which case it is better to use Prolog style rules for encoding such advisory rules. Dynamic Knowledge Assertion While static knowledge represents long term information provided by an object, dynamic knowledge is object specific or updatable information. There are two ways for associating dynamic knowledge to an instance. One is to attach a sequence of knowledge methods to the create message sent to a class. When the instance is created, the sequence of methods will become the initial dynamic knowledge. The other is to use a special system predicate to assert a single knowledge method into an existing instance. To add dynamic knowledge to a class process, obviously only the second way can be use. There is no difference in accessing the two kinds of knowledge. To signal what an object can have in its dynamic knowledge, a dynamic declaration must be included in either the class definition or the instance definition section of a class structure. The declaration is a list of name/arity terms giving the dynamic predicates. As an example, class banks declared in Program is for spawning bank instances for the financial advising program in the previous section. It is simplified and its instance definition section contains a dynamic declaration which specifies that profit margin/2, rate/4 are dynamic. There is no dynamic declaration in the class definition section, which means no dynamic knowledge methods can be acquired by the class process. Following the class definition comes a statement for creating an instance of the banks class. The general format is: create( object id [ , arugments ] ) with [ Knowledge Methods ] => class identity [ at machine identifier ] The optional with gives extra Knowledge Methods which are the dynamic knowledge methods local to the new object. What is local to this created bank instance, which has the public name barclays , are three facts about the profit margins, set for different professions, above the base interest rate, and another three rules for providing the information on interest rates and minimum credits on different types of accounts. This information is given as clauses for the dynamic predicates profit margin and rate . The instance with the name midland , created by the message send of , has different definitions for these dynamic predicates. Each bank has its own data and rules, its own enterprise rules . A message send operation create(kate,`kate smith') => customer will create an publically named customer instance from the customer class. Notice that kate is the public name of the object, whereas `Kate Smith' is the string value of the Name state variable held inside the object. A method invocation such as: which bank(student, current, Bank, Rate, InitCredit) => kate will result in the following answer bindings: Bank = midland Rate = 3.1 InitCredit = 100 class banks with. class_definition states BaseRate. methods new_base_rate(NBR) -> BaseRate := NBR. base_rate(BR) -> BR = BaseRate. : : instance_definition dynamic profit_margin/2, rate/4. states BankName, Manager. methods : : . create(barclays, `Barclays Bank Plc',jane) with profit_margin(student, 0.4). profit_margin(general, 0.5). profit_margin(business,0.6). rate(current, Profession,Rate,InitCredit) :-base_rate(BR) => class, profit_margin(Profession, PM), Rate is BR - PM, InitCredit = 100. rate(select, Profession,Rate,InitCredit) :-base_rate(BR) => class, profit_margin(Profession, PM), Rate is BR - PM + 2.0, InitCredit = 1000. rate(tessa,Profession,Rate,InitCredit) :-base_rate(BR) => class, profit_margin(Profession, PM), Rate is BR - PM + 1.5, InitCredit = 20. => banks. A banks class definition and an instance of it One very important common characteristic of both kinds of knowledge is that state components can not be accessed directly from within a knowledge method. This may sounds like an inconvenience, however, can be compensated by two programming techniques. The first technique is to issue a self communication in a knowledge method to access the desired state components. Of course, an extra procedural method is needed for providing those state components. The second technique is to store the involved state information as dynamic knowledge rather than as the value of state variables, and to access them directly in the knowledge methods, we will discuss this concept more completely later. create(midland, `Midland Bank Plc',peter) with profit_margin(student, 0.3). profit_margin(general, 0.4). profit_margin(business,0.6). rate(current,Profession,Rate,InitCredit):- base_rate(BR) => class, profit_margin(Profession, PM), Rate is BR - PM, InitCredit = 100. rate(tessa,Profession,Rate,InitCredit):- base_rate(BR) => class, profit_margin(Profession, PM), Rate is BR - PM + 1.7 , InitCredit = 25. => banks. Another instance of the banks class Knowledge Inheritance The inheritance policy for the knowledge methods is slightly different from that for procedural methods. In addition to the inclusive and overriding inheritance, there is also a differential inheritance. Ordinary Inheritance of Knowledge - Inclusive In general, if not specifically indicated, a class will inherit inclusively from its superclass all the instance and class level knowledge methods, which means that knowledge methods having the same Predicate as that of some methods in the inheriting class will not be overridden. Instead, they are aggregated into a same knowledge predicate and backtracking on such a knowledge predicate will extend to them. This procedure can be regarded as knowledge accumulation and ordinary declaration is used for this type of inheritance. For example, Program declares a wholikessbarclays class which inherits the customer class in Program . It uses ordinary, thus inclusive, inheritance, therefore, if a knowledge access call which invokes the predicate which bank/5 of an wholikesbarclays instance fails to find the trusted bank provides an interest rate higher than 4.0, the execution will backtrack to the inherited method in class customer to find the best recommendation. Conceptually, in an wholikesbarclays instance, the predicate which bank/5 looks like: which_bank(Prof,Type,Bank,Rate,InitCredit) :- self ? the_best([barclays], Prof,Type,Bank,BestRate,InitCredit), BestRate > 4.0. which_bank(Prof,Type,Bank,Rate,InitCredit) :- members(Banks) => banks, self ? the_best(Banks,Prof, Type,BestBank,BestRate,InitCredit). Notice the order of the clauses in the predicate. In the first clause, only bank 'barclays' is passed to the banks list for evaluating the best rate, and it is expected that 'barclays' should provide an acceptable rate higher than 4.0, otherwise, the second clause, which is actually inherited, will be used to evaluate the best rate. class wholikesbarclays isa customer with class_definition methods ..... instance_definition methods which_bank(Prof,Type,Bank,Rate,InitCredit) :- self?the_best([barclays],Prof, Type,Bank,BestRate,InitCredit), BestRate > 4.0. : : : . Inclusive inheritance of knowledge methods Overriding Inheritance of Knowledge Overriding inheritance of a class is declared with a different inheritance operator, isa* , which indicates that knowledge methods in the superclass will be overridden if they have a same Predicate as that of some methods in the inheriting class. Backtracking on a knowledge predicate in a class will not extend to overridden methods, however, if required, super communications can still access these overridden methods. For example, Program includes a whotrustsbarclays class which uses overriding inheritance when inheriting from customer class. An instance of it, upon receiving a which bank/5 knowledge access message, will just consult bank 'barclays' for the interest rate of a specific type of account. However, if 'barclays' does not provide that type of account, the invocation will simply fail, and there is no chance that the execution will backtrack to the method declared in the superclass. Another other bank/6 method is also shown in the program to demonstrate how to use a super communication to call an overridden knowledge method. class whotrustsbarclays isa* customer with class_definition methods ..... instance_definition methods which_bank(Prof,Type, Bank,Rate,InitCredit) :- Bank = barclays, Bank?rate(Type,Prof,Rate,InitCredit). other_bank(Prof,Type, Bank,Rate,InitCredit) :- super?which_bank(Prof,Type, Bank,Rate,InitCredit). : : . Overriding inheritance of knowledge methods Differential Inheritance of Knowledge Differential inheritance of a class is declared with the ordinary inheritance operator but the name of the superclass is followed by a subtracting operator and a list of name/arity terms. Those superclass knowledge methods whose predicates are among the terms in the list are not inherited. This mechanism is the combination of the previous two inheriting styles, and the backtracking will extend to the inherited methods, but not to the subtracted ones. For example, in Program , a loyaltobarclays class is defined, in which the which bank/5 knowledge method in the customer class is excluded from the inclusive inheritance. Instead, it has a new my bank/5 method. Now, it will not even answer a which bank/5 message, although the which bank/5 knowledge method in the superclass is still reachable by a super communication from any of its methods. If an invocation to my bank/5 method fails to reach a conclusion because, say again, the 'barclays' does not provide certain types of account, the execution will simply fails. class loyaltobarclays isa customer - [which_bank/5] with class_definition methods ..... instance_definition methods my_bank(Prof,Type, Bank,Rate,InitCredit) :- Bank = barclays, Bank?rate(Type,Prof,Rate,InitCredit). : : . Differential inheritance of knowledge methods Notice that all these different mechanisms do not affect the inheritance of procedural methods and state components, they apply to knowledge methods only. State Information Represented as Dynamic Knowledge State variables have their scope confined to the procedure methods. Therefore, only a procedure method can directly access a state variable. As mentioned above, a knowledge method that needs to access a state variable must do so by using a self communication to invoke a procedure method that returns its value. Alternatively, state information can be represented as dynamic knowledge clauses which can be directly accessed from other knowledge methods. The can be manipulated by the procedural methods of the object using special knowledge manipulation primitives. The can be accessed from a procedural method of an object using a query to self . To illustrate how to use dynamic knowledge to represent state information, consider Program . In the undergraduate class, the courses a student is currently taking will be recorded as a sequence of facts course_taking(Id1). course_taking(Id2). ... course_taking(Idk) . There is a dynamic declaration dynamic course taking/1. for it. A student object has the enroll for a course/2 method try to enroll in a specified course in the department to which it belongs, and a successful response from the department results in a fact course taking(CourseId) being asserted into its dynamic knowledge. This action is done by a self invocation using a system built-in special primitive acquire knowledge/1 . The same fact will be removed, using another special primitive remove knowledge/1 , from the dynamic knowledge if the final grade of the course is received by the final grade/2 method. The removed course is then put into a list recording the courses having been taken by the student. class undergraduate isa student with instance_definition dynamic course_taking/1. states Dept, year := 1, Subject, CoursesTaken := []. methods enroll_for_a_course(CourseId, Ans) -> enroll_a_course(CourseId, Reply) => Dept, if Reply == yes then Ans = yes, self ? acquire_knowledge( course_taking(CourseId)) else Ans = no. final_grade(CourseId, Grade) -> self ? remove_knowledge( course_taking(CourseId) ), CoursesTaken := [(CourseId,Grade) CourseTaken]. . . . . code_definition . . . . Using dynamic knowledge to record state information Consistency of Access to Dynamic Knowledge State When using state variables to record state information there is a guarantee of consistent access and update of the state. A procedure method executed on receipt of a message M sees the set of values for the state variables that result from the execution of all and only the procedure method messages that have reached the object before it, even though it can start executing before these other methods have terminated. Because knowledge methods of an object can also execute concurrently, a similar guarantee with respect to the dynamic knowledge of the object must also be provided. In other words, the system has to promise that a knowledge method, executed on receipt of some message M', sees the dynamic knowledge that results from all and only the knowledge update messages whose execution was started before the receipt of the message M'. DK Parlog guarantees this by handling resolutions of the knowledge update messages in a special way. A knowledge update action is only taken by an object if all previously invoked knowledge methods have completely terminated. (This means that all the needed different solutions to previous queries have been found.) In addition, no new message invoking a knowledge method will be accepted by the object until the knowledge update method has terminated. This consistency of access to dynamic knowledge state guaranteed by DK Parlog is stronger than that provided by the DLP language , another distributed logic programming language in which all the methods are what we call knowledge methods. DLP only delays a state update until the first solution to each currently executing method has been found. So, on backtracking to find the next solution, the method may see a dynamic knowledge state different to that seen when the previous solution was found. Related Work Orient84/K OOP + LP + Concurrency Orient84/K was designed for the primary purpose of describing large knowledge systems, which are in turn composed of many co-operating knowledge sub-systems. It is based on a semantics called Distributed Knowledge Object Modeling(DKOM) , a knowledge system modeling mechanism using object oriented methodologies. The language combines Object Oriented Programming(OOP), Logic based Programming(LP), Demon Oriented and Concurrent Programming paradigms. Parallelism in Orient84/K is achieved by supporting distributed computation and by forking concurrent active objects which execute sequentially. No intra-method concurrency is provided. Orient84/K is perhaps the closest in design goals to DK Parlog . The procedural methods of its object are implemented in a distributed version of SmallTalk, and the knowledge method is implemented in Prolog. But the SmallTalk procedural methods are sequential, and the fit between SmallTalk and Prolog is much less homogeneous than that between Parlog and Prolog. For example, as we understand it, the knowledge component of another object cannot be directly queried from a Smalltalk method, only the objects local knowledge can be accessed. DLP LP + OOP + || Distributed Logic Programming(DLP) was also developed with the intention to amalgamate the Logic Programming, the Object Oriented Programming and the Distributed Computation paradigms. It is an extension of Prolog with object declarations and statements for dynamic creation of objects, communication between objects and the assignment of values to state variables of objects. DLP uses a computation model which combines the Prolog computation model and a parallel object oriented model similar to that of POOL . Basically, an application is a collection of object declarations. Object instances can be created dynamically and accessed concurrently. As in DK Parlog , public names are used for object declarations in DLP. DLP also provides distributed computation facilities and allows concurrent execution of methods in an object. However, the method can only be what we call knowledge methods--or Prolog rules. Despite also having a distributed backtracking ability, DLP has a weaker constraint regarding when dynamic information can be changed. A state update is allowed when all current queries have returned a first solution. But in DK Parlog , all needed solutions have to have been computed before the update is allowed. Also, parallelism in an object is only between alternative methods. Since methods are just Prolog rules, there is no concurrency within a method in DLP. Concluding remarks We have introduced most of the key features of DK Parlog . One feature we have not mentioned is modelled on the `become' of actors . Instead of a state update, as a last action an instance object method can metamorphise the object into an instance of another class without changing the object's identity. This can be used to restrict, or totally change the methods of an instance object, when it enters a certain state. The language is fully implemented and running on a network of machines at Imperial College. We believe that it has a unique blend of features and is a very powerful, and quite declarative, distributed object oriented programming language. Influences on its design were the previous OO extensions of CLP mentioned in the introduction, actors, and ABCL/1 and the above mentioned DLP and Orient84/K. ABCL/1 is an actor derived language. We are now considering restricting the use of reply variables in messages so that DK Parlog can be implemented without the need for an underlying distributed unification scheme. The key idea here is to declare which occurrences of variables in both a sent message and a message receive pattern are reply variables, and to insist that each reply variable of a method appears in exactly one action of the method, an action which assigns a value to the variable using a special reply variable assignment operation. Now, when a message is sent, we know what its reply variables are and we can create temporary mailboxes on the sender's machine to hold the reply bindings for these variables if the target object is on another machine. For each such reply variable X we also fork a process that reads the mailbox value and assigns it to X. This process suspends until the mailbox gets a value, and kills the mailbox when the value is read. The mailbox identities replace the variables in the sent message. When a receiving method wants to `assign' to one of its reply variables, and this assignment action finds that the variable already has a value which is a mailbox identity, it instead sends the reply value to the mailbox. Even with this restriction on the reply variable mechanism, all the example programs of this paper can be easily rewritten and will still execute as described. A major application area that we are investigating is Enterprise Intergration . ---------- X-Sun-Data-Type: default X-Sun-Data-Description: default X-Sun-Data-Name: coor.ps X-Sun-Content-Lines: 2355 %!PS-Adobe-2.0 %%Creator: dvips 5.58 Copyright 1986, 1994 Radical Eye Software %%Title: coor.dvi %%CreationDate: Tue May 7 16:45:53 1996 %%Pages: 11 %%PageOrder: Ascend %%BoundingBox: 0 0 596 842 %%EndComments %DVIPSCommandLine: dvips -o coor.ps coor %DVIPSParameters: dpi=300, comments removed %DVIPSSource: TeX output 1996.05.07:1635 %%BeginProcSet: tex.pro /TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N /X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72 mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1} ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if} forall round exch round exch]setmatrix}N /@landscape{/isls true N}B /@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{ /nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{ /sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0] N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{ 128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N /rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 sub]{ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]} if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{ cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin 0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict /eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X /IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for 65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V {}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7 getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false} ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail {dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M} B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{ 4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{ p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p a}B /bos{/SS save N}B /eos{SS restore}B end %%EndProcSet TeXDict begin 39158280 55380996 1000 300 300 (/home/laotzu/user/klc/COOR/coor.dvi) @start /Fa 4 108 df17 D<003C00E001C0018003800380038003800380 03800380038003800380038003800380030007001C00F0001C0007000300038003800380 0380038003800380038003800380038003800380018001C000E0003C0E297D9E15>102 DI<4020C030C030C030C030C030C030C030C030 C030C030C030C030C030C030C030C030C030C030C030C030C030C030C030C030C030C030 C030C030C030C030C030C030C030C030C030C030C030C030C030C03040200C2A7C9E15> 107 D E /Fb 1 108 df<3E0006000C000C000C000C001800187018B819383230340038 003E006300631063106310C320C1C00D147E9312>107 D E /Fc 34 122 df<000FF83F00007FFDFFC001F81FE3E003E03F87E007C03F87E00F803F07E00F 803F03C00F801F00000F801F00000F801F00000F801F00000F801F00000F801F0000FFFF FFFC00FFFFFFFC000F801F00000F801F00000F801F00000F801F00000F801F00000F801F 00000F801F00000F801F00000F801F00000F801F00000F801F00000F801F00000F801F00 000F801F00000F801F00000F801F00000F801F00000F801F00007FF0FFF0007FF0FFF000 23237FA221>11 D45 D<387CFEFEFE7C3807077C8610 >I<00180000780001F800FFF800FFF80001F80001F80001F80001F80001F80001F80001 F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001 F80001F80001F80001F80001F80001F80001F8007FFFE07FFFE013207C9F1C>49 D<03FC000FFF003C1FC07007E07C07F0FE03F0FE03F8FE03F8FE01F87C01F83803F80003 F80003F00003F00007E00007C0000F80001F00003E0000380000700000E01801C0180380 180700180E00380FFFF01FFFF03FFFF07FFFF0FFFFF0FFFFF015207D9F1C>I<00FE0007 FFC00F07E01E03F03F03F03F81F83F81F83F81F81F03F81F03F00003F00003E00007C000 1F8001FE0001FF000007C00001F00001F80000FC0000FC3C00FE7E00FEFF00FEFF00FEFF 00FEFF00FC7E01FC7801F81E07F00FFFC001FE0017207E9F1C>I<0000E00001E00003E0 0003E00007E0000FE0001FE0001FE00037E00077E000E7E001C7E00187E00307E00707E0 0E07E00C07E01807E03807E07007E0E007E0FFFFFEFFFFFE0007E00007E00007E00007E0 0007E00007E00007E000FFFE00FFFE17207E9F1C>I<1000201E01E01FFFC01FFF801FFF 001FFE001FF8001BC00018000018000018000018000019FC001FFF001E0FC01807E01803 E00003F00003F00003F80003F83803F87C03F8FE03F8FE03F8FC03F0FC03F07007E03007 C01C1F800FFF0003F80015207D9F1C>I<000070000000007000000000F800000000F800 000000F800000001FC00000001FC00000003FE00000003FE00000003FE00000006FF0000 00067F0000000E7F8000000C3F8000000C3F800000183FC00000181FC00000381FE00000 300FE00000300FE00000600FF000006007F00000E007F80000FFFFF80000FFFFF8000180 01FC00018001FC00038001FE00030000FE00030000FE000600007F000600007F00FFE00F FFF8FFE00FFFF825227EA12A>65 D<0003FE0080001FFF818000FF01E38001F8003F8003 E0001F8007C0000F800F800007801F800007803F000003803F000003807F000001807E00 0001807E00000180FE00000000FE00000000FE00000000FE00000000FE00000000FE0000 0000FE00000000FE000000007E000000007E000001807F000001803F000001803F000003 801F800003000F8000030007C000060003F0000C0001F800380000FF00F000001FFFC000 0003FE000021227DA128>67 DI73 D75 D<0007FC0000003FFF800000FC07E00003F001F80007E000FC000F C0007E001F80003F001F80003F003F00001F803F00001F807F00001FC07E00000FC07E00 000FC0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE0000 0FE0FE00000FE0FE00000FE07E00000FC07F00001FC07F00001FC03F00001F803F80003F 801F80003F000FC0007E0007E000FC0003F001F80000FC07E000003FFF80000007FC0000 23227DA12A>79 D<01FC0407FF8C1F03FC3C007C7C003C78001C78001CF8000CF8000CFC 000CFC0000FF0000FFE0007FFF007FFFC03FFFF01FFFF80FFFFC03FFFE003FFE0003FF00 007F00003F00003FC0001FC0001FC0001FE0001EE0001EF0003CFC003CFF00F8C7FFE080 FF8018227DA11F>83 D<07FC001FFF803F07C03F03E03F01E03F01F01E01F00001F00001 F0003FF003FDF01FC1F03F01F07E01F0FC01F0FC01F0FC01F0FC01F07E02F07E0CF81FF8 7F07E03F18167E951B>97 D<00FF8007FFE00F83F01F03F03E03F07E03F07C01E07C0000 FC0000FC0000FC0000FC0000FC0000FC00007C00007E00007E00003E00301F00600FC0E0 07FF8000FE0014167E9519>99 D<0001FE000001FE0000003E0000003E0000003E000000 3E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0001FC3E0007FF BE000F81FE001F007E003E003E007E003E007C003E00FC003E00FC003E00FC003E00FC00 3E00FC003E00FC003E00FC003E00FC003E007C003E007C003E003E007E001E00FE000F83 BE0007FF3FC001FC3FC01A237EA21F>I<00FE0007FF800F87C01E01E03E01F07C00F07C 00F8FC00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC00007C00007C00007E00003E00181F 00300FC07003FFC000FF0015167E951A>I<003F8000FFC001E3E003C7E007C7E00F87E0 0F83C00F80000F80000F80000F80000F80000F8000FFFC00FFFC000F80000F80000F8000 0F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F8000 0F80000F80000F80007FF8007FF80013237FA211>I<03FC1E0FFF7F1F0F8F3E07CF3C03 C07C03E07C03E07C03E07C03E07C03E03C03C03E07C01F0F801FFF0013FC003000003000 003800003FFF801FFFF00FFFF81FFFFC3800FC70003EF0001EF0001EF0001EF0001E7800 3C7C007C3F01F80FFFE001FF0018217E951C>II<1C003F007F007F007F003F001C 000000000000000000000000000000FF00FF001F001F001F001F001F001F001F001F001F 001F001F001F001F001F001F001F001F001F00FFE0FFE00B247EA310>I108 DII<00FE0007FFC00F83E01E00F03E00F87C00 7C7C007C7C007CFC007EFC007EFC007EFC007EFC007EFC007EFC007E7C007C7C007C3E00 F81F01F00F83E007FFC000FE0017167E951C>I114 D<0FF3003FFF00781F00600700E0 0300E00300F00300FC00007FE0007FF8003FFE000FFF0001FF00000F80C00780C00380E0 0380E00380F00700FC0E00EFFC00C7F00011167E9516>I<018000018000018000018000 0380000380000780000780000F80003F8000FFFF00FFFF000F80000F80000F80000F8000 0F80000F80000F80000F80000F80000F80000F80000F81800F81800F81800F81800F8180 0F830007C30003FE0000F80011207F9F16>IIII121 D E /Fd 58 122 df<0001FC000703000C03001C07001C03001800003800003800003800 00380000700007FFFC00701C00701C00701C00E03800E03800E03800E03800E07001C070 01C07001C07001C0E201C0E201C0E20380E4038064038038038000030000070000060000 C60000E40000CC00007000001825819C17>12 D<003C00000063003000C1007001808070 038080200301802007038040070300800E0001000E0002000E0004000EE01A000F102200 0E1041000E1081001A20808039C10080300160807000E0807000E080E0000100E0000100 E0000100E0000200E0000200600004007000080030001000180060000E03800001FC0000 1C1F7B9D20>38 D<183C3C3C0404080810204080060C779C0D>I<183878380808101020 404080050C7D830D>44 DI<00000200000600000600000C 00000C0000180000300000300000600000600000C00000C0000180000180000300000600 000600000C00000C0000180000180000300000300000600000C00000C000018000018000 0300000300000600000C00000C0000180000180000300000300000600000600000C00000 80000017297F9E15>47 D<003C0000C6000183000303000603000603800E03800C03801C 03801C0300380700380700380700380700700E00700E00700E00700E00E01C00E01C00E0 1C00E03800E03800E03000C06000E0600060C0007180001E0000111D7B9B15>I<000200 06000C001C007C039C0038003800380038007000700070007000E000E000E000E001C001 C001C001C003800380038003800780FFF00F1C7C9B15>I<003C0000C300010180020180 0201C00441C00441C00841C00841C00841C01083801083801107000E0600000C00001800 00300000C0000100000600000800001001001002002002004006007E0C00C7F80083F800 80E000121D7C9B15>I<003E0000C1800101800200C00400C00440C00841C00841C00841 C0088380070380000700000E0001F800003800000C00000C00000E00000E00000E00000E 00700E00E01C00801C0080380080300040600021C0001F0000121D7C9B15>I<00018000 01C0000380000380000380000300000700000700000600000E00000C00001C0000180000 180000300000300000600000400000C600018E00010E00020E00061C000C1C00181C003F 1C0040F800803F0000380000380000700000700000700000700000E00000600012247E9B 15>I<00C06000FFC001FF8001FE00010000010000020000020000020000020000047800 058C00060600040600080600000700000700000600000E00000E00700E00700C00E01C00 80180080380040300040600021C0001F0000131D7C9B15>I<000F0000308000C0800183 800383800300000600000E00000C00001C00001CF0003B18003C0C00380C00780C00700E 00700E00700E00601C00E01C00E01C00E01C00E03800E03800E0700060600060C0002180 001E0000111D7B9B15>I<001E000061000081800180800300C00300C006018006018006 018007030007860003CC0003F00001F000037800063C00081E00180E00300E0060060060 0600600600C00C00C00C00C0180060100060200030C0000F0000121D7C9B15>56 D<003C0000C6000183000303000603000E03000C03801C03801C03001C03003807003807 00380700380F00380E00181E00181E000C6C00079C00001C000018000038000030000060 00E0C000E0C0008180008600007C0000111D7B9B15>I<060F0F06000000000000000000 003078F06008127C910D>I<000018000000180000003800000038000000780000007800 0000B8000001B800000138000002380000023C0000041C0000041C0000081C0000181C00 00101C0000201C0000201C00007FFC0000401C0000801C0001801C0001001C0002001C00 02001C0004000E000C000E001C001E00FF00FFC01A1D7E9C1F>65 D<0003F020001E0C60003002E000E003C001C001C0038001C0070000C00E0000801E0000 801C0000803C0000803C000000780000007800000078000000F0000000F0000000F00000 00F0000000F0000400F0000400F0000400F0000800700008007000100038002000180040 000C0180000706000001F800001B1E7A9C1E>67 D<01FFFE00003C0780003801C0003801 C0003800E0003800E0007000F00070007000700070007000F000E000F000E000F000E000 F000E000F001C001E001C001E001C001E001C001C0038003C00380038003800780038007 0007000E0007001C0007003800070070000E01C000FFFF00001C1C7D9B1F>I<01FFFFE0 003C00E00038006000380040003800400038004000700040007000400070204000702000 00E0400000E0400000E0C00000FFC00001C0800001C0800001C0800001C0800003810100 038001000380020003800200070004000700040007000C00070018000E007800FFFFF000 1B1C7D9B1C>I<01FFFFC0003C01C0003800C00038008000380080003800800070008000 700080007020800070200000E0400000E0400000E0C00000FFC00001C0800001C0800001 C0800001C080000381000003800000038000000380000007000000070000000700000007 0000000F000000FFF000001A1C7D9B1B>I<0003F020001E0C60003002E000E003C001C0 01C0038001C0070000C00E0000801E0000801C0000803C0000803C000000780000007800 000078000000F0000000F0000000F001FFC0F0001E00F0001C00F0001C00F0001C00F000 1C00700038007000380038003800180078000C0090000707100001F800001B1E7A9C20> I<01FFCFFE003C01E0003801C0003801C0003801C0003801C00070038000700380007003 800070038000E0070000E0070000E0070000FFFF0001C00E0001C00E0001C00E0001C00E 0003801C0003801C0003801C0003801C00070038000700380007003800070038000F0078 00FFE7FF001F1C7D9B1F>I<01FFC0003C00003800003800003800003800007000007000 00700000700000E00000E00000E00000E00001C00001C00001C00001C000038000038000 0380000380000700000700000700000700000F0000FFE000121C7E9B10>I<01FFC0FF00 3C003C003800300038004000380080003801000070020000700400007010000070200000 E0400000E0C00000E1C00000E5C00001C8E00001D0E00001E0E00001C070000380700003 80700003803800038038000700380007001C0007001C0007001C000F001E00FFE0FF8020 1C7D9B20>75 D<01FFE0003C000038000038000038000038000070000070000070000070 0000E00000E00000E00000E00001C00001C00001C00001C0000380080380080380080380 100700100700300700600700E00E03C0FFFFC0151C7D9B1A>I<01FE0007F8003E000780 002E000F00002E001700002E001700002E002700004E002E00004E004E00004E004E0000 4E008E00008E011C00008E011C00008E021C00008E021C00010704380001070438000107 08380001071038000207107000020720700002072070000207407000040740E000040780 E000040700E0000C0700E0001C0601E000FF861FFC00251C7D9B25>I<01FC03FE001C00 70003C0060002E0040002E0040002E004000470080004700800047008000438080008381 0000838100008181000081C1000101C2000101C2000100E2000100E2000200E400020074 0002007400020074000400380004003800040038000C0018001C001000FF8010001F1C7D 9B1F>I<0007F000001C1C0000700E0000E0070001C0038003800380070003800E0003C0 1E0003C01C0003C03C0003C03C0003C0780003C0780003C0780003C0F0000780F0000780 F0000780F0000F00F0000F00F0000E00F0001E00F0003C0070003800700070007800E000 3801C0001C0380000E0E000003F800001A1E7A9C20>I<01FFFC00003C07000038038000 3801C0003801C0003801C0007003C0007003C0007003C00070038000E0078000E0070000 E00E0000E0380001FFE00001C0000001C0000001C0000003800000038000000380000003 800000070000000700000007000000070000000F000000FFE000001A1C7D9B1C>I<01FF F800003C0E00003807000038038000380380003803800070078000700780007007800070 0F0000E00E0000E01C0000E0700000FFC00001C0C00001C0600001C0700001C070000380 70000380700003807000038070000700F0000700F0400700F0400700F0800F007880FFE0 790000001E001A1D7D9B1E>82 D<000F8400304C00403C00801801001803001803001806 001006001006000007000007000003E00003FC0001FF00007F800007C00001C00001C000 00C00000C02000C02000C0600180600180600300600200F00400CC180083E000161E7D9C 17>I<1FFFFFC01C0701C0300E00C0200E0080600E0080400E0080401C0080801C008080 1C0080001C00000038000000380000003800000038000000700000007000000070000000 70000000E0000000E0000000E0000000E0000001C0000001C0000001C0000001C0000003 C000007FFE00001A1C799B1E>I87 D<03CC063C0C3C181C3838303870 387038E070E070E070E070E0E2C0E2C0E261E462643C380F127B9115>97 D<3F00070007000E000E000E000E001C001C001C001C0039C03E60383038307038703870 387038E070E070E070E060E0E0C0C0C1C0618063003C000D1D7B9C13>I<01F007080C08 181C3838300070007000E000E000E000E000E000E008E010602030C01F000E127B9113> I<001F80000380000380000700000700000700000700000E00000E00000E00000E0003DC 00063C000C3C00181C00383800303800703800703800E07000E07000E07000E07000E0E2 00C0E200C0E20061E4006264003C3800111D7B9C15>I<01E007100C1018083810701070 607F80E000E000E000E000E000E0086010602030C01F000D127B9113>I<0003C0000670 000C70001C60001C00001C0000380000380000380000380000380003FF80007000007000 00700000700000700000E00000E00000E00000E00000E00001C00001C00001C00001C000 01C000038000038000038000030000030000070000C60000E60000CC0000780000142581 9C0D>I<00F3018F030F06070E0E0C0E1C0E1C0E381C381C381C381C3838303830381878 18F00F700070007000E000E0C0C0E1C0C3007E00101A7D9113>I<0FC00001C00001C000 0380000380000380000380000700000700000700000700000E78000E8C000F0E000E0E00 1C0E001C0E001C0E001C0E00381C00381C00381C00383800703880703880707080707100 E03200601C00111D7D9C15>I<01800380010000000000000000000000000000001C0026 00470047008E008E000E001C001C001C0038003800710071007100720072003C00091C7C 9B0D>I<0006000E0006000000000000000000000000000000F001180218021804380438 00380038007000700070007000E000E000E000E001C001C001C001C003800380C300E700 CE0078000F24819B0D>I<0FC00001C00001C00003800003800003800003800007000007 00000700000700000E0F000E11000E23800E43801C83001C80001D00001E00003F800039 C00038E00038E00070E20070E20070E20070E400E06400603800111D7D9C13>I<1F8003 80038007000700070007000E000E000E000E001C001C001C001C00380038003800380070 00700070007000E400E400E400E40068003800091D7C9C0B>I<3C1E0780266318C04683 A0E04703C0E08E0380E08E0380E00E0380E00E0380E01C0701C01C0701C01C0701C01C07 0380380E0388380E0388380E0708380E0710701C0320300C01C01D127C9122>I<3C3C00 2646004687004707008E07008E07000E07000E07001C0E001C0E001C0E001C1C00381C40 381C40383840383880701900300E0012127C9117>I<01E007180C0C180C380C300E700E 700EE01CE01CE01CE018E038E030E06060C031801E000F127B9115>I<07870004D98008 E0C008E0C011C0E011C0E001C0E001C0E00381C00381C00381C003818007038007030007 07000706000E8C000E70000E00000E00001C00001C00001C00001C00003C0000FF800013 1A7F9115>I<03C4062C0C3C181C3838303870387038E070E070E070E070E0E0C0E0C0E0 61E063C03DC001C001C0038003800380038007803FF00E1A7B9113>I<3C3C26C2468747 078E068E000E000E001C001C001C001C0038003800380038007000300010127C9112>I< 01F006080C080C1C18181C001F001FC00FF007F0007800386030E030C030806060C01F00 0E127D9111>I<00C001C001C001C00380038003800380FFE00700070007000E000E000E 000E001C001C001C001C00384038403840388019000E000B1A7D990E>I<1E0300270700 470700470700870E00870E000E0E000E0E001C1C001C1C001C1C001C1C00383880383880 1838801839001C5900078E0011127C9116>I<1E06270E470E4706870287020E020E021C 041C041C041C0818083808181018200C4007800F127C9113>I<1E018327038747038747 03838707018707010E07010E07011C0E021C0E021C0E021C0E04180C04181C04181C081C 1C100C263007C3C018127C911C>I<1E03270747074707870E870E0E0E0E0E1C1C1C1C1C 1C1C1C38383838183818381C7007F00070007000E0E0C0E1C0818047003C00101A7C9114 >121 D E /Fe 1 63 df62 D E /Ff 57 122 df<003FE3F801F03F1C03C03E3E07C07C3E0F807C3E0F 807C1C0F807C000F807C000F807C000F807C000F807C00FFFFFFC0FFFFFFC00F807C000F 807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F 807C000F807C000F807C000F807C007FE1FFC07FE1FFC01F1D809C1C>11 D<003FC00001F0300003C0380007C07C000F807C000F807C000F8038000F8000000F8000 000F8000000F800000FFFFFC00FFFFFC000F807C000F807C000F807C000F807C000F807C 000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C 007FE1FF807FE1FF80191D809C1B>I<0020004001800380030006000E001C001C003C00 38003800780078007800F800F000F000F000F000F000F000F000F000F000F80078007800 7800380038003C001C001C000E000600030003800180004000200B297C9E13>40 D<800040003000380018000C000E000700070007800380038003C003C003C003E001E001 E001E001E001E001E001E001E001E003E003C003C003C0038003800780070007000E000C 00180038003000400080000B297D9E13>I<01C00003E00001C00041C100F1C780F9CF80 FDDF803EBE0007F00007F0003EBE00FDDF80F9CF80F1C78041C10001C00003E00001C000 11127D9E18>I<0003800000038000000380000003800000038000000380000003800000 038000000380000003800000038000000380000003800000038000FFFFFFFCFFFFFFFCFF FFFFFC000380000003800000038000000380000003800000038000000380000003800000 03800000038000000380000003800000038000000380001E1F7D9925>I<78FCFCFEFE7A 0202040408083040070E7D850D>II<78FCFCFCFC7806 067D850D>I<000180000380000380000700000700000700000E00000E00001C00001C00 001C0000380000380000380000700000700000E00000E00000E00001C00001C00001C000 0380000380000380000700000700000E00000E00000E00001C00001C00001C0000380000 380000700000700000700000E00000E00000C0000011297D9E18>I<00600001E0000FE0 00FFE000F3E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0 0003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0007FFF807FFF 80111B7D9A18>49 D<07F8001FFE00383F80780FC0FC07C0FC07E0FC03E0FC03E07803E0 0007E00007C00007C0000F80001F00001E0000380000700000E000018060030060060060 0800E01FFFC03FFFC07FFFC0FFFFC0FFFFC0131B7E9A18>I<03F8001FFE003C1F003C0F 807C07C07E07C07C07C03807C0000F80000F80001E00003C0003F800001E00000F800007 C00007C00007E03007E07807E0FC07E0FC07E0FC07C0780F80781F001FFE0007F800131B 7E9A18>I<000180000380000780000F80001F80003F80006F8000CF80008F80018F8003 0F80060F800C0F80180F80300F80600F80C00F80FFFFF8FFFFF8000F80000F80000F8000 0F80000F80000F8001FFF801FFF8151B7F9A18>I<1801801FFF001FFE001FFC001FF800 1FC00018000018000018000018000019F8001E0E00180F801007800007C00007E00007E0 0007E07807E0F807E0F807E0F807C0F007C0600F80381F001FFE0007F000131B7E9A18> I<03F8000FFE001E0F803807803803C07803C07803C07E03C07F83807FC7003FFE001FFC 000FFE0007FF801DFF80387FC0781FE0F007E0F003E0F001E0F001E0F001E07801C07803 803E07801FFE0003F800131B7E9A18>56 D<78FCFCFCFC7800000000000078FCFCFCFC78 06127D910D>58 D61 D<0FF0303C601EF01FF81FF81F701F003E003C007000E001C00180018003000300030003 000300000000000000000007800FC00FC00FC00FC00780101D7D9C17>63 D<00038000000380000007C0000007C0000007C000000FE000000FE000001FF000001BF0 00001BF0000031F8000031F8000061FC000060FC0000E0FE0000C07E0000C07E0001803F 0001FFFF0003FFFF8003001F8003001F8006000FC006000FC00E000FE00C0007E0FFC07F FEFFC07FFE1F1C7E9B24>65 D<001FE02000FFF8E003F80FE007C003E00F8001E01F0000 E03E0000E03E0000607E0000607C000060FC000000FC000000FC000000FC000000FC0000 00FC000000FC000000FC0000007C0000607E0000603E0000603E0000C01F0000C00F8001 8007C0030003F80E0000FFFC00001FE0001B1C7D9B22>67 DI< FFFFFFFF07E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E0 07E007E007E007E007E007E007E007E0FFFFFFFF101C7F9B12>73 D75 DII<00 3FE00001F07C0003C01E000F800F801F0007C01E0003C03E0003E07E0003F07C0001F07C 0001F0FC0001F8FC0001F8FC0001F8FC0001F8FC0001F8FC0001F8FC0001F8FC0001F87C 0001F07E0003F07E0003F03E0003E03F0007E01F0007C00F800F8003C01E0001F07C0000 3FE0001D1C7D9B24>79 DI<003FE00001F07C0003C01E000F80 0F801F0007C01F0007C03E0003E07E0003F07C0001F07C0001F0FC0001F8FC0001F8FC00 01F8FC0001F8FC0001F8FC0001F8FC0001F8FC0001F87C0001F07C0001F07E0003F03E00 03E03E0703E01F08C7C00F906F8003D07E0001F87C00003FF8080000380800003C180000 3FF800001FF800001FF000000FF0000007E0000003C01D247D9B24>I<07F8201FFEE03C 07E07801E07000E0F000E0F00060F00060F80000FE0000FFE0007FFE003FFF003FFF800F FFC007FFE0007FE00003F00001F00000F0C000F0C000F0C000E0E000E0F001C0FC03C0EF FF0083FC00141C7D9B1B>83 D<7FFFFFE07FFFFFE0781F81E0701F80E0601F8060E01F80 70C01F8030C01F8030C01F8030C01F8030001F8000001F8000001F8000001F8000001F80 00001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F80 00001F8000001F800007FFFE0007FFFE001C1C7E9B21>II91 D93 D<0FF8001C1E003E0F803E07 803E07C01C07C00007C0007FC007E7C01F07C03C07C07C07C0F807C0F807C0F807C0780B C03E13F80FE1F815127F9117>97 D I<03FC000E0E001C1F003C1F00781F00780E00F80000F80000F80000F80000F80000F800 007800007801803C01801C03000E0E0003F80011127E9115>I<000FF0000FF00001F000 01F00001F00001F00001F00001F00001F00001F00001F001F9F00F07F01C03F03C01F078 01F07801F0F801F0F801F0F801F0F801F0F801F0F801F07801F07801F03C01F01C03F00F 0FFE03F9FE171D7E9C1B>I<01FC000F07001C03803C01C07801C07801E0F801E0F801E0 FFFFE0F80000F80000F800007800007C00603C00601E00C00F038001FC0013127F9116> I<007F0001E38003C7C00787C00F87C00F83800F80000F80000F80000F80000F8000FFF8 00FFF8000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80 000F80000F80000F80007FF8007FF800121D809C0F>I<03F8F00E0F381E0F381C07303C 07803C07803C07803C07801C07001E0F000E0E001BF8001000001800001800001FFF001F FFC00FFFE01FFFF07801F8F00078F00078F000787000707800F01E03C007FF00151B7F91 18>II<1E003F003F003F003F001E 00000000000000000000000000FF00FF001F001F001F001F001F001F001F001F001F001F 001F001F001F001F00FFE0FFE00B1E7F9D0E>I<007800FC00FC00FC00FC007800000000 000000000000000003FC03FC007C007C007C007C007C007C007C007C007C007C007C007C 007C007C007C007C007C007C707CF87CF878F8F070E01F800E26839D0F>IIIII<01FC000F07801C01C03C01E0 7800F07800F0F800F8F800F8F800F8F800F8F800F8F800F87800F07800F03C01E01E03C0 0F078001FC0015127F9118>II114 D<1FD830786018E018E018F000FF807FE07FF01F F807FC007CC01CC01CE01CE018F830CFC00E127E9113>I<030003000300030007000700 0F000F003FFCFFFC1F001F001F001F001F001F001F001F001F001F0C1F0C1F0C1F0C0F08 079803F00E1A7F9913>II< FFC1FCFFC1FC1F00601F80E00F80C00FC0C007C18007C18003E30003E30001F60001F600 01FE0000FC0000FC0000780000780000300016127F9119>II121 D E /Fg 75 126 df<3801807C03807C0380EE0700EE0700EE0E 00EE0E00EE0E00EE1C007C1C007C380038380000700000700000700000E00000E00001C0 0001C00001C0000380000383800707C00707C00E0EE00E0EE00E0EE01C0EE01C0EE03807 C03807C018038013207F9C16>37 D<03800007E0000FE0001E70001C70001C70001C7000 1C77E01CE7E01DE7E00FC7000F8E000F0E001E0E003F1C007F1C00739C00E3F800E1F800 E0F1C0E0F1C071F9C07FFFC03F9F801E070013197F9816>I<30787C3C1C1C1C1C3878F0 E040060D789816>I<00E001E0038007000E001C001C0038003800700070007000E000E0 00E000E000E000E000E000E000E000700070007000380038001C001C000E000700038001 E000E00B217A9C16>II<01C00001C00001C00001C00071C700F9CF807FFF001FFC0007 F00007F0001FFC007FFF00F9CF8071C70001C00001C00001C00001C00011127E9516>I< 01C00001C00001C00001C00001C00001C00001C00001C000FFFF80FFFF80FFFF8001C000 01C00001C00001C00001C00001C00001C00001C00011137E9516>I<387C7E7E3E0E1E1C 78F060070B798416>II<70F8F8F8700505788416> I<000180000380000380000700000700000E00000E00001C00001C000038000038000070 0000700000E00000E00001C00001C0000380000380000700000700000E00000E00001C00 001C0000380000380000700000700000E00000E00000C0000011207E9C16>I<03E0000F F8001FFC001E3C00380E00780F00700700700700E00380E00380E00380E00380E00380E0 0380E00380E00380F00780700700700700780F003C1E001E3C001FFC000FF80003E00011 197E9816>I<01800380038007800F807F80FF8073800380038003800380038003800380 03800380038003800380038003807FF87FFC7FF80E197C9816>I<07E0001FF8003FFC00 783E00E00700F00780F00380600380000380000380000700000700000E00001C00003800 00700000E00001C0000380000F00001E03803803807FFF80FFFF807FFF8011197E9816> I<07E0001FF8003FFC00781E00780700300700000700000700000E00003E0007FC0007F0 0007FC00001E00000700000300000380000380600380F00380E00700781E003FFC001FF8 0007E00011197E9816>I<007C0000FC0000DC0001DC00039C00039C00071C000F1C000E 1C001E1C003C1C00381C00781C00F01C00FFFFE0FFFFE0FFFFE0001C00001C00001C0000 1C00001C0001FFC001FFC001FFC013197F9816>I<3FFE003FFE003FFE00380000380000 3800003800003800003800003800003BF0003FFC003FFE003C0F00300700000380000380 600380F00380F00380E00700781E003FFC001FF80007E00011197E9816>I<00F80003FC 0007FE000F07001C0F00380F00780600700000700000E3F800EFFC00FFFE00F80F00F007 00F00380E00380E003807003807003807007803807003C1E001FFC000FF80003E0001119 7E9816>II<70F8F8F870000000000000000070F8F8F870 0512789116>58 D<7FFF00FFFF80FFFF80000000000000000000000000000000FFFF80FF FF807FFF00110B7E9116>61 DI<0FE03FF87FFCF01EF00EF00E601E003C007800F001C0038003 800380038003800300000000000000000003000780078003000F197D9816>I<00E00001 F00001F00001B00001B00003B80003B80003B800031800071C00071C00071C00071C0007 1C000E0E000E0E000FFE000FFE001FFF001C07001C07001C07007F1FC0FF1FE07F1FC013 197F9816>65 D<7FF800FFFE007FFF001C0F001C07801C03801C03801C03801C07801C07 001FFF001FFE001FFE001C1F001C03801C03C01C01C01C01C01C01C01C01C01C03C01C07 807FFF80FFFF007FFC0012197F9816>I<01F18007FB800FFF801F0F803C078038038070 0380700380F00000E00000E00000E00000E00000E00000E00000E00000F0000070038070 03803803803C07001F0F000FFE0007FC0001F00011197E9816>I<7FF800FFFE007FFF00 1C0F001C07801C03C01C01C01C01C01C01E01C00E01C00E01C00E01C00E01C00E01C00E0 1C00E01C00E01C01C01C01C01C03C01C07801C0F807FFF00FFFE007FF8001319809816> I<7FFFC0FFFFC07FFFC01C01C01C01C01C01C01C01C01C00001C00001C1C001C1C001FFC 001FFC001FFC001C1C001C1C001C00001C00E01C00E01C00E01C00E01C00E07FFFE0FFFF E07FFFE013197F9816>I<03E30007FF000FFF001E1F003C0F00380700700700700700F0 0000E00000E00000E00000E00000E03F80E07FC0E03F80F00700700700700700380F003C 0F001E1F000FFF0007F70003E70012197E9816>71 D<7F1FC0FFBFE07F1FC01C07001C07 001C07001C07001C07001C07001C07001FFF001FFF001FFF001C07001C07001C07001C07 001C07001C07001C07001C07001C07007F1FC0FFBFE07F1FC013197F9816>II<7F0FE0FF8FF07F0FE01C07801C0F001C0E001C 1C001C3C001C78001CF0001CE0001DF0001FF0001FF8001F38001E1C001C1C001C0E001C 0E001C07001C07001C03807F07E0FF8FF07F07E01419809816>75 DII<7E1FC0FF3FE07F1FC01D07001D8700 1D87001D87001DC7001DC7001CC7001CC7001CE7001CE7001CE7001C67001C67001C7700 1C77001C37001C37001C37001C17007F1F00FF9F007F0F0013197F9816>I<1FFC003FFE 007FFF00780F00F00780E00380E00380E00380E00380E00380E00380E00380E00380E003 80E00380E00380E00380E00380E00380F00780F00780780F007FFF003FFE001FFC001119 7E9816>I<7FF800FFFE007FFF001C0F801C03801C03C01C01C01C01C01C01C01C03C01C 03801C0F801FFF001FFE001FF8001C00001C00001C00001C00001C00001C00001C00007F 0000FF80007F000012197F9816>I<7FE000FFF8007FFC001C1E001C0F001C07001C0700 1C07001C07001C0F001C1E001FFC001FF8001FFC001C1C001C0E001C0E001C0E001C0E00 1C0E201C0E701C0E707F07E0FF87E07F03C014197F9816>82 D<07E3001FFF003FFF0078 1F00F00700E00700E00700E00000F000007800003F80001FF00007FC0000FE00000F0000 0700000380000380600380E00380E00700F80F00FFFE00FFFC00C7F00011197E9816>I< 7FFFE0FFFFE0FFFFE0E0E0E0E0E0E0E0E0E0E0E0E000E00000E00000E00000E00000E000 00E00000E00000E00000E00000E00000E00000E00000E00000E00000E00007FC000FFE00 07FC0013197F9816>I<7F07F0FF8FF87F07F01C01C01C01C01C01C01C01C01C01C01C01 C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C00E03800E03 8007070007FF0003FE0000F8001519809816>III91 D93 D95 D<081C3C7870E0E0E0E0F0F87830060D 789B16>I<1FE0003FF0007FF800783C00300E00000E00000E0003FE001FFE003E0E0070 0E00E00E00E00E00E00E00783E007FFFE03FE7E00F83E013127E9116>I<7E0000FE0000 7E00000E00000E00000E00000E00000E3E000EFF000FFF800F83C00F00E00E00E00E0070 0E00700E00700E00700E00700E00700E00E00F01E00F83C00FFF800EFF00063C00141980 9816>I<03F80FFC1FFE3C1E780C7000E000E000E000E000E000F000700778073E0E1FFC 0FF803F010127D9116>I<003F00007F00003F0000070000070000070000070003C7000F F7001FFF003C1F00780F00700700E00700E00700E00700E00700E00700E00700700F0070 0F003C1F001FFFE00FE7F007C7E014197F9816>I<03E00FF81FFC3C1E780E7007E007FF FFFFFFFFFFE000E000700778073C0F1FFE0FFC03F010127D9116>I<001F00007F8000FF 8001E78001C30001C00001C0007FFF00FFFF00FFFF0001C00001C00001C00001C00001C0 0001C00001C00001C00001C00001C00001C00001C0003FFE007FFF003FFE0011197F9816 >I<03E3C007F7E00FFFE01C1CC0380E00380E00380E00380E00380E001C1C000FF8001F F0001BE0003800001800001FFC001FFF003FFF807803C0E000E0E000E0E000E0E000E070 01C07C07C03FFF800FFE0003F800131C7F9116>I<7E0000FE00007E00000E00000E0000 0E00000E00000E3C000EFE000FFF000F87800F03800E03800E03800E03800E03800E0380 0E03800E03800E03800E03800E03807FC7F0FFE7F87FC7F01519809816>I<018003C003 C0018000000000000000007FC07FC07FC001C001C001C001C001C001C001C001C001C001 C001C001C07FFFFFFF7FFF101A7D9916>I<003000780078003000000000000000001FF8 1FF81FF80038003800380038003800380038003800380038003800380038003800380038 0038003800386070F0F0FFE07FC03F800D237E9916>I<7E0000FE00007E00000E00000E 00000E00000E00000E7FE00E7FE00E7FE00E0F000E1E000E3C000E78000EF0000FF0000F F8000FBC000F1E000E0E000E07000E07807F87F0FFCFF07F87F01419809816>III<7E3C00FE FE007FFF000F87800F03800E03800E03800E03800E03800E03800E03800E03800E03800E 03800E03807FC7F0FFE7F87FC7F01512809116>I<03E0000FF8001FFC003C1E00780F00 700700E00380E00380E00380E00380E00380F00780700700780F003C1E001FFC000FF800 03E00011127E9116>I<7E3E00FEFF007FFF800F83C00F00E00E00E00E00700E00700E00 700E00700E00700E00700E00E00F01E00F83C00FFF800EFF000E3C000E00000E00000E00 000E00000E00000E00007FC000FFE0007FC000141B809116>I<07C7000FE7001FF7003C 1F00700F00700F00E00700E00700E00700E00700E00700E00700700F00700F003C3F003F F7001FE70007C700000700000700000700000700000700000700003FE0007FF0003FE014 1B7E9116>II<0FEC3FFC7F FCF03CE01CE01C70007F801FF007F8003C600EE00EF00EF81EFFFCFFF8C7E00F127D9116 >I<0300000700000700000700000700007FFF00FFFF00FFFF0007000007000007000007 000007000007000007000007010007038007038007038007870003FE0001FC0000F80011 177F9616>I<7E1F80FE3F807E1F800E03800E03800E03800E03800E03800E03800E0380 0E03800E03800E03800E03800E0F800FFFF007FBF803E3F01512809116>I<7F1FC0FF1F E07F1FC01C07001E0F000E0E000E0E000E0E00071C00071C00071C00071C0003B80003B8 0003B80001F00001F00000E00013127F9116>II<7F1FC0FF9FE07F1FC01C07000E07000E0E000E0E00070E00071C00 071C00039C00039C0003980001B80001B80000F00000F00000F00000E00000E00000E000 01C00079C0007BC0007F80003F00003C0000131B7F9116>121 D<3FFFC07FFFC07FFFC0 700780700F00701E00003C0000780001F00003E0000780000F00001E01C03C01C07801C0 FFFFC0FFFFC0FFFFC012127F9116>I<001F80007F8000FF8001E00001C00001C00001C0 0001C00001C00001C00001C00001C00001C00003C0007F8000FF0000FF00007F800003C0 0001C00001C00001C00001C00001C00001C00001C00001C00001C00001E00000FF80007F 80001F8011207E9C16>II<7C0000FF0000FF800003C00001C00001C00001C00001 C00001C00001C00001C00001C00001C00001E00000FF00007F80007F8000FF0001E00001 C00001C00001C00001C00001C00001C00001C00001C00001C00003C000FF8000FF00007C 000011207E9C16>I E /Fh 2 50 df<0060000060000060000060000060000060000060 00006000006000006000FFFFF0FFFFF00060000060000060000060000060000060000060 0000600000600000600014167E9119>43 D<0C001C00EC000C000C000C000C000C000C00 0C000C000C000C000C000C000C000C000C00FFC00A137D9211>49 D E /Fi 82 128 df<007E1F0001C1B1800303E3C00703C3C00E03C1800E01C0000E01C0 000E01C0000E01C0000E01C0000E01C000FFFFFC000E01C0000E01C0000E01C0000E01C0 000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0 000E01C0000E01C0000E01C0007F87FC001A1D809C18>11 D<007E0001C1800301800703 C00E03C00E01800E00000E00000E00000E00000E0000FFFFC00E01C00E01C00E01C00E01 C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01 C07F87F8151D809C17>I<007FC001C1C00303C00703C00E01C00E01C00E01C00E01C00E 01C00E01C00E01C0FFFFC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E 01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C07FCFF8151D809C17>I<003F07 E00001C09C18000380F018000701F03C000E01E03C000E00E018000E00E000000E00E000 000E00E000000E00E000000E00E00000FFFFFFFC000E00E01C000E00E01C000E00E01C00 0E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E 00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C007FC7FCFF80211D 809C23>I<6060F0F0F8F86868080808080808101010102020404080800D0C7F9C15>34 D<00E0000001900000030800000308000007080000070800000708000007080000071000 0007100000072000000740000003C03FE003800F00038006000380040005C0040009C008 0010E0100030E010006070200060702000E0384000E03C4000E01C8000E00F0020E00700 20700780403009C0401830E18007C03E001B1F7E9D20>38 D<60F0F86808080810102040 80050C7C9C0C>I<004000800100020006000C000C001800180030003000700060006000 6000E000E000E000E000E000E000E000E000E000E000E000E00060006000600070003000 3000180018000C000C00060002000100008000400A2A7D9E10>I<800040002000100018 000C000C000600060003000300038001800180018001C001C001C001C001C001C001C001 C001C001C001C001C0018001800180038003000300060006000C000C0018001000200040 0080000A2A7E9E10>I<60F0F0701010101020204080040C7C830C>44 DI<60F0F06004047C830C>I<00010003000600060006000C000C 000C0018001800180030003000300060006000C000C000C0018001800180030003000300 060006000C000C000C00180018001800300030003000600060006000C000C00010297E9E 15>I<03C00C301818300C300C700E60066006E007E007E007E007E007E007E007E007E0 07E007E007E007E00760066006700E300C300C18180C3007E0101D7E9B15>I<03000700 3F00C7000700070007000700070007000700070007000700070007000700070007000700 0700070007000700070007000F80FFF80D1C7C9B15>I<07C01830201C400C400EF00FF8 0FF807F8077007000F000E000E001C001C00380070006000C00180030006010C01180110 023FFE7FFEFFFE101C7E9B15>I<07E01830201C201C781E780E781E381E001C001C0018 0030006007E00030001C001C000E000F000F700FF80FF80FF80FF00E401C201C183007E0 101D7E9B15>I<000C00000C00001C00003C00003C00005C0000DC00009C00011C00031C 00021C00041C000C1C00081C00101C00301C00201C00401C00C01C00FFFFC0001C00001C 00001C00001C00001C00001C00001C0001FFC0121C7F9B15>I<300C3FF83FF03FC02000 2000200020002000200023E024302818301C200E000E000F000F000F600FF00FF00FF00F 800E401E401C2038187007C0101D7E9B15>I<00F0030C06040C0E181E301E300C700070 006000E3E0E430E818F00CF00EE006E007E007E007E007E007600760077006300E300C18 180C3003E0101D7E9B15>I<4000007FFF807FFF007FFF00400200800400800400800800 00100000100000200000600000400000C00000C00001C000018000018000038000038000 038000038000078000078000078000078000078000078000030000111D7E9B15>I<03E0 0C301008200C20066006600660067006780C3E083FB01FE007F007F818FC307E601E600F C007C003C003C003C00360026004300C1C1007E0101D7E9B15>I<03C00C301818300C70 0C600EE006E006E007E007E007E007E0076007700F300F18170C2707C700060006000E30 0C780C78187010203030C00F80101D7E9B15>I<60F0F0600000000000000000000060F0 F06004127C910C>I<7FFFFFC0FFFFFFE000000000000000000000000000000000000000 00000000000000000000000000FFFFFFE07FFFFFC01B0C7E8F20>61 D<0FE03038401CE00EF00EF00EF00E000C001C0030006000C00080018001000100010001 00010001000000000000000000000003000780078003000F1D7E9C14>63 D<000600000006000000060000000F0000000F0000000F00000017800000178000001780 000023C0000023C0000023C0000041E0000041E0000041E0000080F0000080F0000180F8 000100780001FFF80003007C0002003C0002003C0006003E0004001E0004001E000C001F 001E001F00FF80FFF01C1D7F9C1F>65 DI< 001F808000E0618001801980070007800E0003801C0003801C0001803800018078000080 7800008070000080F0000000F0000000F0000000F0000000F0000000F0000000F0000000 F0000000700000807800008078000080380000801C0001001C0001000E00020007000400 0180080000E03000001FC000191E7E9C1E>IIII<001F8080 00E0618001801980070007800E0003801C0003801C000180380001807800008078000080 70000080F0000000F0000000F0000000F0000000F0000000F0000000F000FFF0F0000F80 700007807800078078000780380007801C0007801C0007800E00078007000B8001801180 00E06080001F80001C1E7E9C21>III<1FFF00F8007800780078007800780078007800 78007800780078007800780078007800780078007800787078F878F878F878F0F040E021 C01F00101D7F9B15>IIIII<003F800000E0E0000380380007001C000E00 0E001C0007003C00078038000380780003C0780003C0700001C0F00001E0F00001E0F000 01E0F00001E0F00001E0F00001E0F00001E0F00001E0700001C0780003C0780003C03800 03803C0007801C0007000E000E0007001C000380380000E0E000003F80001B1E7E9C20> II82 D<07E0801C1980300580700380600180E00180E00080E00080E00080F00000F800007C00 007FC0003FF8001FFE0007FF0000FF80000F800007C00003C00001C08001C08001C08001 C0C00180C00180E00300D00200CC0C0083F800121E7E9C17>I<7FFFFFC0700F01C0600F 00C0400F0040400F0040C00F0020800F0020800F0020800F0020000F0000000F0000000F 0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F 0000000F0000000F0000000F0000000F0000000F0000001F800003FFFC001B1C7F9B1E> IIII<7FF0FFC00FC03E000780180003C0180003E0100001E0200001F0600000F0400000 788000007D8000003D0000001E0000001F0000000F0000000F8000000F80000013C00000 23E0000021E0000041F00000C0F8000080780001007C0003003C0002001E0006001F001F 003F80FFC0FFF01C1C7F9B1F>II 91 D<08081010202040404040808080808080B0B0F8F8787830300D0C7A9C15>II<0810204040808080B0F87830050C7D9C0C>96 D<1FC000307000783800781C00301C00001C00001C0001FC000F1C00381C00701C00601C 00E01C40E01C40E01C40603C40304E801F870012127E9115>II<07E00C301878307870306000E000E000E000E000E000E000 60007004300418080C3007C00E127E9112>I<003F000007000007000007000007000007 0000070000070000070000070000070003E7000C1700180F00300700700700600700E007 00E00700E00700E00700E00700E00700600700700700300700180F000C370007C7E0131D 7E9C17>I<03E00C301818300C700E6006E006FFFEE000E000E000E00060007002300218 040C1803E00F127F9112>I<00F8018C071E061E0E0C0E000E000E000E000E000E00FFE0 0E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E007FE00F1D 809C0D>I<00038003C4C00C38C01C3880181800381C00381C00381C00381C001818001C 38000C300013C0001000003000001800001FF8001FFF001FFF803003806001C0C000C0C0 00C0C000C06001803003001C0E0007F800121C7F9215>II<18003C003C0018000000000000000000000000000000FC001C00 1C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF80091D7F9C 0C>I<00C001E001E000C000000000000000000000000000000FE000E000E000E000E000 E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E060E0F0C0F1 C061803E000B25839C0D>IIIII<03F0000E1C00180600300300700380600180E001C0E001C0E001C0E001C0E0 01C0E001C06001807003803003001806000E1C0003F00012127F9115>II<03C1000C3300180B00300F00700700700700E00700E00700E00700E007 00E00700E00700600700700700300F00180F000C370007C7000007000007000007000007 00000700000700000700003FE0131A7E9116>II<1F9030704030C010C0 10E010F8007F803FE00FF000F880388018C018C018E010D0608FC00D127F9110>I<0400 0400040004000C000C001C003C00FFE01C001C001C001C001C001C001C001C001C001C10 1C101C101C101C100C100E2003C00C1A7F9910>IIII<7F8FF00F03800F030007020003840001C80001D80000F000007000007800 00F800009C00010E00020E000607000403801E07C0FF0FF81512809116>II<7FFC70386038407040F040E041C003C0038007000F040E041C043C0C 380870087038FFF80E127F9112>II<6060F0F0F0F060600C047C9C 15>127 D E /Fj 40 122 df 45 D<000E00001E00007E0007FE00FFFE00FFFE00F8FE0000FE0000FE0000FE0000FE00 00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00 00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00 00FE007FFFFE7FFFFE7FFFFE17277BA622>49 D<00FF800003FFF0000FFFFC001F03FE00 3800FF007C007F80FE003FC0FF003FC0FF003FE0FF001FE0FF001FE07E001FE03C003FE0 00003FE000003FC000003FC000007F8000007F000000FE000000FC000001F8000003F000 0003E00000078000000F0000001E0000003C00E0007000E000E000E001C001C0038001C0 070001C00FFFFFC01FFFFFC03FFFFFC07FFFFFC0FFFFFF80FFFFFF80FFFFFF801B277DA6 22>I<007F800003FFF00007FFFC000F81FE001F00FF003F80FF003F807F803F807F803F 807F801F807F800F007F800000FF000000FF000000FE000001FC000001F8000007F00000 FFC00000FFF0000001FC0000007E0000007F0000007F8000003FC000003FC000003FE000 003FE03C003FE07E003FE0FF003FE0FF003FE0FF003FC0FF007FC07E007F807C007F003F 01FE001FFFFC0007FFF00000FF80001B277DA622>I<00000E0000001E0000003E000000 7E000000FE000000FE000001FE000003FE0000077E00000E7E00000E7E00001C7E000038 7E0000707E0000E07E0000E07E0001C07E0003807E0007007E000E007E000E007E001C00 7E0038007E0070007E00E0007E00FFFFFFF8FFFFFFF8FFFFFFF80000FE000000FE000000 FE000000FE000000FE000000FE000000FE000000FE00007FFFF8007FFFF8007FFFF81D27 7EA622>I<0C0003000F803F000FFFFE000FFFFC000FFFF8000FFFF0000FFFE0000FFFC0 000FFE00000E0000000E0000000E0000000E0000000E0000000E0000000E7FC0000FFFF8 000F80FC000E003E000C003F0000001F8000001FC000001FC000001FE000001FE018001F E07C001FE0FE001FE0FE001FE0FE001FE0FE001FC0FC001FC078003F8078003F803C007F 001F01FE000FFFF80003FFF00000FF80001B277DA622>I<0007F000003FFC0000FFFE00 01FC0F0003F01F8007E03F800FC03F801FC03F801F803F803F801F003F8000007F000000 7F0000007F000000FF000000FF0FC000FF3FF800FF707C00FFC03E00FFC03F00FF801F80 FF801FC0FF001FC0FF001FE0FF001FE0FF001FE07F001FE07F001FE07F001FE07F001FE0 3F001FE03F001FC01F801FC01F803F800FC03F0007E07E0003FFFC0000FFF000003FC000 1B277DA622>I<380000003E0000003FFFFFF03FFFFFF03FFFFFF07FFFFFE07FFFFFC07F FFFF807FFFFF0070000E0070000E0070001C00E0003800E0007000E000E0000000E00000 01C000000380000007800000078000000F0000000F0000001F0000001F0000003F000000 3E0000003E0000007E0000007E0000007E0000007E000000FE000000FE000000FE000000 FE000000FE000000FE000000FE000000FE0000007C0000003800001C297CA822>I<0000 03800000000007C00000000007C0000000000FE0000000000FE0000000000FE000000000 1FF0000000001FF0000000003FF8000000003FF8000000003FF80000000073FC00000000 73FC00000000F3FE00000000E1FE00000000E1FE00000001C0FF00000001C0FF00000003 C0FF80000003807F80000007807FC0000007003FC0000007003FC000000E003FE000000E 001FE000001E001FF000001C000FF000001FFFFFF000003FFFFFF800003FFFFFF8000078 0007FC0000700003FC0000700003FC0000E00001FE0000E00001FE0001E00001FF0001C0 0000FF0001C00000FF00FFFE001FFFFEFFFE001FFFFEFFFE001FFFFE2F297EA834>65 D<00003FF001800003FFFE0380000FFFFF8780003FF007DF8000FF8001FF8001FE00007F 8003FC00003F8007F000001F800FF000000F801FE0000007801FE0000007803FC0000007 803FC0000003807FC0000003807F80000003807F8000000000FF8000000000FF80000000 00FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF80000000 00FF80000000007F80000000007F80000000007FC0000003803FC0000003803FC0000003 801FE0000003801FE0000007000FF00000070007F000000E0003FC00001E0001FE00003C 0000FF8000F800003FF007E000000FFFFFC0000003FFFF000000003FF8000029297CA832 >67 DI73 D75 D<0000FFE000000007FFFC0000003FC07F8000007F001FC00001FC0007F00003F80003F8 0007F00001FC000FF00001FE001FE00000FF001FE00000FF003FC000007F803FC000007F 807FC000007FC07F8000003FC07F8000003FC07F8000003FC0FF8000003FE0FF8000003F E0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003F E0FF8000003FE0FF8000003FE07F8000003FC07FC000007FC07FC000007FC03FC000007F 803FC000007F801FE00000FF001FE00000FF000FF00001FE0007F00001FC0003F80003F8 0001FC0007F00000FF001FE000003FC07F8000000FFFFE00000000FFE000002B297CA834 >79 D82 D<007F806003FFF0E007FFF9E00F807FE01F001FE03E0007E07C0003E07C0001 E0FC0001E0FC0001E0FC0000E0FE0000E0FE0000E0FF000000FFC000007FFE00007FFFE0 003FFFFC001FFFFE000FFFFF8007FFFFC003FFFFE000FFFFE00007FFF000007FF000000F F8000007F8000003F8600001F8E00001F8E00001F8E00001F8F00001F0F00001F0F80003 F0FC0003E0FF0007C0FFE01F80F3FFFF00E0FFFE00C01FF0001D297CA826>I87 D<01FF800007FFF0000F81F8001FC07E001FC07E001FC03F 000F803F8007003F8000003F8000003F8000003F80000FFF8000FFFF8007FC3F800FE03F 803F803F803F003F807F003F80FE003F80FE003F80FE003F80FE003F807E007F807F00DF 803F839FFC0FFF0FFC01FC03FC1E1B7E9A21>97 DI<001FF80000FFFE0003F01F0007E0 3F800FC03F801F803F803F801F007F800E007F0000007F000000FF000000FF000000FF00 0000FF000000FF000000FF000000FF0000007F0000007F0000007F8000003F8001C01F80 01C00FC0038007E0070003F01E0000FFFC00001FE0001A1B7E9A1F>I<00003FF8000000 3FF80000003FF800000003F800000003F800000003F800000003F800000003F800000003 F800000003F800000003F800000003F800000003F800000003F800000003F800001FE3F8 0000FFFBF80003F03FF80007E00FF8000FC007F8001F8003F8003F8003F8007F0003F800 7F0003F8007F0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF 0003F800FF0003F8007F0003F8007F0003F8007F0003F8003F8003F8001F8003F8000F80 07F80007C00FF80003F03BFF8000FFF3FF80003FC3FF80212A7EA926>I<003FE00001FF F80003F07E0007C01F000F801F801F800F803F800FC07F000FC07F0007C07F0007E0FF00 07E0FF0007E0FFFFFFE0FFFFFFE0FF000000FF000000FF0000007F0000007F0000007F00 00003F8000E01F8000E00FC001C007E0038003F81F0000FFFE00001FF0001B1B7E9A20> I<0007F0003FFC00FE3E01F87F03F87F03F07F07F07F07F03E07F00007F00007F00007F0 0007F00007F00007F000FFFFC0FFFFC0FFFFC007F00007F00007F00007F00007F00007F0 0007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0 0007F00007F00007F0007FFF807FFF807FFF80182A7EA915>I<00FF81F003FFE7F80FC1 FE7C1F80FC7C1F007C383F007E107F007F007F007F007F007F007F007F007F007F007F00 7F003F007E001F007C001F80FC000FC1F8001FFFE00018FF800038000000380000003C00 00003E0000003FFFF8001FFFFF001FFFFF800FFFFFC007FFFFE01FFFFFF03E0007F07C00 01F8F80000F8F80000F8F80000F8F80000F87C0001F03C0001E01F0007C00FC01F8003FF FE00007FF0001E287E9A22>II<07000FC01FE03FE03FE03FE01FE00FC0070000000000 00000000000000000000FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0 0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFFFE0F2B7DAA14>I<00 0700000F80001FC0003FE0003FE0003FE0001FC0000F8000070000000000000000000000 000000000000000000000001FFE001FFE001FFE0000FE0000FE0000FE0000FE0000FE000 0FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE000 0FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE07C0FE0FE 0FE0FE0FC0FE1F80FE1F007C3E003FFC000FF000133784AA15>IIIII<003FE00001FFFC0003F07E000FC01F801F 800FC03F800FE03F0007E07F0007F07F0007F07F0007F0FF0007F8FF0007F8FF0007F8FF 0007F8FF0007F8FF0007F8FF0007F8FF0007F87F0007F07F0007F03F800FE03F800FE01F 800FC00FC01F8007F07F0001FFFC00003FE0001D1B7E9A22>II114 D<03FE300FFFF01E03F03800F0700070F00070F00070F80070FC0000FFE0007FFE007FFF 803FFFE01FFFF007FFF800FFF80003FC0000FC60007CE0003CF0003CF00038F80038FC00 70FF01E0F7FFC0C1FF00161B7E9A1B>I<00700000700000700000700000F00000F00000 F00001F00003F00003F00007F0001FFFF0FFFFF0FFFFF007F00007F00007F00007F00007 F00007F00007F00007F00007F00007F00007F00007F00007F00007F03807F03807F03807 F03807F03807F03803F03803F87001F86000FFC0001F8015267FA51B>II119 DII E /Fk 2 104 df<000F0038007000E001C001C001C001C001C001C001C001C001C0 01C001C001C001C001C001C001C001C0038007001E00F0001E000700038001C001C001C0 01C001C001C001C001C001C001C001C001C001C001C001C001C001C000E000700038000F 10317CA419>102 DI E /Fl 27 120 df<70F8FCFC7404040404080810102040060F7C840E>44 D<70F8F8F87005057C840E>46 D<000FE00000701C000080020003000180040000400800 0020080000201007C01020183008203008084060040440C0078441C0038481C003828380 038283800382838003828380038283800382838003828380038281C0038241C0038240C0 07824060078420300B84201831881007C0F00800000008000000040000000300000E0080 0078007007C0000FFC001F237DA226>64 D<0007E0100038183000E0063001C001700380 00F0070000F00E0000701E0000701C0000303C0000303C0000307C000010780000107800 0010F8000000F8000000F8000000F8000000F8000000F8000000F8000000F80000007800 0000780000107C0000103C0000103C0000101C0000201E0000200E000040070000400380 008001C0010000E0020000381C000007E0001C247DA223>67 DI73 D75 DI< 7FFFFFF87807807860078018400780084007800840078008C007800C8007800480078004 800780048007800400078000000780000007800000078000000780000007800000078000 000780000007800000078000000780000007800000078000000780000007800000078000 0007800000078000000780000007800000078000000FC00003FFFF001E227EA123>84 D87 D<0FE0001838003C0C003C0E0018070000070000070000070000FF0007C7001E0700 3C0700780700700700F00708F00708F00708F00F087817083C23900FC1E015157E9418> 97 D<01FE000703000C07801C0780380300780000700000F00000F00000F00000F00000 F00000F00000F000007000007800403800401C00800C010007060001F80012157E9416> 99 D<0000E0000FE00001E00000E00000E00000E00000E00000E00000E00000E00000E0 0000E00000E00000E001F8E00704E00C02E01C01E03800E07800E07000E0F000E0F000E0 F000E0F000E0F000E0F000E0F000E07000E07800E03800E01801E00C02E0070CF001F0FE 17237EA21B>I<01FC000707000C03801C01C03801C07801E07000E0F000E0FFFFE0F000 00F00000F00000F00000F000007000007800203800201C00400E008007030000FC001315 7F9416>I<003C00C6018F038F030F070007000700070007000700070007000700FFF807 000700070007000700070007000700070007000700070007000700070007000700070007 807FF8102380A20F>I<00007001F198071E180E0E181C07001C07003C07803C07803C07 803C07801C07001C07000E0E000F1C0019F0001000001000001800001800001FFE000FFF C00FFFE03800F0600030400018C00018C00018C000186000306000303800E00E038003FE 0015217F9518>I<1C001E003E001E001C00000000000000000000000000000000000E00 FE001E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00 0E00FFC00A227FA10E>105 D<0E0000FE00001E00000E00000E00000E00000E00000E00 000E00000E00000E00000E00000E00000E00000E03FC0E01F00E01C00E01800E02000E04 000E08000E10000E38000EF8000F1C000E1E000E0E000E07000E07800E03C00E01C00E01 E00E00F00E00F8FFE3FE17237FA21A>107 D<0E00FE001E000E000E000E000E000E000E 000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E 000E000E000E000E000E000E000E00FFE00B237FA20E>I<0E1FC07F00FE60E183801E80 7201C00F003C00E00F003C00E00E003800E00E003800E00E003800E00E003800E00E0038 00E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800 E00E003800E00E003800E00E003800E0FFE3FF8FFE27157F942A>I<0E1F80FE60C01E80 E00F00700F00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00 700E00700E00700E00700E00700E0070FFE7FF18157F941B>I<01FC000707000C018018 00C03800E0700070700070F00078F00078F00078F00078F00078F00078F0007870007078 00F03800E01C01C00E038007070001FC0015157F9418>I<0E1F00FE61C00E80600F0070 0E00380E003C0E001C0E001E0E001E0E001E0E001E0E001E0E001E0E001E0E003C0E003C 0E00380F00700E80E00E41C00E3F000E00000E00000E00000E00000E00000E00000E0000 0E00000E0000FFE000171F7F941B>I<0E3CFE461E8F0F0F0F060F000E000E000E000E00 0E000E000E000E000E000E000E000E000E000F00FFF010157F9413>114 D<02000200020002000600060006000E001E003E00FFF80E000E000E000E000E000E000E 000E000E000E000E000E040E040E040E040E040E040708030801F00E1F7F9E13>116 D<0E0070FE07F01E00F00E00700E00700E00700E00700E00700E00700E00700E00700E00 700E00700E00700E00700E00700E00F00E00F006017003827800FC7F18157F941B>I119 D E /Fm 22 122 df<00003FE0010001FF F8030007F01E03001F800307003E000087007800004F00F000002F01E000001F03C00000 0F078000000F0F800000070F000000071F000000031E000000033E000000033C00000001 7C000000017C000000017C000000017800000000F800000000F800000000F800000000F8 00000000F800000000F800000000F800000000F800000000F800000000F800000000F800 00000078000000007C000000007C000000017C000000013C000000013E000000011E0000 00011F000000020F000000020F80000006078000000403C000000801E000000800F00000 100078000020003E0000C0001F8003800007F00F000001FFFC0000003FE00028337CB130 >67 DI72 D75 D<00003FC000000001C03800000007000E0000001C00 03800000380001C00000F00000F00001E00000780003C000003C00038000001C00078000 001E000F0000000F000F0000000F001E00000007801E00000007803C00000003C03C0000 0003C07C00000003E07C00000003E07800000001E07800000001E0F800000001F0F80000 0001F0F800000001F0F800000001F0F800000001F0F800000001F0F800000001F0F80000 0001F0F800000001F0F800000001F0F800000001F07C00000003E07C00000003E07C0000 0003E07C00000003E03C00000003C03E00000007C01E00000007801E00000007800F0000 000F000F0000000F00078000001E0003C000003C0003C000003C0001E00000780000F000 00F00000380001C000001C000380000007000E00000001E078000000003FC000002C337C B134>79 D<07800000FF800000FF8000000F800000078000000780000007800000078000 000780000007800000078000000780000007800000078000000780000007800000078000 0007800000078000000781FC0007860700078801C0079000E007A0007007C00078078000 380780003C0780003C0780001E0780001E0780001F0780001F0780001F0780001F078000 1F0780001F0780001F0780001F0780001F0780001E0780003E0780003C0780003C078000 7807C00070072000F0072001E00618038006060F000401F80020327EB125>98 D<003F8000E0600380180700040F00041E001E1C003E3C003E7C003E7C0008780000F800 00F80000F80000F80000F80000F80000F80000F80000F800007800007C00007C00003C00 011E00011E00020F000207000403801800E060003F80181F7D9E1D>I<000001E000003F E000003FE0000003E0000001E0000001E0000001E0000001E0000001E0000001E0000001 E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0001F81 E000F061E001C019E0078005E00F0003E00E0003E01E0001E03C0001E03C0001E07C0001 E0780001E0F80001E0F80001E0F80001E0F80001E0F80001E0F80001E0F80001E0F80001 E0F80001E0780001E0780001E03C0001E03C0001E01C0001E01E0003E00E0005E0070009 E0038011F000E061FF003F81FF20327DB125>I<003F800000E0E0000380380007003C00 0E001E001E001E001C000F003C000F007C000F0078000F8078000780F8000780F8000780 FFFFFF80F8000000F8000000F8000000F8000000F8000000F8000000780000007C000000 3C0000003C0000801E0000800E0001000F0002000780020001C00C0000F03000001FC000 191F7E9E1D>I<000000F0007F030801C1C41C0380E81C070070080F0078001E003C001E 003C003E003E003E003E003E003E003E003E003E003E003E003E001E003C001E003C000F 007800070070000780E00009C1C000087F00001800000018000000180000001800000018 0000001C0000000E0000000FFFF80007FFFF0003FFFF800E000FC0180001E0300000F070 000070E0000038E0000038E0000038E0000038E00000387000007070000070380000E01C 0001C00700070001C01C00003FE0001E2F7E9F21>103 D<0780000000FF80000000FF80 0000000F8000000007800000000780000000078000000007800000000780000000078000 000007800000000780000000078000000007800000000780000000078000000007800000 00078000000007800000000780FE00000783078000078C03C000079001E00007A001E000 07A000F00007C000F00007C000F000078000F000078000F000078000F000078000F00007 8000F000078000F000078000F000078000F000078000F000078000F000078000F0000780 00F000078000F000078000F000078000F000078000F000078000F000078000F000078000 F000078000F0000FC001F800FFFC1FFF80FFFC1FFF8021327EB125>I<07000F801F801F 800F800700000000000000000000000000000000000000000000000780FF80FF800F8007 800780078007800780078007800780078007800780078007800780078007800780078007 80078007800780078007800FC0FFF8FFF80D307EAF12>I<001E003F003F003F003F001E 00000000000000000000000000000000000000000000001F01FF01FF001F000F000F000F 000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F 000F000F000F000F000F000F000F000F000F000F000F000F000F200EF80EF81EF81C7038 60701FC0103E83AF14>I<0780FF80FF800F800780078007800780078007800780078007 800780078007800780078007800780078007800780078007800780078007800780078007 8007800780078007800780078007800780078007800780078007800780078007800FC0FF FCFFFC0E327EB112>108 D<0780FE0000FF83078000FF8C03C0000F9001E00007A001E0 0007A000F00007C000F00007C000F000078000F000078000F000078000F000078000F000 078000F000078000F000078000F000078000F000078000F000078000F000078000F00007 8000F000078000F000078000F000078000F000078000F000078000F000078000F0000780 00F000078000F0000FC001F800FFFC1FFF80FFFC1FFF80211F7E9E25>110 D<001FC00000F0780001C01C00070007000F0007801E0003C01C0001C03C0001E03C0001 E0780000F0780000F0780000F0F80000F8F80000F8F80000F8F80000F8F80000F8F80000 F8F80000F8F80000F8780000F07C0001F03C0001E03C0001E01E0003C01E0003C00F0007 8007800F0001C01C0000F07800001FC0001D1F7E9E21>I<0783E0FF8C18FF907C0F907C 07A07C07C03807C00007C00007C000078000078000078000078000078000078000078000 078000078000078000078000078000078000078000078000078000078000078000078000 0FC000FFFE00FFFE00161F7E9E19>114 D<01FC100E03301800F0300070600030E00030 E00010E00010E00010F00010F800007E00003FF0001FFF000FFFC003FFE0003FF00001F8 0000F880003C80003C80001CC0001CC0001CE0001CE00018F00038F00030CC0060C301C0 80FE00161F7E9E1A>I<00400000400000400000400000400000C00000C00000C00001C0 0001C00003C00007C0000FC0001FFFE0FFFFE003C00003C00003C00003C00003C00003C0 0003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C01003C0 1003C01003C01003C01003C01003C01003C01001C02001E02000E0400078C0001F00142C 7FAB19>I<078000F000FF801FF000FF801FF0000F8001F000078000F000078000F00007 8000F000078000F000078000F000078000F000078000F000078000F000078000F0000780 00F000078000F000078000F000078000F000078000F000078000F000078000F000078000 F000078000F000078000F000078001F000078001F000078001F000038002F00003C004F0 0001C008F800007030FF80001FC0FF80211F7E9E25>I 119 D121 D E end %%EndProlog %%BeginSetup %%Feature: *Resolution 300dpi TeXDict begin %%PaperSize: A4 %%EndSetup %%Page: 1 1 1 0 bop 167 151 a Fm(Highly)20 b(Concurren)n(t)i(Distributed)g(Kno)n (wledge)e(Ob)t(jects)651 271 y Fl(K.L.)15 b(Clark,)h(T.)g(I.)g(W)l(ang) 615 329 y(Departmen)o(t)e(of)j(Computing)723 387 y(Imp)q(erial)d (College)817 445 y(London)658 504 y Fk(f)p Fl(klc,tiw)p Fk(g)p Fl(@do)q(c.ic.ac.)o(uk)-47 666 y Fj(Abstract)-47 795 y Fi(This)26 b(pap)q(er)i(in)o(tro)q(duces)f(a)g(distributed)g(ob)r (ject)h(ori-)-47 845 y(en)o(ted)18 b(logic)e(programming)e(language,)i (DK)p 682 845 13 2 v 15 w(P)o(arlog)813 830 y Fh(++)865 845 y Fi(,)-47 895 y(in)11 b(whic)o(h)g(eac)o(h)h(ob)r(ject,)g(in)f (addition)f(to)h(the)h(normal)d(pro-)-47 945 y(cedural)18 b(metho)q(ds)g(for)f(accessing)j(and)d(up)q(dating)h(state)-47 994 y(comp)q(onen)o(ts,)23 b(also)f(has)g(kno)o(wledge)h(metho)q(ds)e (in)h(the)-47 1044 y(form)16 b(of)h(Prolog)f(rules.)30 b(The)18 b(language)f(is)g(an)h(OO)g(ex-)-47 1094 y(tension)e(of)e(a)h (distributed,)h(m)o(ulti-threaded,)f(logic)f(pro-)-47 1144 y(grammi)o(ng)i(system.)32 b(Encapsulation)19 b(is)f(b)o(y)h (class)g(def-)-47 1194 y(initions)24 b(link)o(ed)g(via)g(single)g (inheritance.)52 b(Pro)q(cedu-)-47 1243 y(ral)13 b(metho)q(d)g(in)o(v)o (o)q(cation)f(is)h(via)g(async)o(hronous)h(message)-47 1293 y(send)22 b(to)f(the)h(unique)f(ob)r(ject)h(iden)o(ti\014er.)41 b(Kno)o(wledge)-47 1343 y(metho)q(d)9 b(in)o(v)o(o)q(cation)g(is)g(via) g(sync)o(hronous)i(remote)f(pro)q(ce-)-47 1393 y(dure)k(call.)j (Classes)d(are)g(also)f(ob)r(jects)i(-)e(they)h(ha)o(v)o(e)f(their)-47 1443 y(o)o(wn)k(state)i(comp)q(onen)o(ts)f(and)f(metho)q(ds.)30 b(An)18 b(applica-)-47 1493 y(tion)d(in)h(D)p 125 1493 V 14 w(P)o(arlog)255 1477 y Fh(++)324 1493 y Fi(consists)h(of)e(a)h (collection)f(of)h(con-)-47 1542 y(curren)o(tly)k(executing)h(ob)r (jects\(classes)h(and)e(instances\))-47 1592 y(distributed)14 b(o)o(v)o(er)g(a)g(lo)q(cal)f(area)h(net)o(w)o(ork.)-47 1678 y(The)k(kno)o(wledge)f(metho)q(ds)g(can)h(b)q(e)g(public)f(or)h (priv)n(ate,)-47 1728 y(and)e(can)i(b)q(e)f(dynamically)d(mo)q (di\014ed)i(b)o(y)g(the)i(pro)q(cedu-)-47 1777 y(ral)12 b(metho)q(ds)h(of)f(the)h(ob)r(ject)h(using)f(Prolog)f(st)o(yle)h(kno)o (wl-)-47 1827 y(edge)19 b(base)h(manipulatio)o(n)c(primitiv)o(es.)31 b(The)20 b(dynamic)-47 1877 y(kno)o(wledge)12 b(of)f(an)h(ob)r(ject)h (can)f(b)q(e)h(used)g(as)f(a)g(declarativ)o(e)-47 1927 y(represen)o(tation)j(of)e(part)i(of)e(its)h(state.)-47 2012 y(This)f(pap)q(er)h(assumes)g(some)e(familiarit)o(y)e(with)j (concepts)-47 2062 y(of)25 b(concurren)o(t)j(ob)r(ject)f(orien)o(ted)g (programmi)o(ng)c(and)-47 2112 y(logic)f(programming)o(,)h(ideally)f (concurren)o(t)j(logic)d(pro-)-47 2162 y(grammi)o(ng,)c(but)i(famili)o (arit)o(y)c(with)k(Prolog)f(will)f(prob-)-47 2212 y(ably)13 b(su\016ce.)-47 2395 y Fj(1)69 b(In)n(tro)r(duction)-47 2524 y Fi(Shapiro)12 b(and)g(T)m(ak)o(euc)o(hi[ST83)o(])g(\014rst)h (demonstrated)g(the)-47 2574 y(p)q(oten)o(tial)g(of)h(com)o(bining)e (Concurren)o(t)j(Logic)e(Program-)-47 2624 y(ming)d(\(CLP\))k(and)e (OOP)i(to)f(form)e(a)h(new)i(programmi)o(ng)-47 2673 y(paradigm.)19 b(They)d(in)o(v)o(estigated)f(the)g(p)q(ossibilit)o(y)f (of)h(im-)-47 2723 y(plemen)o(ting)c(activ)o(e)i(ob)r(jects,)h(with)f (encapsulated)h(state,)-47 2773 y(as)19 b(pro)q(cesses)j(in)c(a)h(CLP)g (language.)32 b(In)19 b(their)h(mo)q(del,)-47 2823 y(an)12 b(ob)r(ject)h(is)f(implemen)o(ted)f(as)h(a)g(tail-recursiv)o(e)h(pro)q (cess)918 666 y(that)20 b(passes)h(the)f(up)q(dated)g(state)h(comp)q (onen)o(ts)e(of)g(the)918 716 y(ob)r(ject)c(as)f(argumen)o(ts)f(in)h (the)g(recursiv)o(e)i(call.)918 802 y(F)m(ollo)o(wing)23 b(their)i(mo)q(del,)h(sev)o(eral)g(language)e(prop)q(os-)918 852 y(als)c(suc)o(h)i(as)e(P)o(olk)n(a[Da)o(v89)m(],)h(V)m(ulcan)f ([KTMB87])g(and)918 901 y(A'UM[YC88)o(])f(ha)o(v)o(e)g(since)i (emerged.)34 b(Eac)o(h)20 b(is)f(essen-)918 951 y(tially)14 b(syn)o(tactic)i(sugar)f(for)g(de\014ning)g(the)h(CLP)g(pro)q(cess)918 1001 y(that)e(will)f(implemen)o(t)e(eac)o(h)j(instance)h(ob)r(ject.)918 1087 y(Most)g(of)f(these)i(languages)e(use)h(a)f(class)h(declaration)f (\(or)918 1136 y(an)k(equiv)n(alen)o(t\))g(just)g(as)h(the)g(v)o (ehicle)f(for)g(de\014ning)g(the)918 1186 y(metho)q(ds)10 b(of)g(the)h(instances)h(of)e(the)h(class.)17 b(The)11 b(class)g(dec-)918 1236 y(laration)16 b(is)h(compiled)e(in)o(to)i(a)f (pro)q(cedure)j(de\014nition)e(in)918 1286 y(the)f(CLP)f(language.)20 b(Creating)15 b(an)f(instance)i(of)e(a)h(class)918 1336 y(is)h(then)h(just)f(syn)o(tactic)h(sugar)f(for)f(a)h(direct)h(in)o(v)o (o)q(cation)918 1385 y(of)c(this)g(pro)q(cedure)i(as)e(a)g(recursiv)o (e)h(pro)q(cess.)20 b(In)13 b(this)g(ap-)918 1435 y(proac)o(h,)k(no)f (global)f(information)f(ab)q(out)i(these)i(created)918 1485 y(instances)12 b(is)f(automatically)d(k)o(ept.)17 b(Th)o(us,)12 b(no)e(managing)918 1535 y(op)q(erations)18 b(on)g(these)h(instances)g(can)e(b)q(e)i(con)o(v)o(enien)o(tly)918 1585 y(p)q(erformed.)24 b(F)m(or)16 b(example,)e(one)i(cannot)g(easily) g(broad-)918 1634 y(cast)h(a)e(message)g(to)g(all)f(the)i(mem)o(b)q (ers)e(of)h(the)h(class.)23 b(In)918 1684 y(addition,)14 b(ob)r(jects)h(cannot)g(b)q(e)g(giv)o(en)g(public)f(names,)f(so)918 1734 y(in)i(order)g(for)f(one)h(ob)r(ject)g(O)g(to)f(send)i(a)e (message)g(to)h(an-)918 1784 y(other)d(ob)r(ject)f(O',)f(O)h(m)o(ust)e (b)q(e)j(passed)f(the)h(iden)o(tit)o(y)e(of)g(O')918 1834 y(in)h(a)f(message,)h(or)g(b)q(e)g(giv)o(en)f(the)i(iden)o(tit)o (y)e(as)h(the)g(v)n(alue)f(of)918 1884 y(one)15 b(of)f(its)h(state)g (comp)q(onen)o(ts)f(when)h(it)f(is)h(created.)21 b(Fi-)918 1933 y(nally)m(,)12 b(inheritance)j(is)f(generally)f(implemen)o(ted)f (as)i(mes-)918 1983 y(sage)i(delegation,)f(and)g(for)g(eac)o(h)g (created)i(instance)f(of)f(a)918 2033 y(sub)q(class)j(there)f(will)e(b) q(e)i(a)f(string)g(of)g(pro)q(cesses)j(fork)o(ed,)918 2083 y(one)12 b(for)f(eac)o(h)h(lev)o(el)f(in)g(the)h(class)f(hierarc)o (h)o(y)m(.)17 b(This)12 b(is)f(p)q(er-)918 2133 y(haps)j(acceptable)g (in)e(a)h(non-distributed)h(system,)e(but)i(is)918 2182 y(not)h(accepted)h(if)e(the)h(di\013eren)o(t)g(pro)q(cesses)i(migh)o(t) 12 b(reside)918 2232 y(on)19 b(di\013eren)o(t)g(mac)o(hines.)32 b(W)m(e)18 b(ha)o(v)o(e)g(adopted)h(a)g(some-)918 2282 y(what)12 b(di\013eren)o(t)h(approac)o(h)e(in)h(constructing)g(our)g (OO)g(ex-)918 2332 y(tension)19 b(of)g(a)f(distributed)h(v)o(ersion)g (of)f(the)i(concurren)o(t)918 2382 y(logic)13 b(programmi)o(ng)e (\(CLP\))j(language)e(P)o(arlog)h([CG86)n(].)918 2467 y(In)21 b(our)g(approac)o(h,)i(classes)f(are)f(activ)o(e)g(ob)r(jects,) j(they)918 2517 y(ha)o(v)o(e)g(there)h(o)o(wn)f(metho)q(ds)f(and,)j (lik)o(e)d(the)i(class)f(in-)918 2567 y(stances,)38 b(are)32 b(implemen)o(ted)e(as)i(P)o(arlog)f(pro)q(cesses.)918 2617 y(Classes)16 b(are)f(also)f(the)h(main)d(mec)o(hanism)g(for)j (distribut-)918 2666 y(ing)i(the)i(computation.)27 b(W)m(e)18 b(just)g(load)e(di\013eren)o(t)j(class)918 2716 y(ob)r(jects)d(on)o(to) e(di\013eren)o(t)h(mac)o(hines)f(of)g(a)g(lo)q(cal)f(area)i(net-)918 2766 y(w)o(ork.)33 b(All)18 b(the)i(activ)o(e)e(instances)i(of)f(a)f (class)i(will,)e(b)o(y)918 2816 y(default,)i(reside)g(on)f(the)g(same)f (mac)o(hine)g(as)h(the)h(class,)887 2947 y(1)p eop %%Page: 2 2 2 1 bop -47 18 a Fi(but)14 b(an)h(inheriting)f(class,)g(and)g(hence)i (all)e(its)g(instances,)-47 68 y(can)f(reside)g(on)g(another)g(mac)o (hine.)j(Inheritance)e(of)e(class)-47 118 y(metho)q(ds)17 b(is)h(implemen)o(ted)e(using)i(delegation,)g(but)g(in-)-47 167 y(heritance)12 b(of)f(instance)i(metho)q(ds)e(is)g(implemen)o(ted)e (using)-47 217 y(co)q(de)h(cop)o(ying)f(at)g(compile)e(time)i(as)g(in)g (Smalltalk[)o(GR)o(83)m(].)-47 267 y(So)g(instance)i(lev)o(el)e(metho)q (d)g(inheritance,)i(ev)o(en)g(when)f(the)-47 317 y(sup)q(erclass)17 b(resides)g(on)e(a)g(di\013eren)o(t)h(mac)o(hine,)e(do)q(es)i(not)-47 367 y(require)23 b(a)g(delegation)f(comm)o(unicatio)o(n)e(b)q(et)o(w)o (een)k(the)-47 416 y(mac)o(hines.)-47 502 y(All)17 b(ob)r(ject)i(metho) q(ds,)g(whether)h(for)e(class)h(or)f(instance)-47 552 y(ob)r(jects,)i(are)g(in)o(v)o(ok)o(ed)d(b)o(y)i(sending)g(a)f(message) h(to)f(the)-47 602 y(ob)r(ject)k(denoted)g(b)o(y)g(its)f(unique)h(ob)r (ject)g(iden)o(tit)o(y)m(.)40 b(A)-47 651 y(class)19 b(ob)r(ject's)h(iden)o(tit)o(y)f(is)f(its)i(public)e(name,)h(suc)o(h)h (as)-47 701 y Fg(bank)p Fi(,)d(giv)o(en)f(in)h(the)h(program.)27 b(An)17 b(instance)h(iden)o(tit)o(y)-47 751 y(can)c(either)g(b)q(e)g (programmer)d(assigned,)j(or)f(system)h(gen-)-47 801 y(erated.)40 b(The)21 b(fact)g(that)f(instance)i(ob)r(jects)g(can)f(ha) o(v)o(e)-47 851 y(public)f(names)g(is)g(another)h(distinguishing)e (feature)i(of)-47 901 y(the)e(language.)30 b Ff(M)22 b(=)p Fe(>)f Ff(O)d Fi(sends)i(message)e Ff(M)h Fi(to)f Ff(O)-47 950 y Fi(async)o(hronously)m(.)-47 1036 y(The)c(language)g(is) g(highly)f(concurren)o(t.)21 b(All)13 b(ob)r(jects)j(can)-47 1086 y(pro)q(cess)h(their)f(stream)f(of)f(incoming)g(messages)h (concur-)-47 1136 y(ren)o(tly)m(.)26 b(That)17 b(is,)g(as)f(so)q(on)h (as)g(a)f(message)h(is)g(accepted,)-47 1185 y(and)h(the)h(metho)q(d)e (for)h(the)h(message)f(is)g(activ)n(ated,)h(the)-47 1235 y(ob)r(ject)f(is)f(able)g(to)h(accept)g(the)g(next)g(message.)29 b(In)17 b(ad-)-47 1285 y(dition,)e(eac)o(h)h(of)f(the)i(actions)e(of)h (a)f(metho)q(d)g(can)h(b)q(e)h(ex-)-47 1335 y(ecuted)g(concurren)o(tly) m(.)26 b(So)15 b(DK)p 471 1335 13 2 v 15 w(P)o(arlog)602 1320 y Fh(++)670 1335 y Fi(ob)r(jects)j(can)-47 1385 y(exhibit)f(the)h(high)f(degree)i(of)e(in)o(ternal)g(concurrency)i(of) -47 1434 y(actors)14 b([AH87].)j(On)d(the)h(other)f(hand,)g(the)g (actions)g(of)f(a)-47 1484 y(metho)q(d)f(can)i(b)q(e)g(sequen)o (tialised)g(if)f(need)h(b)q(e,)g(and)f(m)o(uc)o(h)-47 1534 y(more)h(easily)i(than)f(in)g(the)h(actor)g(paradigm.)21 b(It)16 b(is)g(sim-)-47 1584 y(ply)11 b(a)g(matter)g(of)g(de\014ning)g (the)i(metho)q(d)d(as)i(a)f(sequen)o(tial,)-47 1634 y(rather)k(than)e (parallel,)g(conjunction)g(of)h(actions.)-47 1805 y Ff(Adding)g(kno)o (wledge)h(to)h(ob)s(jects)39 b Fi(A)15 b(ma)r(jor)d(short-)-47 1855 y(coming)20 b(of)h(the)h(CLP)g(based)h(OO)f(languages)f(is)h(that) -47 1905 y(metho)q(d)14 b(calls)h(can)h(only)e(return)j(one)e (solution.)22 b(This)15 b(is)-47 1954 y(b)q(ecause)k(of)d(the)i (committed)d(c)o(hoice)i(non-determinism)-47 2004 y(of)c(the)i (underlying)e(CLP)h(language.)-47 2090 y(Ho)o(w)o(ev)o(er,)i(to)f(man)o (y)m(,)f(logic)g(programming)e(is)k(iden)o(ti\014ed)-47 2140 y(as)e(the)g(de\014nition)f(of)g(relations,)g(and)h(with)f (queries)i(that)-47 2189 y(return)22 b(m)o(ultiple)d(solutions.)41 b(So,)22 b(as)g(w)o(ell)e(as)i(ha)o(ving)-47 2239 y(the)16 b(normal)e(single)h(solution)g Fd(pr)n(o)n(c)n(e)n(dur)n(al)g Fi(metho)q(ds,)h(ev-)-47 2289 y(ery)g(ob)r(ject)h(in)e(D)p 237 2289 V 15 w(P)o(arlog)368 2274 y Fh(++)436 2289 y Fi(can)h(also)f(ha)o(v)o(e)h Fd(know)r(le)n(dge)-47 2339 y Fi(metho)q(ds,)10 b(expressed)i(as)e(Prolog)g(clauses.)18 b(These)11 b(kno)o(wl-)-47 2389 y(edge)16 b(metho)q(ds)f(can)h(b)q(e)g (further)h(sub)q(divided)f(in)o(to)f(pub-)-47 2438 y(lic)g(and)g(priv)n (ate)g(kno)o(wledge)h(metho)q(ds.)22 b(In)16 b(con)o(trast)g(to)-47 2488 y(the)e(pro)q(cedural)g(metho)q(ds,)f(whic)o(h)g(cannot)h(b)q(e)g (c)o(hanged,)-47 2538 y(kno)o(wledge)20 b(metho)q(ds)h(can)g(b)q(e)g (dynamically)d(mo)q(di\014ed)-47 2588 y(during)13 b(the)i(lifetime)d (of)h(an)g(ob)r(ject.)-47 2673 y(The)19 b(public)g(kno)o(wledge)f(comp) q(onen)o(t)g(of)h(an)f(ob)r(ject)i Ff(O)-47 2723 y Fi(can)14 b(b)q(e)h(queried)g(from)e(an)o(y)g(other)i(ob)r(ject)g(with)f(a)g (query)-47 2773 y(the)i(form)e Ff(O?Q)p Fi(.)h(This)h(is)f(a)h(sync)o (hronous)h(remote)e(pro-)-47 2823 y(cedure)g(call.)918 18 y(Since)g(a)e(new)i(query)f(on)g(an)g(ob)r(ject's)g(public)g(kno)o (wledge)918 68 y(can)g(arriv)o(e)f(b)q(efore)h(it)f(has)g(answ)o(ered)h (the)g(last)f(query)m(,)g(an)918 118 y(ob)r(ject)k(will)e(accept)i(and) f(concurren)o(tly)h(execute)h(a)e(new)918 167 y(query)c(as)f(so)q(on)g (as)g(the)h(preceding)g(query)g(ev)n(aluation)d(has)918 217 y(commenced.)34 b(F)m(or)19 b(eac)o(h)h(ob)r(ject)g(there)h(is)f(a) f(queue)h(of)918 267 y(queries)13 b(to)e(its)g(public)g(kno)o(wledge,)g (as)g(w)o(ell)f(as)i(the)g(queue)918 317 y(of)i(messages)g(in)o(v)o (oking)e(its)i(pro)q(cedural)g(metho)q(ds.)918 402 y(The)e(caller)f (receiv)o(es)i(an)e(answ)o(er)h(as)g(so)q(on)f(as)h(the)f(\014rst)i (so-)918 452 y(lution)h(to)h(its)g(query)h(is)f(found.)21 b(If)14 b(the)i(query)f(w)o(as)g(from)918 502 y(in)d(a)g(pro)q(cedural) h(metho)q(d)e(of)h(the)h(caller,)f(this)g(is)g(the)h(end)918 552 y(of)e(the)g(query)g(computation.)k(Ho)o(w)o(ev)o(er,)d(if)e(it)g (w)o(as)h(from)e(a)918 602 y(kno)o(wledge)15 b(metho)q(d)f(of)g(the)i (call,)e(bac)o(ktrac)o(king)g(within)918 651 y(this)19 b(caller)f(kno)o(wledge)f(metho)q(d)h(ma)o(y)e(require)j(further)918 701 y(solutions)d(of)f(the)h(query)m(.)24 b(A)16 b(distributed)h(bac)o (ktrac)o(king)918 751 y(sc)o(heme)e(handles)h(the)f(request)i(and)d (deliv)o(ery)h(of)g(succes-)918 801 y(siv)o(e)f(solutions)g(b)q(et)o(w) o(een)h(caller)f(and)g(callee)g(ob)r(ject.)918 886 y(Finally)m(,)h(the) h(dynamic)f(kno)o(wledge)h(of)g(an)g(ob)r(ject)h(giv)o(es)918 936 y(us)c(an)f(alternativ)o(e)f(w)o(a)o(y)h(of)f(enco)q(ding)i(state)f (information)918 986 y(ab)q(out)17 b(the)g(ob)r(ject.)27 b(The)17 b(sp)q(ecial)f(kno)o(wledge)h(manipu-)918 1036 y(lation)f(primitiv)o(es,)f(whic)o(h)h(can)h(only)f(b)q(e)h(called)f (from)f(a)918 1086 y(pro)q(cedural)h(metho)q(d)e(of)g(an)h(ob)r(ject)h (or)f(its)g(class,)g(allo)o(ws)918 1136 y(the)21 b(run)o(time)e (manipulation)e(of)i(the)i(dynamic)e(kno)o(wl-)918 1185 y(edge)d(of)f(an)g(ob)r(ject.)23 b(A)15 b(kno)o(wledge)h(up)q(date)f (call)g(en)o(ters)918 1235 y(the)k(query)f(queue)h(for)f(an)g(ob)r (ject,)h(ho)o(w)o(ev)o(er,)g(to)f(main-)918 1285 y(tain)h(consistency)h (of)e(ev)n(aluation,)g(the)h(kno)o(wledge)g(up-)918 1335 y(date)f(will)e(b)q(e)i(only)e(b)q(e)i(executed)h(when)f(all)e (previously)918 1385 y(accepted)k(queries)f(ha)o(v)o(e)f(completely)f (terminated.)30 b(No)918 1434 y(new)21 b(query)f(will)f(b)q(e)h (accepted)i(un)o(til)d(the)i(up)q(date)f(has)918 1484 y(terminated.)e(Ev)n(aluation)12 b(of)h(the)h(kno)o(wledge)g(queries)h (is)918 1534 y(handled)10 b(b)o(y)g(IC-Prolog)f(I)q(I[CC93)o(],)h(a)g (m)o(ultiple-threaded)918 1584 y(Prolog)17 b(system[CC93)n(])g(whic)o (h)g(is)f(link)o(ed)h(with)f(the)i(un-)918 1634 y(derlying)g(P)o(arlog) e(system)i(of)f(DK)p 1476 1634 V 15 w(P)o(arlog)1607 1619 y Fh(++)1659 1634 y Fi(.)29 b(F)m(ull)16 b(de-)918 1683 y(tails)22 b(of)h(the)g(implemen)o(tatio)o(n)d(of)i(DK)p 1581 1683 V 15 w(P)o(arlog)1712 1668 y Fh(++)1787 1683 y Fi(are)918 1733 y(giv)o(en)14 b(in)f([W)m(an95)n(].)918 1912 y Fj(2)70 b(An)23 b(in)n(tro)r(ductory)g(example)918 2040 y Fi(Our)e(\014rst)f(example)e(comprises)i(the)g(t)o(w)o(o)f (class)i(de\014ni-)918 2090 y(tions)16 b(giv)o(en)g(in)g(Program)f (2.1.)24 b(In)16 b(this)g(example)f(there)918 2140 y(are)23 b(no)g(program)e(de\014ned)j(class)f(v)n(ariables)f(or)g(meth-)918 2189 y(o)q(ds)j(\(although)f(as)g(w)o(e)h(shall)e(see)j(there)g(are)f (system)918 2239 y(added)18 b(class)g(v)n(ariables)f(and)h(metho)q (ds\))f(and)g(there)i(are)918 2289 y(no)14 b(kno)o(wledge)g(metho)q (ds.)918 2438 y Ff(The)e(Sup)q(erclass)d(-)i(accoun)o(t)41 b Fi(The)10 b(\014rst)h(class,)g(called)918 2488 y Ff(accoun)o(t)p Fi(,)19 b(de\014nes)h(the)g(basic)f(information)d(and)i(some)918 2538 y(simple)13 b(op)q(erations)h(for)f(a)h(bank)g(accoun)o(t.)918 2624 y(The)e(instance)f(state)h(comp)q(onen)o(t)e(includes)i(v)n (ariables)e(for)918 2673 y(the)15 b(name)f(of)f(the)j(accoun)o(t)e (holder,)h(the)g(balance)f(of)g(the)918 2723 y(accoun)o(t)e(and)f(the)h (accum)o(ulated)e(in)o(terest)i(o)o(v)o(er)f(a)g(certain)918 2773 y(p)q(erio)q(d.)18 b(Tw)o(o)9 b(metho)q(ds)h(are)h(sho)o(wn)f(in)g (the)g(instance)h(def-)918 2823 y(inition.)17 b(The)e(\014rst)f(is)g(a) g(simple)e(inquiry)h(metho)q(d)h(whic)o(h)p eop %%Page: 3 3 3 2 bop -47 18 a Fi(returns)14 b(the)g(presen)o(t)g(balance)f(of)g(the) g(accoun)o(t,)g(and)g(the)-47 68 y(second)21 b(is)g(a)f(metho)q(d)g(to) g(calculate,)i(on)e(request,)j(the)-47 118 y(in)o(terest)f(earned)g(b)o (y)f(the)h(accoun)o(t.)40 b(Notice)21 b(that)g(the)-47 167 y(second)16 b(instance)h(metho)q(d)d Fd(c)n(alculate)p 562 167 13 2 v 15 w(inter)n(est/0)h Fi(uses)i(a)-47 217 y(state)22 b(comp)q(onen)o(t)f Fg(InterestRate)e Fi(whic)o(h)i(is)g (not)h(de-)-47 267 y(\014ned)i(y)o(et.)48 b(The)24 b(assumption)f(is)g (that)h(this)g(will)e(b)q(e)-47 317 y(an)d(instance)i(v)n(ariable)d(of) h(eac)o(h)h(sub)q(class)h(of)e Ff(accoun)o(t)-47 367 y Fi(and)24 b(that)g(only)f(instances)i(of)e(these)i(sub)q(classes)h (will)-47 416 y(b)q(e)21 b(created.)41 b(In)22 b(this)f(example,)g (there)h(is)f(no)g(partic-)-47 466 y(ular)j(adv)n(an)o(tage)h(to)g(not) g(ha)o(ving)f(the)h(state)h(comp)q(o-)-47 516 y(nen)o(t)15 b Fg(InterestRate)e Fi(in)i Ff(accoun)o(t)p Fi(.)20 b(It)15 b(is)g(done)h(just)f(to)-47 566 y(demonstrate)h(the)g(\015exibilit)o(y) e(of)h(using)h(inheritance)g(for)-47 616 y(organizing)h(classes.)33 b(Ho)o(w)o(ev)o(er,)20 b(using)e(the)h(same)f(idea)-47 666 y(for)f(metho)q(ds)g(is)h(quite)f(useful.)30 b(W)m(e)17 b(can)h(in)o(v)o(ok)o(e)e(an)i(as)-47 715 y(y)o(et)e(unde\014ned)i (metho)q(d)d(using)h(a)g Ff(self)e Fi(comm)o(unication)-47 765 y(and)f(di\013eren)o(t)h(sub)q(classes)h(can)e(implemen)o(t)d(the)k (metho)q(d)-47 815 y(in)f(di\013eren)o(t)i(w)o(a)o(ys.)-47 1040 y Fg(class)21 b(account)f(at)h(laotzu)g(with)-47 1072 y({)-25 1105 y(instance_defini)o(tion)40 1137 y(states)84 1166 y(Holder,Balance:)o(=0,Ac)o(cInte)o(rest:)o(=0.)40 1201 y(methods)84 1234 y(balance\(BAL\))e(->)i(BAL)g(=)h(Balance.)84 1285 y(calculate_inter)o(est)d(->)149 1318 y(AccInterest)g(:=)j (AccInterest)d(+)323 1348 y(InterestRate)h(*)h(Balance.)-47 1381 y(}.)-47 1431 y(class)g(current)f(isa)h(account)f(at)i(lipo)f (with)-47 1473 y({)-25 1506 y(instance_defini)o(tion)40 1537 y(states)84 1567 y(InterestRate,)e(CreditLimit.)40 1602 y(methods)84 1635 y(credit\(AMOUNT\))f(->)236 1668 y(Balance)i(:=)i(Balance)e(+)i(AMOUNT.)84 1722 y(debit\(AMOUNT,)d (ANSWER\):)171 1757 y(Balance)h(>=)h(AMOUNT)g(->)236 1786 y(ANSWER)g(=)g(AMOUNT,)236 1822 y(Balance)f(:=)i(Balance)e(-)i (AMOUNT.)84 1875 y(debit\(AMOUNT,)d(ANSWER\):)171 1911 y(VitualBalance)g(is)i(Balance)g(+)541 1940 y(CreditLimit)f(&)171 1970 y(VitualBalanc)f(>=)i(AMOUNT)43 b(->)280 1999 y(ANSWER)20 b(=)i(AMOUNT,)280 2035 y(Balance)e(:=)h(Balance-AMOUNT.)84 2088 y(debit\(AMOUNT,)e(ANSWER\))h(->)236 2124 y(ANSWER)h(is)g (Balance+CreditLim)o(it,)236 2159 y(Balance)f(:=)i(-)f(CreditLimit.)84 2209 y(collect_interes)o(t)e(->)214 2243 y(Balance)i(:=)g (Balance+AccIntere)o(st,)214 2278 y(AccInterest)f(:=)h(0.)-47 2311 y(}.)42 2439 y Ff(Program)14 b(2.1)21 b(Curren)o(t)14 b(Accoun)o(t)h(class)200 2489 y(through)e(inheritance)-47 2723 y(The)j(Sub)q(class)e(-)i(curren)o(t)40 b Fi(Next,)14 b(the)h(program)e(de-)-47 2773 y(\014nes)i(another)f(class)h Ff(curren)o(t)p Fi(,)c(whic)o(h)j(inherits)g(the)h Ff(ac-)-47 2823 y(coun)o(t)d Fi(class.)918 18 y(Ev)o(ery)h(class)g(do)q(es)g(ha)o (v)o(e)f(some)f(systen)i(added)g(class)g(v)n(ari-)918 68 y(ables)e(and)f(metho)q(ds.)17 b(F)m(or)10 b(example,)f(in)h(eac)o (h)h(class)g(there)918 118 y(is)16 b(a)f(class)h(v)n(ariable)e Fg(Members)g Fi(whic)o(h)i(holds)f(the)h(iden)o(ti-)918 167 y(ties)f(of)e(all)g(the)i(curren)o(t)g(instances)h(of)d(the)i (class.)k(It)14 b(also)918 217 y(has)h(a)e(visible)h(metho)q(d)f(for)h (accessing)h(the)g(v)n(alue)e(of)g(this)918 267 y(class)h(v)n(ariable)d (and)i(in)o(visible)e(metho)q(ds,)i(in)o(v)o(ok)o(ed)f(on)g(in-)918 317 y(stance)j(creation)g(and)e(termination,)f(for)i(up)q(dating)f(it.) 918 402 y(In)18 b Ff(curren)o(t)d Fi(class,)k(t)o(w)o(o)e(instance)i (state)f(v)n(ariables)f(are)918 452 y(de\014ned,)c(one)e(is)g(the)h (exp)q(ected)h Fg(InterestRate)p Fi(,)c(and)i(the)918 502 y(other)i(is)f(the)g Fg(CreditLimit)p Fi(,)e(whic)o(h)i(will)e (hold)i(the)g(max-)918 552 y(im)o(um)e(amoun)o(t)h(an)h(accoun)o(t)i (can)f(b)q(e)g(o)o(v)o(erdra)o(wn.)18 b(Th)o(us,)918 602 y(for)f(creating)g(an)g(instance)h(of)e(the)i Ff(curren)o(t)d Fi(class,)i(one)918 651 y(migh)o(t)12 b(use)j(a)e(create)j(message)d (as:)962 779 y Fg(create\(AccountID,)o(0.02,)o(400,)1093 828 y(`Debbie',2000,_\))18 b(=>)k(current)918 956 y Fi(Notice)14 b(that)g(initial)e(v)n(alues)h(for)g(the)h(b)q(ottom)f(ob)r(ject)h(are) 918 1005 y(giv)o(en)i(\014rst,)i(but)e(also)g(that)g(all)g(state)h (comp)q(onen)o(ts,)f(in-)918 1055 y(cluding)j(the)g(inherited)g(ones,)i (need)e(to)g(b)q(e)h(men)o(tioned)918 1105 y(in)c(the)g(create.)25 b(The)16 b(v)n(alue)f(of)h(the)g(last)f(state)i(v)n(ariable,)918 1155 y Fg(AccInterest)p Fi(,)h(is)g(giv)o(en)h(as)g(`)p 1420 1155 V 14 w('.)33 b(This)18 b(indicates)h(that)918 1205 y(the)12 b(default)f(v)n(alue)f(giv)o(en)h(in)g(the)g(class)h (de\014nition)f(should)918 1254 y(b)q(e)21 b(used.)38 b(The)21 b(2000)e(giv)o(en)h(for)g(the)h(initial)d(v)n(alue)i(of)918 1304 y Fg(Balance)13 b Fi(o)o(v)o(errides)h(its)g(default)g(v)n(alue.) 918 1390 y(In)j(addition)f(to)g(the)i(t)o(w)o(o)e(metho)q(ds)g (inherited)h(from)e(its)918 1440 y(sup)q(erclass,)g(instances)g(of)e (the)h Ff(curren)o(t)e Fi(class)i(ha)o(v)o(e)f(\014v)o(e)918 1489 y(more)h(metho)q(ds.)k(The)d Fg(credit/1)d Fi(metho)q(d)i(is)g(v)o (ery)g(sim-)918 1539 y(ple,)k(and)f(just)g(adds)h(the)g Fg(AMOUNT)e Fi(in)o(to)g(the)i(balance)f(of)918 1589 y(the)j(accoun)o(t.)35 b(The)20 b(next)g(three)h(are)f(all)e(meh)o(to)q (ds)h(for)918 1639 y(handling)g(a)g Fg(debit/2)f Fi(message)h(but)g (eac)o(h)h(deals)g(with)918 1689 y(it)d(di\013eren)o(tly)h(dep)q (ending)g(up)q(on)g(the)g(curren)o(t)g(v)n(alue)f(of)918 1738 y(the)f(state)g(v)n(ariable)d Fg(Balance)p Fi(.)20 b(The)15 b(\014rst)h(t)o(w)o(o)e(ha)o(v)o(e)h(the)918 1788 y(structure)984 1907 y Fg(message_pattern)j(:)k(test)f(->)g (actions)918 2026 y Fi(with)12 b(the)g Fg(:)17 b Fi(in)o(tro)q(ducing) 11 b(the)h(test)h(to)e(b)q(e)i(applied)e(b)q(efore)918 2076 y(that)17 b(metho)q(d)e(is)h(used.)26 b(Notice)16 b(that)h(the)f(last)g(metho)q(d)918 2125 y(for)21 b Fg(debit/2)f Fi(do)q(es)h(not)g(ha)o(v)o(e)g(a)g(test.)41 b(It)21 b(is)g(the)g(de-)918 2175 y(fault)13 b(rule)g(that)g(will)f(b)q(e)i (used)g(only)e(if)h(the)g(previous)h(t)o(w)o(o)918 2225 y(rules)20 b(are)f(not)f(applicable.)32 b(The)19 b(\014rst)h(metho)q(d) d(treats)918 2275 y(the)h(case)g(that)g(the)g(curren)o(t)g Fg(Balance)e Fi(is)h(su\016cien)o(t)h(for)918 2325 y(the)f(withdra)o(w) o(al.)24 b(The)16 b(withdra)o(w)o(al)f(is)h(gran)o(ted)h(b)o(y)f(as-) 918 2375 y(signing)e(the)h(v)n(alue)e(of)h Fg(AMOUNT)f Fi(to)i(the)f Fg(ANSWER)g Fi(v)n(ariable)918 2424 y(and)h(the)h (balance)f(is)f(reduced)j(accordingly)m(.)j(If)15 b(the)g(bal-)918 2474 y(ance)e(is)f(insu\016cien)o(t,)g(but)g(the)h(shortage)g(can)f(b)q (e)g(co)o(v)o(ered)918 2524 y(b)o(y)k(the)h(credit)g(limit,)c(the)k (withdra)o(w)o(al)e(is)h(also)f(gran)o(ted)918 2574 y(with)d(the)h (balance)f(going)f(in)o(to)h(a)g(debt)h(status.)18 b(The)12 b(sum)918 2624 y(of)i(the)h(balance)g(and)f(the)h(credit)g(limit)d(is,) h(ho)o(w)o(ev)o(er,)i(the)918 2673 y(maxim)o(um)e(amoun)o(t)j(for)h(a)g (withdra)o(w)o(al.)28 b(If)17 b(the)i(credit)918 2723 y(limit)f(cannot)i(co)o(v)o(er)h(the)g(shortfall)e(then)i(the)f(amoun)o (t)918 2773 y(withdra)o(wn)d(is)g(reduced)i(to)e Fg(Balance)j(+)i (CreditLimit)918 2823 y Fi(\(the)e(default)e(metho)q(d\).)32 b(Finally)m(,)17 b(there)j(is)f(a)f(metho)q(d)p eop %%Page: 4 4 4 3 bop -47 18 a Fg(collect)p 110 18 14 2 v 14 w(interest/0)15 b Fi(for)i(transferring)g(the)h(accum)o(u-)-47 68 y(lated)9 b(in)o(terest)i(in)o(to)d(the)i(balance)g(and)f(clearing)g(the)h(accu-) -47 118 y(m)o(ulated)h(in)o(terest.)19 b(As)14 b(can)f(b)q(e)h(seen)g (in)f(these)i(metho)q(ds,)-47 167 y(instance)j(state)h(v)n(ariables)e (declared)h(in)g(the)g(sup)q(erclass)-47 217 y(can)13 b(b)q(e)h(accessed)h(directly)f(in)e(the)i(instance)g(metho)q(ds)e(of) -47 267 y(the)i(sub)q(class.)-47 353 y(Finally)m(,)e(note)i(that)h(the) g Ff(accoun)o(t)e Fi(class)i(is)f(sp)q(eci\014ed)i(as)-47 402 y(residing)f(on)g(the)g(mac)o(hine)f(laotzu,)h(while)f(the)i Ff(curren)o(t)-47 452 y Fi(class)e(is)g(on)f(the)i(mac)o(hine)e(lip)q (o.)-47 635 y Fj(3)69 b(Kno)n(wledge)36 b(Represen)n(tation)56 710 y(in)22 b(Ob)t(jects)-47 838 y Fi(Static)17 b(Kno)o(wledge)g(is)g (giv)o(en)g(as)g Ff(Kno)o(wledge)h(Meth-)-47 888 y(o)q(ds)g Fi(alongside)h(the)g(pro)q(cedural)h(metho)q(ds.)33 b(Dynamic)-47 938 y(kno)o(wledge)15 b(is)h(asserted)h(in)o(to)e(ob)r(jects)i(either)f (when)g(the)-47 988 y(ob)r(ject)e(is)g(created)i(or)d(after)i(it)e(has) h(b)q(een)h(created.)-47 1073 y(Kno)o(wledge)j(declared)g(in)f(the)i (class)f(de\014nition)f(section)-47 1123 y(of)c(a)h(class)g(is)g(lo)q (cal)f(to)h(the)h(class)f(pro)q(cess,)h(while)f(kno)o(wl-)-47 1173 y(edge)k(declared)h(in)e(the)i(instance)f(de\014nition)g(section)g (of)-47 1223 y(a)c(class)h(is)g(global)e(to)h(all)g(instances,)h(i.e.) 20 b(it)14 b(is)h(automat-)-47 1272 y(ically)j(p)q(ossessed)j(b)o(y)e (an)o(y)g(instance)h(when)g(it)f(is)g(b)q(eing)-47 1322 y(created.)g(Kno)o(wledge)14 b(asserted)h(in)o(to)e(an)h(ob)r(ject)g (is)g(lo)q(cal)-47 1372 y(to)19 b(the)h(ob)r(ject)g(itself.)34 b(All)18 b(instance)i(lev)o(el)f(kno)o(wledge)-47 1422 y(metho)q(ds)f(declared)i(in)f(the)h(class)f(are)h(inherited)f(when)-47 1472 y(an)11 b(inheritance)h(link)f(is)g(declared.)19 b(As)12 b(in)f(L&O[McC92],)-47 1521 y(kno)o(wledge)16 b(inheritance)i(can)f(b)q(e)g(inclusiv)o(e)f(or)h(o)o(v)o(errid-)-47 1571 y(ing.)-47 1733 y Fc(3.1)55 b(Static)19 b(Kno)n(wledge)f (Declaration)-47 1847 y Fi(A)f(kno)o(wledge)g(metho)q(d)f(is)i(just)f (a)g(Prolog)f(clause)i(for)f(a)-47 1897 y(predicate)e Ff(p/k)e Fi(of)g(the)i(form:)57 1983 y Fd(Cal)r(lPattern)e Ff([)j(:-)e Fd(A)n(ctions)f Ff(])p Fi(.)-47 2068 y(The)h Fd(Cal)r(lPattern)f Fi(is)h(an)f(atomic)g(form)o(ula)e(of)i(the)i (form:)57 2154 y Ff(p\()p Fd(t)117 2160 y Fh(1)134 2154 y Ff(,....,)p Fd(t)226 2160 y Fb(k)248 2154 y Ff(\))-47 2239 y Fi(Kno)o(wledge)i(metho)q(ds)f(are)h(distinguished)g(from)e(pro) q(ce-)-47 2289 y(dural)e(metho)q(ds)g(b)o(y)g(use)i(of)d(the)i(Prolog)f Fd(if)g Fi(connectiv)o(e)i Ff(:-)-47 2339 y Fi(instead)f(of)g(the)g (connectiv)o(e)h Ff(-)p Fe(>)p Fi(.)k Fd(A)n(ctions)14 b Fi(is)g(a)g(conjunc-)-47 2389 y(tion)e(of)h(Prolog)g(conditions,)f (and)h(constitutes)i(the)f(b)q(o)q(dy)-47 2438 y(of)f(the)i(clause.)-47 2524 y(T)m(o)c(query)h(the)g(kno)o(wledge)g(in)f(another)h(ob)r(ject)h Ff(O)e Fi(w)o(e)h(use)-47 2574 y(the)i(call)f Ff(O)j(?)g(Q)p Fi(.)d(A)h(simple)e(example)h(is:)-47 2673 y(customer?the)p 196 2673 13 2 v 15 w(b)q(est\(Banks,Prof,T)o(yp)q(e,BestBank,)57 2723 y(BestRate,InitCredit\).)-47 2823 y(It)18 b(is)g(executed)i(as)e (a)g(remote)g(pro)q(cedure)i(call.)30 b(In)o(v)o(ok-)918 18 y(ing)18 b(a)g(kno)o(wledge)g(metho)q(d)f(not)h(de\014ned)h(in)f(an) g(ob)r(ject)918 68 y(simply)12 b(fails)h(the)h(in)o(v)o(o)q(cation.)918 153 y(As)23 b(with)f(pro)q(cedural)h(metho)q(ds,)h(the)f(next)g(call)f (to)g(a)918 203 y(kno)o(wledge)d(metho)q(d)f(can)h(b)q(e)h(accepted)h (and)e(executed)918 253 y(b)o(y)e(an)g(ob)r(ject)g(whilst)g(the)g (previous)h(call)e(is)h(still)f(b)q(eing)918 303 y(pro)q(cessed.)40 b(There)21 b(are)g(exceptions)g(to)g(this)f(immedi-)918 353 y(ate)15 b(acceptance)h(of)e(the)h(next)g(call.)j(Kno)o(wledge)d (up)q(date)918 402 y(calls)k(will)f(b)q(e)j(dela)o(y)o(ed)e(un)o(til)f (all)h(existing)g(query)h(calls)918 452 y(ha)o(v)o(e)15 b(terminated.)k(This)14 b(will)f(b)q(e)i(discussed)h(more)e(fully)918 502 y(later.)918 588 y(Priv)n(ate)k(kno)o(wledge)g(can)h(b)q(e)f(giv)o (en)g(as)g(Prolog)g(clauses)918 637 y(in)13 b(a)f(sp)q(ecial)i(co)q(de) f(section)h(of)e(the)i(ob)r(ject.)k(This)13 b(section)918 687 y(can)20 b(also)f(include)h(P)o(arlog)e(de\014nitions,)j(whic)o(h)e (can)h(b)q(e)918 737 y(used)15 b(as)f(priv)n(ate)g(pro)q(cedural)g (metho)q(ds.)918 932 y Fg(class)21 b(customer)f(with)918 965 y({)940 998 y(class_definition)962 1032 y(methods)984 1065 y(.....)h(\045Other)f(methods)g(................)984 1119 y(the_best\(Banks,P)o(rof,T)o(ype,B)o(estBa)o(nk,)1332 1161 y(BestRate,InitCredit\))o(:-)1049 1200 y(findall\()1136 1236 y(\(Bank,Rate,Init\),)1136 1275 y(\(on\(Bank,Banks\),)1158 1313 y(Bank?rate\(Type,Pro)o(f,Rat)o(e,Ini)o(t\)\),)1136 1356 y(ANS\),)1071 1394 y(find_the_best\(ANS)o(,)f(BestBank,)1354 1433 y(BestRate,)h(InitCredit\).)940 1483 y(instance_definitio)o(n)962 1517 y(states)42 b(Name.)962 1567 y(methods)984 1600 y(which_bank\(Prof,)o(Type,)o(Bank,)o(Rate,)1507 1642 y(InitCredit\))19 b(:-)1027 1679 y(members\(Banks\))g(=>)j(banks,)1027 1718 y(class?the_best\(Bank)o(s,Pro)o(f,)1071 1756 y(Type,BestBank,Bes) o(tRate)o(,Init)o(Credi)o(t\).)1027 1798 y(:)1027 1831 y(:)44 b(\045Other)20 b(methods)940 1881 y(code_definition)984 1918 y(find_the_best\(Tu)o(ples,)o(BestB)o(ank,)1376 1960 y(BestRate,InitCredi)o(t\):-)984 1999 y(..\045definitions)f (omitted)h(for)h(simplicity...)918 2041 y(}.)982 2159 y Ff(Program)15 b(3.1)20 b(Kno)o(wledge)15 b(metho)q(ds)f(in)h(a)1230 2209 y(customer)f(class)918 2375 y Fi(A)k(simpli\014ed)d(class)i (structure)j(whic)o(h)d(declares)h(a)f(class)918 2424 y Ff(customer)d Fi(for)g(a)h(\014nancial)f(advice)h(program)f(is)g(sho) o(wn)918 2474 y(in)c(Program)f(3.1)g(to)i(demonstrate)f(the)h(use)g(of) f(kno)o(wledge)918 2524 y(metho)q(ds.)28 b(The)18 b Fd(which)p 1306 2524 V 15 w(highest/6)f Fi(kno)o(wledge)g(metho)q(d)918 2574 y(in)i(the)g(class)g(de\014nition)f(is)g(mean)o(t)g(to)g(\014nd)h (out)g(whic)o(h)918 2624 y(bank)c(o\013ers)g(the)g(b)q(est)h(in)o (terest)g(rate)f(on)f(a)h(certain)g(t)o(yp)q(e)918 2673 y(of)10 b(accoun)o(t)g(for)g(a)g(certain)h(t)o(yp)q(e)f(of)g(customer.) 17 b(It)10 b(receiv)o(es)918 2723 y(from)i(its)h(\014rst)i(three)f (argumen)o(ts)f(a)g(list)g(of)g(bank)g(names,)918 2773 y(the)g(profession)f(of)g(a)g(customer)g(and)g(the)h(t)o(yp)q(e)f(of)g (the)g(ac-)918 2823 y(coun)o(t)k(the)g(customer)g(in)o(tends)g(to)f(op) q(en,)h(then)g(uses)h(the)p eop %%Page: 5 5 5 4 bop -47 18 a Fi(Prolog)17 b(st)o(yle)i Fd(\014ndal)r(l/3)g Fi(predicate)g(to)f(\014nd)h(out,)f(of)g(all)-47 68 y(the)e(banks,)h (the)f(in)o(terest)h(rate)g(for)f(the)g(sp)q(eci\014ed)i(t)o(yp)q(es) -47 118 y(of)c(accoun)o(t)i(and)f(profession)h(and)f(the)h(initial)d (credit)j(re-)-47 167 y(quired)i(for)h(the)g(t)o(yp)q(e)g(of)e(accoun)o (t,)j(and)e(\014nally)f(passes)-47 217 y(the)12 b(information)d(to)j(a) f(priv)n(ate)h(pro)q(cedure)i(to)e(\014gure)g(out)-47 267 y(whic)o(h)19 b(bank)f(should)h(b)q(e)g(recommended.)32 b(The)20 b(use)f(of)-47 317 y Fd(\014ndal)r(l/3)i Fi(predicate)g(fully) f(re\015ects)i(the)f(desire)g(of)f(the)-47 367 y(searc)o(hing)15 b(capabilit)o(y)e(in)h(an)g(ob)r(ject.)20 b(A)15 b(kno)o(wledge)f(ac-) -47 416 y(cess)j(comm)o(unication)12 b(is)k(used)h(in)e(the)i(call)e (of)g(the)h Fd(\014nd-)-47 466 y(al)r(l/3)h Fi(predicate)h(to)f(access) i(the)e(in)o(terest)i(rate)e(and)g(the)-47 516 y(required)h(initial)e (credit)i(of)f(an)g(accoun)o(t)h(t)o(yp)q(e)g(for)f(eac)o(h)-47 566 y(kind)12 b(of)g(profession,)g(the)i(seman)o(tics)e(of)g(suc)o(h)h (kno)o(wledge)-47 616 y(access)i(op)q(eration)f(will)f(b)q(ecome)g (clearer)i(later.)-47 701 y(The)41 b(other)h(instance)g(lev)o(el)f(kno) o(wledge)g(metho)q(d)-47 751 y Fd(which)p 58 751 13 2 v 15 w(b)n(ank/5)16 b Fi(uses)h(a)e(m)o(utual)f(comm)o(unication)e(to)k (get)-47 801 y(the)11 b(list)g(of)f(banks)i(from)d(the)j Ff(banks)e Fi(class.\()p Fd(memb)n(er/1)h Fi(is)-47 851 y(a)k(system)g(added)h(class)g(metho)q(d)f(for)g(accessing)h(the)g (list)-47 901 y(of)e(curren)o(t)j(mem)o(b)q(er)c(of)i(a)g(class.\))22 b(It)15 b(then)h(uses)g(a)f Fd(class)-47 950 y Fi(comm)o(unicatio)o(n) 10 b(to)k(access)h(the)e(kno)o(wledge)g(of)g(the)h(b)q(est)-47 1000 y(bank)20 b(c)o(hoice.)39 b(Class)20 b(comm)o(unications)e(can)j (b)q(e)g(used)-47 1050 y(delib)q(erately)d(to)g(access)h(kno)o(wledge)f (k)o(ept)g(in)g(the)g(class)-47 1100 y(lev)o(el.)-47 1185 y(The)c(purp)q(ose)g(of)f(Program)f(3.1)g(is)h(to)h(sho)o(w)f(ho)o (w)g(kno)o(wl-)-47 1235 y(edge)21 b(metho)q(ds)f(can)h(b)q(e)h (declared)g(in)e(b)q(oth)h(class)g(and)-47 1285 y(instance)14 b(de\014nition)e(sections.)19 b(Here,)14 b(the)f(functionalit)o(y)-47 1335 y(of)d(the)h(only)e Fd(the)p 209 1335 V 16 w(b)n(est/6)h Fi(class)h(kno)o(wledge)f(metho)q(d)g(could)-47 1385 y(ha)o(v)o(e)22 b(b)q(een)h(implem)o(en)o(ted)d(b)o(y)i(a)g(pro)q (cedural)h(metho)q(d)-47 1434 y(whic)o(h)11 b(in)o(v)o(ok)o(ed)g(a)g (priv)n(ate)g(P)o(arlog)f(recursiv)o(e)j(pro)q(cedure.)-47 1484 y(Ho)o(w)o(ev)o(er,)21 b(morte)d(generally)m(,)i(there)h(migh)o(t) c(b)q(e)j(sev)o(eral)-47 1534 y(di\013eren)o(t)f(w)o(a)o(ys)f(of)g (`rules)g(of)g(th)o(um)o(b')e(for)i(determining)-47 1584 y(the)h(b)q(est)h(bank)e(for)g(for)g(a)h(t)o(yp)q(e)g(of)f(customer)g (and)h(ac-)-47 1634 y(coun)o(t)c(in)f(whic)o(h)h(case)h(it)f(is)f(b)q (etter)j(to)e(use)g(Prolog)g(st)o(yle)-47 1683 y(rules)f(for)g(enco)q (ding)g(suc)o(h)h(advisory)e(rules.)-47 1871 y Fc(3.2)55 b(Dynamic)17 b(Kno)n(wledge)i(Assertion)-47 1990 y Fi(While)14 b(static)h(kno)o(wledge)g(represen)o(ts)i(long)d(term)h(infor-)-47 2040 y(mation)d(pro)o(vided)j(b)o(y)g(an)f(ob)r(ject,)i(dynamic)d(kno)o (wledge)-47 2090 y(is)j(ob)r(ject)h(sp)q(eci\014c)h(or)e(up)q(datable)g (information.)23 b(There)-47 2140 y(are)14 b(t)o(w)o(o)e(w)o(a)o(ys)h (for)g(asso)q(ciating)g(dynamic)f(kno)o(wledge)h(to)-47 2189 y(an)h(instance.)21 b(One)15 b(is)f(to)h(attac)o(h)f(a)g(sequence) j(of)d(kno)o(wl-)-47 2239 y(edge)f(metho)q(ds)g(to)f(the)i(create)g (message)f(sen)o(t)h(to)e(a)h(class.)-47 2289 y(When)e(the)g(instance)g (is)g(created,)h(the)f(sequence)i(of)d(meth-)-47 2339 y(o)q(ds)g(will)e(b)q(ecome)i(the)h(initial)d(dynamic)g(kno)o(wledge.) 16 b(The)-47 2389 y(other)c(is)f(to)g(use)h(a)f(sp)q(ecial)h(system)f (predicate)h(to)g(assert)g(a)-47 2438 y(single)i(kno)o(wledge)g(metho)q (d)f(in)o(to)h(an)g(existing)g(instance.)-47 2488 y(T)m(o)d(add)h (dynamic)e(kno)o(wledge)i(to)g(a)g(class)g(pro)q(cess,)i(ob)o(vi-)-47 2538 y(ously)g(only)g(the)h(second)h(w)o(a)o(y)e(can)h(b)q(e)g(use.)22 b(There)16 b(is)e(no)-47 2588 y(di\013erence)i(in)d(accessing)i(the)f (t)o(w)o(o)g(kinds)g(of)f(kno)o(wledge.)-47 2673 y(T)m(o)26 b(signal)h(what)g(an)g(ob)r(ject)h(can)g(ha)o(v)o(e)f(in)g(its)g(dy-) -47 2723 y(namic)17 b(kno)o(wledge,)j(a)g Ff(dynamic)g(declaration)d Fi(m)o(ust)-47 2773 y(b)q(e)f(included)f(in)g(either)h(the)f(class)p 504 2773 V 16 w(de\014nition)g(or)g(the)g(in-)-47 2823 y(stance)p 67 2823 V 16 w(de\014nition)i(section)h(of)f(a)g(class)h (structure.)30 b(The)918 18 y(declaration)24 b(is)h(a)f(list)g(of)f Fd(name/arity)i Fi(terms)f(giving)918 68 y(the)j(dynamic)c(predicates.) 55 b(As)26 b(an)f(example,)i(class)918 118 y Ff(banks)c Fi(declared)h(in)f(Program)f(3.2)h(is)g(for)g(spa)o(wning)918 167 y(bank)c(instances)g(for)f(the)h(\014nancial)f(advising)f(program) 918 217 y(in)f(the)h(previous)f(section.)25 b(It)16 b(is)g (simpli\014ed)e(and)i(its)g(in-)918 267 y(stance)p 1032 267 V 17 w(de\014nition)9 b(section)i(con)o(tains)e(a)h Ff(dynamic)e Fi(decla-)918 317 y(ration)17 b(whic)o(h)f(sp)q(eci\014es) j(that)d Fd(pr)n(o\014t)p 1519 317 V 16 w(mar)n(gin/2,)i(r)n(ate/4)918 367 y Fi(are)h(dynamic.)28 b(There)19 b(is)f(no)f(dynamic)f (declaration)i(in)918 416 y(the)24 b(class)p 1084 416 V 15 w(de\014nition)f(section,)j(whic)o(h)d(means)f(no)h(dy-)918 466 y(namic)15 b(kno)o(wledge)i(metho)q(ds)f(can)g(b)q(e)i(acquired)f (b)o(y)f(the)918 516 y(class)h(pro)q(cess.)26 b(F)m(ollo)o(wing)14 b(the)j(class)f(de\014nition)g(comes)918 566 y(a)g(statemen)o(t)g(for)f (creating)h(an)g(instance)h(of)e(the)h Ff(banks)918 616 y Fi(class.)j(The)14 b(general)g(format)e(is:)918 716 y Ff(create\()p Fd(obje)n(ct)p 1170 716 V 15 w(id)h Fi([)h(,)f Fd(arugments)h Fi(])g Ff(\))918 766 y(with)f Fi([)g Fa(f)h Fd(Know)r(le)n(dge)h(Metho)n(ds)f Fa(g)g Fi(])918 816 y(=)p Fe(>)h Fd(class)p 1085 816 V 15 w(identity)f Fi([)f Ff(at)h Fd(machine)p 1482 816 V 16 w(identi\014er)f Fi(])918 916 y(The)h(optional)d Ff(with)h Fi(giv)o(es)g(extra)i(Kno)o(wledge)e (Metho)q(ds)918 966 y(whic)o(h)h(are)h(the)g(dynamic)d(kno)o(wledge)i (metho)q(ds)f(lo)q(cal)h(to)918 1016 y(the)i(new)f(ob)r(ject.)918 1102 y(What)h(is)g(lo)q(cal)f(to)h(this)g(created)i(bank)e(instance,)h (whic)o(h)918 1151 y(has)26 b(the)g(public)f(name)f Fg(barclays)p Fi(,)j(are)e(three)i(facts)918 1201 y(ab)q(out)19 b(the)h(pro\014t)g (margins,)e(set)i(for)f(di\013eren)o(t)h(profes-)918 1251 y(sions,)k(ab)q(o)o(v)o(e)f(the)g(base)g(in)o(terest)g(rate,)i (and)d(another)918 1301 y(three)c(rules)f(for)f(pro)o(viding)g(the)h (information)c(on)j(in)o(ter-)918 1351 y(est)e(rates)g(and)f(minim)n (um)c(credits)14 b(on)e(di\013eren)o(t)i(t)o(yp)q(es)g(of)918 1401 y(accoun)o(ts.)29 b(This)17 b(information)d(is)j(giv)o(en)g(as)g (clauses)h(for)918 1450 y(the)h(dynamic)d(predicates)j Fg(profit)p 1500 1450 14 2 v 14 w(margin)d Fi(and)i Fg(rate)p Fi(.)918 1500 y(The)h(instance)h(with)e(the)h(name)e Fg(midland)p Fi(,)h(created)i(b)o(y)918 1550 y(the)13 b(message)e(send)i(of)e(3.3,)g(has)h(di\013eren)o(t)h(de\014nitions)f (for)918 1600 y(these)19 b(dynamic)c(predicates.)29 b(Eac)o(h)17 b(bank)g(has)g(its)g(o)o(wn)918 1650 y(data)d(and)g(rules,)g(its)g(o)o (wn)f Fd(enterprise)h(rules)p Fi(.)918 1735 y(A)g(message)g(send)h(op)q (eration:)1022 1836 y(create\(k)n(ate,`k)n(ate)g(smith'\))d(=)p Fe(>)i Fi(customer)918 1936 y(will)h(create)j(an)f(publically)e(named)g (customer)i(instance)918 1986 y(from)d(the)i Ff(customer)e Fi(class.)23 b(Notice)16 b(that)g Fg(kate)f Fi(is)g(the)918 2036 y(public)h(name)f(of)h(the)g(ob)r(ject,)i(whereas)f Fg(`Kate)k(Smith')918 2086 y Fi(is)d(the)g(string)f(v)n(alue)g(of)g (the)h Fg(Name)f Fi(state)h(v)n(ariable)e(held)918 2136 y(inside)e(the)h(ob)r(ject.)k(A)14 b(metho)q(d)f(in)o(v)o(o)q(cation)f (suc)o(h)j(as:)918 2236 y(whic)o(h)p 1025 2236 13 2 v 15 w(bank\(studen)o(t,)33 b(curren)o(t,)f(Bank,)g(Rate,)f(Init-)918 2286 y(Credit\))1022 2336 y(=)p Fe(>)15 b Fi(k)n(ate)918 2436 y(will)e(result)h(in)g(the)g(follo)o(wing)e(answ)o(er)i(bindings:) 1022 2537 y(Bank)g(=)g(midland)1022 2587 y(Rate)g(=)g(3.1)1022 2636 y(InitCredit)g(=)g(100)p eop %%Page: 6 6 6 5 bop -47 2 a Fg(class)21 b(banks)f(with.)-47 35 y({)-25 68 y(class_definitio)o(n)18 101 y(states)42 b(BaseRate.)18 131 y(methods)62 164 y(new_base_rate\(NB)o(R\))19 b(->)i(BaseRate)f(:=) i(NBR.)62 205 y(base_rate\(BR\))d(->)i(BR)h(=)f(BaseRate.)62 231 y(:)62 264 y(:)43 b(\045Other)21 b(methods)-25 301 y(instance_defini)o(tion)18 338 y(dynamic)42 b(profit_margin/2,)19 b(rate/4.)40 381 y(states)64 b(BankName,)20 b(Manager.)40 424 y(methods)105 446 y(:)105 479 y(:)44 b(\045Other)20 b(methods)-47 515 y(}.)-47 556 y(create\(barclays,)e(`Barclays)i(Bank)h (Plc',jane\))-47 594 y(with)-47 627 y({)-4 664 y(profit_margin\(stude)o (nt,)e(0.4\).)-4 706 y(profit_margin\(gener)o(al,)g(0.5\).)-4 748 y(profit_margin\(busin)o(ess,0)o(.6\).)-4 790 y(rate\(current,)g (Profession,Rate,Init)o(Cred)o(it\))18 829 y(:-base_rate\(BR\))g(=>)i (class,)62 868 y(profit_margin\(Pr)o(ofess)o(ion,)d(PM\),)62 907 y(Rate)j(is)g(BR)g(-)h(PM,)62 942 y(InitCredit)d(=)j(100.)-4 975 y(rate\(select,)e(Profession,Rate,)o(InitC)o(redi)o(t\))18 1014 y(:-base_rate\(BR\))f(=>)i(class,)62 1052 y(profit_margin\(Pr)o (ofess)o(ion,)d(PM\),)62 1091 y(Rate)j(is)g(BR)g(-)h(PM)f(+)h(2.0,)62 1126 y(InitCredit)d(=)j(1000.)-4 1159 y(rate\(tessa,Professi)o(on,Ra)o (te,In)o(itCre)o(dit\))18 1198 y(:-base_rate\(BR\))d(=>)i(class,)62 1237 y(profit_margin\(Pr)o(ofess)o(ion,)d(PM\),)62 1276 y(Rate)j(is)g(BR)g(-)h(PM)f(+)h(1.5,)62 1311 y(InitCredit)d(=)j(20.)-47 1344 y(})f(=>)h(banks.)-20 1535 y Ff(Program)15 b(3.2)21 b(A)16 b(banks)f(class)g(de\014nition)d(and)246 1585 y(an)k(instance)d(of)j(it)-47 1895 y Fi(One)e(v)o(ery)f(imp)q(ortan)o (t)f(common)e(c)o(haracteristic)15 b(of)e(b)q(oth)-47 1945 y(kinds)20 b(of)f(kno)o(wledge)h(is)f(that)h(state)h(comp)q(onen)o (ts)f(can)-47 1995 y(not)e(b)q(e)h(accessed)h(directly)e(from)f(within) g(a)h(kno)o(wledge)-47 2045 y(metho)q(d.)33 b(This)19 b(ma)o(y)e(sounds)j(lik)o(e)e(an)h(incon)o(v)o(enience,)-47 2095 y(ho)o(w)o(ev)o(er,)13 b(can)g(b)q(e)g(comp)q(ensated)g(b)o(y)g(t) o(w)o(o)g(programmi)o(ng)-47 2144 y(tec)o(hniques.)37 b(The)21 b(\014rst)g(tec)o(hnique)g(is)f(to)f(issue)i(a)f(self)-47 2194 y(comm)o(unicatio)o(n)7 b(in)i(a)g(kno)o(wledge)g(metho)q(d)g(to)g (access)i(the)-47 2244 y(desired)k(state)g(comp)q(onen)o(ts.)i(Of)d (course,)h(an)f(extra)g(pro-)-47 2294 y(cedural)h(metho)q(d)e(is)h (needed)i(for)e(pro)o(viding)f(those)i(state)-47 2344 y(comp)q(onen)o(ts.)25 b(The)16 b(second)i(tec)o(hnique)f(is)f(to)g (store)h(the)-47 2393 y(in)o(v)o(olv)o(ed)h(state)j(information)c(as)j (dynamic)e(kno)o(wledge)-47 2443 y(rather)f(than)f(as)h(the)g(v)n(alue) e(of)h(state)h(v)n(ariables,)f(and)g(to)-47 2493 y(access)f(them)e (directly)h(in)f(the)h(kno)o(wledge)f(metho)q(ds,)g(w)o(e)-47 2543 y(will)f(discuss)j(this)f(concept)h(more)e(completely)g(later.)918 5 y Fg(create\(midland,)19 b(`Midland)h(Bank)h(Plc',peter\))918 44 y(with)918 77 y({)940 113 y(profit_margin\(stud)o(ent,)d(0.3\).)940 156 y(profit_margin\(gene)o(ral,)g(0.4\).)940 198 y (profit_margin\(busi)o(ness,)o(0.6\).)940 240 y(rate\(current,Profe)o (ssion)o(,Rate)o(,Init)o(Credi)o(t\):-)1027 279 y(base_rate\(BR\))h(=>) j(class,)1027 318 y(profit_margin\(Profe)o(ssion)o(,)d(PM\),)1027 356 y(Rate)i(is)h(BR)f(-)h(PM,)1027 392 y(InitCredit)e(=)i(100.)940 425 y(rate\(tessa,Profess)o(ion,R)o(ate,I)o(nitCr)o(edit\))o(:-)1027 463 y(base_rate\(BR\))d(=>)j(class,)1027 502 y(profit_margin\(Profe)o (ssion)o(,)d(PM\),)1027 541 y(Rate)i(is)h(BR)f(-)h(PM)f(+)h(1.7)f(,) 1027 576 y(InitCredit)f(=)i(25.)918 609 y(})g(=>)f(banks.)924 737 y Ff(Program)15 b(3.3)20 b(Another)14 b(instance)g(of)i(the)f (banks)1333 786 y(class)918 1112 y Fj(4)70 b(Kno)n(wledge)21 b(Inheritance)918 1248 y Fi(The)11 b(inheritance)f(p)q(olicy)f(for)g (the)i(kno)o(wledge)e(metho)q(ds)h(is)918 1298 y(sligh)o(tly)h (di\013eren)o(t)j(from)d(that)h(for)g(pro)q(cedural)h(metho)q(ds.)918 1347 y(In)18 b(addition)e(to)h(the)h(inclusiv)o(e)f(and)g(o)o(v)o (erriding)g(inheri-)918 1397 y(tance,)e(there)g(is)f(also)f(a)g (di\013eren)o(tial)h(inheritance.)918 1597 y Fc(4.1)56 b(Ordinary)24 b(Inheritance)g(of)h(Kno)n(wl-)1046 1655 y(edge)18 b(-)g(Inclusiv)n(e)918 1777 y Fi(In)d(general,)g(if)f(not)h (sp)q(eci\014cally)g(indicated,)f(a)h(class)g(will)918 1827 y(inherit)23 b(inclusiv)o(ely)e(from)g(its)h(sup)q(erclass)i(all)d (the)i(in-)918 1876 y(stance)f(and)e(class)h(lev)o(el)f(kno)o(wledge)g (metho)q(ds,)h(whic)o(h)918 1926 y(means)g(that)g(kno)o(wledge)g(metho) q(ds)g(ha)o(ving)f(the)h(same)918 1976 y Fd(Pr)n(e)n(dic)n(ate)d Fi(as)g(that)f(of)h(some)f(metho)q(ds)g(in)g(the)i(inherit-)918 2026 y(ing)d(class)g(will)f(not)g(b)q(e)i(o)o(v)o(erridden.)25 b(Instead,)17 b(they)f(are)918 2076 y(aggregated)22 b(in)o(to)e(a)h (same)f(kno)o(wledge)h(predicate)i(and)918 2125 y(bac)o(ktrac)o(king)f (on)g(suc)o(h)g(a)g(kno)o(wledge)g(predicate)h(will)918 2175 y(extend)d(to)e(them.)30 b(This)18 b(pro)q(cedure)i(can)f(b)q(e)f (regarded)918 2225 y(as)i(kno)o(wledge)f(accum)o(ulation)e(and)i (ordinary)f(declara-)918 2275 y(tion)c(is)g(used)h(for)f(this)g(t)o(yp) q(e)g(of)g(inheritance.)19 b(F)m(or)14 b(exam-)918 2325 y(ple,)i(Program)e(4.1)h(declares)i(a)e Fd(wholikessb)n(ar)n(clays)g Fi(class)918 2375 y(whic)o(h)j(inherits)f(the)h Fd(customer)f Fi(class)h(in)f(Program)f(3.1.)918 2424 y(It)g(uses)h(ordinary)m(,)e (th)o(us)h(inclusiv)o(e,)f(inheritance,)h(there-)918 2474 y(fore,)k(if)d(a)h(kno)o(wledge)h(access)h(call)e(whic)o(h)g(in)o (v)o(ok)o(es)g(the)918 2524 y(predicate)11 b Fd(which)p 1199 2524 13 2 v 15 w(b)n(ank/5)f Fi(of)f(an)g Ff(wholik)o(esbarcla)o (ys)d Fi(in-)918 2574 y(stance)14 b(fails)e(to)g(\014nd)h(the)g (trusted)h(bank)f(pro)o(vides)g(an)f(in-)918 2624 y(terest)j(rate)e (higher)f(than)g(4.0,)g(the)h(execution)g(will)e(bac)o(k-)918 2673 y(trac)o(k)19 b(to)g(the)g(inherited)g(metho)q(d)f(in)g(class)h Ff(customer)918 2723 y Fi(to)j(\014nd)f(the)h(b)q(est)h (recommendation.)39 b(Conceptually)m(,)918 2773 y(in)23 b(an)g Ff(wholik)o(esbarcl)o(a)o(ys)d Fi(instance,)26 b(the)d(predicate)918 2823 y Fd(which)p 1023 2823 V 16 w(b)n(ank/5)14 b Fi(lo)q(oks)g(lik)o(e:)p eop %%Page: 7 7 7 6 bop -47 5 a Fg(which_bank\(Prof,)o(Type,)o(Bank,)o(Rate,)o(InitC)o (redi)o(t\))-4 47 y(:-)22 b(self)f(?)g(the_best\([barclays])o(,)105 90 y(Prof,Type,Bank,Best)o(Rate,)o(InitC)o(redi)o(t\),)-4 128 y(BestRate)f(>)i(4.0.)-47 162 y(which_bank\(Prof,)o(Type,)o(Bank,)o (Rate,)o(InitC)o(redi)o(t\))-4 204 y(:-)g(members\(Banks\))d(=>)i (banks,)62 243 y(self)g(?)g(the_best\(Banks,Prof)o(,)105 281 y(Type,BestBank,BestR)o(ate,I)o(nitCr)o(edit)o(\).)-47 359 y Fi(Notice)14 b(the)h(order)g(of)e(the)i(clauses)g(in)e(the)i (predicate.)20 b(In)-47 409 y(the)11 b(\014rst)h(clause,)f(only)f(bank) h('barcla)o(ys')e(is)i(passed)h(to)e(the)-47 459 y(banks)j(list)h(for)f (ev)n(aluating)f(the)i(b)q(est)h(rate,)f(and)f(it)g(is)h(ex-)-47 509 y(p)q(ected)g(that)e('barcla)o(ys')f(should)i(pro)o(vide)f(an)g (acceptable)-47 559 y(rate)k(higher)g(than)g(4.0,)f(otherwise,)h(the)h (second)g(clause,)-47 608 y(whic)o(h)12 b(is)h(actually)e(inherited,)i (will)e(b)q(e)i(used)h(to)e(ev)n(aluate)-47 658 y(the)i(b)q(est)h (rate.)-47 879 y Fg(class)21 b(wholikesbarclay)o(s)e(isa)i(customer)42 b(with)-47 921 y({)-25 954 y(class_definitio)o(n)18 988 y(methods)62 1021 y(.....)20 b(\045Other)h(methods)f(................) -25 1075 y(instance_defini)o(tion)-4 1108 y(methods)-4 1141 y(which_bank\(Prof,Typ)o(e,Ban)o(k,Rat)o(e,Ini)o(tCre)o(dit\))62 1184 y(:-)h(self?the_best\([bar)o(clays)o(],Pro)o(f,)214 1226 y(Type,Bank,BestRate,)o(InitC)o(redi)o(t\),)127 1265 y(BestRate)f(>)i(4.0.)18 1314 y(:)18 1347 y(:)44 b(\045Other)20 b(methods)18 1372 y(:)-47 1405 y(}.)32 1535 y Ff(Program)14 b(4.1)21 b(Inclusiv)o(e)13 b(inheritance)g(of)202 1585 y(kno)o(wledge)h(metho)q(ds)-47 1818 y Fc(4.2)55 b(Ov)n(erriding)105 b(Inheritance)f(of)80 1877 y(Kno)n(wledge)-47 1990 y Fi(Ov)o(erriding)14 b(inheritance)h(of)e(a)h(class)g(is)g (declared)h(with)f(a)-47 2040 y(di\013eren)o(t)d(inheritance)g(op)q (erator,)g Ff(isa*)p Fi(,)f(whic)o(h)h(indicates)-47 2090 y(that)18 b(kno)o(wledge)g(metho)q(ds)f(in)h(the)h(sup)q(erclass)h (will)c(b)q(e)-47 2140 y(o)o(v)o(erridden)e(if)f(they)i(ha)o(v)o(e)e(a) h(same)f Fd(Pr)n(e)n(dic)n(ate)g Fi(as)h(that)g(of)-47 2189 y(some)j(metho)q(ds)h(in)g(the)g(inheriting)g(class.)31 b(Bac)o(ktrac)o(k-)-47 2239 y(ing)12 b(on)i(a)f(kno)o(wledge)g (predicate)h(in)f(a)h(class)f(will)f(not)i(ex-)-47 2289 y(tend)k(to)g(o)o(v)o(erridden)g(metho)q(ds,)g(ho)o(w)o(ev)o(er,)h(if)e (required,)-47 2339 y(sup)q(er)j(comm)o(unications)c(can)j(still)g (access)h(these)h(o)o(v)o(er-)-47 2389 y(ridden)10 b(metho)q(ds.)16 b(F)m(or)9 b(example,)g(Program)g(4.2)f(includes)-47 2438 y(a)16 b Ff(whotrustsbarcla)o(ys)e Fi(class)j(whic)o(h)g(uses)h(o) o(v)o(erriding)-47 2488 y(inheritance)f(when)h(inheriting)e(from)f Ff(customer)g Fi(class.)-47 2538 y(An)k(instance)i(of)d(it,)i(up)q(on)g (receiving)g(a)f Fd(which)p 742 2538 13 2 v 15 w(b)n(ank/5)-47 2588 y Fi(kno)o(wledge)g(access)j(message,)f(will)d(just)i(consult)g (bank)-47 2638 y('barcla)o(ys')14 b(for)i(the)g(in)o(terest)h(rate)f (of)g(a)f(sp)q(eci\014c)i(t)o(yp)q(e)f(of)-47 2688 y(accoun)o(t.)-47 2773 y(Ho)o(w)o(ev)o(er,)d(if)e('barcla)o(ys')h(do)q(es)h(not)g(pro)o (vide)g(that)f(t)o(yp)q(e)h(of)-47 2823 y(accoun)o(t,)k(the)g(in)o(v)o (o)q(cation)f(will)f(simply)g(fail,)g(and)i(there)918 18 y(is)i(no)f(c)o(hance)i(that)f(the)g(execution)g(will)f(bac)o(ktrac) o(k)h(to)918 68 y(the)j(metho)q(d)e(declared)i(in)f(the)g(sup)q (erclass.)42 b(Another)918 118 y Fd(other)p 1014 118 V 15 w(b)n(ank/6)16 b Fi(metho)q(d)e(is)g(also)g(sho)o(wn)h(in)f(the)h (program)918 167 y(to)g(demonstrate)f(ho)o(w)g(to)h(use)g(a)f(sup)q(er) i(comm)o(unicatio)o(n)918 217 y(to)e(call)f(an)h(o)o(v)o(erridden)g (kno)o(wledge)g(metho)q(d.)918 435 y Fg(class)21 b(whotrustsbarclays)d (isa*)j(customer)g(with)918 477 y({)940 510 y(class_definition)984 543 y(methods)1027 576 y(.....)g(\045Other)g(methods)f (................)940 627 y(instance_definitio)o(n)984 660 y(methods)1027 693 y(which_bank\(Prof,Typ)o(e,)1289 735 y(Bank,Rate,InitCre)o(dit\))e(:-)1071 771 y(Bank)j(=)g(barclays,) 1071 813 y(Bank?rate\(Type,Pr)o(of,Ra)o(te,In)o(itCre)o(dit\))o(.)1027 867 y(other_bank\(Prof,Typ)o(e,)1289 909 y(Bank,Rate,InitCre)o(dit\))d (:-)1071 948 y(super?which_bank\()o(Prof,)o(Type,)1354 990 y(Bank,Rate,InitCredi)o(t\).)1027 1018 y(:)1027 1051 y(:)44 b(\045Other)20 b(methods)918 1087 y(}.)977 1230 y Ff(Program)14 b(4.2)21 b(Ov)o(erriding)12 b(inheritance)h(of)1168 1280 y(kno)o(wledge)h(metho)q(ds)918 1579 y Fc(4.3)56 b(Di\013eren)n(tial)97 b(Inheritance)h(of)1046 1637 y(Kno)n(wledge)918 1759 y Fi(Di\013eren)o(tial)18 b(inheritance)g(of)f(a)h(class)g(is)g (declared)h(with)918 1808 y(the)e(ordinary)e(inheritance)h(op)q(erator) g(but)g(the)g(name)e(of)918 1858 y(the)f(sup)q(erclass)i(is)d(follo)o (w)o(ed)f(b)o(y)h(a)g(subtracting)h(op)q(erator)918 1908 y(and)18 b(a)g(list)g(of)g(name/arit)o(y)e(terms.)31 b(Those)19 b(sup)q(erclass)918 1958 y(kno)o(wledge)10 b(metho)q(ds)g(whose)g(predicates)i(are)e(among)e(the)918 2008 y(terms)13 b(in)f(the)h(list)f(are)h(not)f(inherited.)18 b(This)13 b(mec)o(hanism)918 2057 y(is)19 b(the)h(com)o(bination)d(of)h (the)i(previous)f(t)o(w)o(o)g(inheriting)918 2107 y(st)o(yles,)e(and)f (the)h(bac)o(ktrac)o(king)f(will)e(extend)j(to)f(the)h(in-)918 2157 y(herited)j(metho)q(ds,)f(but)h(not)e(to)h(the)h(subtracted)g (ones.)918 2207 y(F)m(or)f(example,)g(in)g(Program)e(4.3,)i(a)g Ff(lo)o(y)o(altobarcla)n(ys)918 2257 y Fi(class)e(is)f(de\014ned,)i(in) e(whic)o(h)g(the)h Fd(which)p 1571 2257 V 15 w(b)n(ank/5)h Fi(kno)o(wl-)918 2306 y(edge)23 b(metho)q(d)e(in)h(the)h Ff(customer)d Fi(class)j(is)f(excluded)918 2356 y(from)9 b(the)i(inclusiv)o(e)f(inheritance.)18 b(Instead,)11 b(it)f(has)h(a)f(new)918 2406 y Fd(my)p 975 2406 V 16 w(b)n(ank/5)k Fi(metho)q(d.)j(No)o(w,)c(it)h(will)e(not)h(ev)o(en)h (answ)o(er)h(a)918 2456 y Fd(which)p 1023 2456 V 16 w(b)n(ank/5)j Fi(message,)f(although)f(the)i Fd(which)p 1707 2456 V 15 w(b)n(ank/5)918 2506 y Fi(kno)o(wledge)g(metho)q(d)e(in)h(the)h(sup) q(erclass)h(is)e(still)g(reac)o(h-)918 2556 y(able)23 b(b)o(y)g(a)g(sup)q(er)i(comm)o(unicatio)o(n)c(from)g(an)o(y)i(of)f (its)918 2605 y(metho)q(ds.)35 b(If)20 b(an)f(in)o(v)o(o)q(cation)g(to) g Fd(my)p 1550 2605 V 16 w(b)n(ank/5)h Fi(metho)q(d)918 2655 y(fails)c(to)h(reac)o(h)g(a)g(conclusion)g(b)q(ecause,)h(sa)o(y)f (again,)f(the)918 2705 y('barcla)o(ys')10 b(do)q(es)h(not)g(pro)o(vide) g(certain)g(t)o(yp)q(es)g(of)f(accoun)o(t,)918 2755 y(the)15 b(execution)g(will)d(simply)g(fails.)p eop %%Page: 8 8 8 7 bop -47 47 a Fg(class)21 b(loyaltobarclays)18 90 y(isa)g(customer)f(-)i([which_bank/5])d(with)-47 127 y({)-25 160 y(class_definitio)o(n)18 193 y(methods)62 226 y(.....)h(\045Other)h(methods)f(................)-25 276 y(instance_defini)o(tion)-4 310 y(methods)40 343 y(my_bank\(Prof,Type)o(,)-4 385 y(Bank,Rate,InitCredi)o(t\))f(:-)84 420 y(Bank)h(=)i(barclays,)84 462 y(Bank?rate\(Type,)o(Prof,)o(Rate,)o (InitC)o(redi)o(t\).)40 494 y(:)40 527 y(:)43 b(\045Other)21 b(methods)-47 563 y(}.)6 682 y Ff(Program)15 b(4.3)20 b(Di\013eren)o(ti)o(al)13 b(inherit)o(ance)g(of)202 732 y(kno)o(wledge)h(metho)q(ds)-47 914 y Fi(Notice)k(that)g(all)f(these)i (di\013eren)o(t)g(mec)o(hanisms)d(do)i(not)-47 964 y(a\013ect)j(the)g (inheritance)g(of)e(pro)q(cedural)i(metho)q(ds)f(and)-47 1013 y(state)d(comp)q(onen)o(ts,)g(they)g(apply)f(to)g(kno)o(wledge)h (meth-)-47 1063 y(o)q(ds)d(only)m(.)-47 1235 y Fj(5)69 b(State)51 b(Information)h(Repre-)56 1310 y(sen)n(ted)28 b(as)h(Dynamic)e(Kno)n(wl-)56 1385 y(edge)-47 1511 y Fi(State)c(v)n(ariables)g(ha)o(v)o(e)g(their)g(scop)q(e)h(con\014ned)g (to)f(the)-47 1561 y(pro)q(cedure)f(metho)q(ds.)35 b(Therefore,)22 b(only)d(a)h(pro)q(cedure)-47 1611 y(metho)q(d)g(can)i(directly)g (access)h(a)e(state)h(v)n(ariable.)39 b(As)-47 1661 y(men)o(tioned)15 b(ab)q(o)o(v)o(e,)i(a)f(kno)o(wledge)h(metho)q(d)f(that)g(needs)-47 1711 y(to)k(access)h(a)f(state)h(v)n(ariable)d(m)o(ust)h(do)h(so)g(b)o (y)f(using)h(a)-47 1761 y(self)d(comm)o(unicati)o(on)d(to)j(in)o(v)o (ok)o(e)f(a)h(pro)q(cedure)i(metho)q(d)-47 1810 y(that)h(returns)h(its) f(v)n(alue.)36 b(Alternativ)o(ely)m(,)20 b(state)h(infor-)-47 1860 y(mation)16 b(can)i(b)q(e)h(represen)o(ted)i(as)d(dynamic)e(kno)o (wledge)-47 1910 y(clauses)i(whic)o(h)g(can)f(b)q(e)i(directly)f (accessed)h(from)d(other)-47 1960 y(kno)o(wledge)i(metho)q(ds.)32 b(The)19 b(can)g(b)q(e)g(manipulated)e(b)o(y)-47 2010 y(the)e(pro)q(cedural)g(metho)q(ds)f(of)g(the)h(ob)r(ject)g(using)g(sp) q(ecial)-47 2059 y(kno)o(wledge)c(manipulation)e(primitiv)o(es.)15 b(The)e(can)e(b)q(e)i(ac-)-47 2109 y(cessed)h(from)c(a)h(pro)q(cedural) i(metho)q(d)e(of)g(an)g(ob)r(ject)i(using)-47 2159 y(a)g(query)i(to)f Fg(self)p Fi(.)-47 2245 y(T)m(o)d(illustrate)i(ho)o(w)f(to)g(use)h (dynamic)e(kno)o(wledge)h(to)g(rep-)-47 2294 y(resen)o(t)k(state)g (information,)c(consider)k(Program)e(5.1.)21 b(In)-47 2344 y(the)14 b Ff(undergraduate)c Fi(class,)k(the)g(courses)i(a)d (studen)o(t)i(is)-47 2394 y(curren)o(tly)j(taking)e(will)f(b)q(e)i (recorded)i(as)e(a)f(sequence)j(of)-47 2444 y(facts)-47 2559 y Fg(course_taking\(Id)o(1\).)-47 2608 y(course_taking\(Id)o(2\).) -47 2658 y(...)-47 2708 y(course_taking\(Id)o(k\)}.)-47 2823 y Fi(There)c(is)f(a)f(dynamic)f(declaration)1022 18 y Fg(dynamic)21 b(course)p 1332 18 14 2 v 14 w(taking/1.)918 103 y Fi(for)97 b(it.)266 b(A)97 b(studen)o(t)h(ob)r(ject)918 153 y(has)17 b(the)g Fd(enr)n(ol)r(l)p 1175 153 13 2 v 15 w(for)p 1242 153 V 15 w(a)p 1278 153 V 15 w(c)n(ourse/2)g Fi(metho)q(d)f(try)h(to)f(enroll)918 203 y(in)f(a)f(sp)q(eci\014ed)i (course)g(in)e(the)h(departmen)o(t)g(to)f(whic)o(h)h(it)918 253 y(b)q(elongs,)e(and)f(a)g(successful)j(resp)q(onse)f(from)d(the)i (depart-)918 303 y(men)o(t)19 b(results)h(in)f(a)g(fact)g Fg(course)p 1482 303 14 2 v 15 w(taking\(CourseId\))918 353 y Fi(b)q(eing)h(asserted)h(in)o(to)e(its)h(dynamic)e(kno)o(wledge.) 35 b(This)918 402 y(action)16 b(is)f(done)h(b)o(y)g(a)f Ff(self)f Fi(in)o(v)o(o)q(cation)h(using)g(a)h(system)918 452 y(built-in)c(sp)q(ecial)i(primitiv)o(e)c Fd(ac)n(quir)n(e)p 1506 452 13 2 v 16 w(know)r(le)n(dge/1)p Fi(.)18 b(The)918 502 y(same)i(fact)g(will)e(b)q(e)j(remo)o(v)o(ed,)f(using)g(another)g (sp)q(ecial)918 552 y(primitiv)o(e)g Fd(r)n(emove)p 1235 552 V 15 w(know)r(le)n(dge/1)p Fi(,)j(from)d(the)i(dynamic)918 602 y(kno)o(wledge)11 b(if)g(the)g(\014nal)g(grade)g(of)g(the)h(course) g(is)f(receiv)o(ed)918 651 y(b)o(y)16 b(the)h Fd(\014nal)p 1133 651 V 16 w(gr)n(ade/2)f Fi(metho)q(d.)24 b(The)17 b(remo)o(v)o(ed)e(course)918 701 y(is)g(then)g(put)g(in)o(to)f(a)g (list)g(recording)h(the)g(courses)i(ha)o(ving)918 751 y(b)q(een)e(tak)o(en)f(b)o(y)g(the)h(studen)o(t.)918 965 y Fg(class)21 b(undergraduate)e(isa)i(student)g(with)918 1007 y({)940 1036 y(instance_definitio)o(n)984 1073 y(dynamic)42 b(course_taking/1.)984 1131 y(states)1027 1160 y(Dept,)21 b(year)g(:=)g(1,)h(Subject,)1027 1203 y(CoursesTaken)e(:=)h([].)984 1261 y(methods)1027 1290 y(enroll_for_a_course)o(\(Cour)o(seId,)d (Ans\))j(->)1071 1329 y(enroll_a_course\(C)o(ourse)o(Id,)1507 1367 y(Reply\))f(=>)i(Dept,)1071 1406 y(if)f(Reply)g(==)g(yes)h(then) 1180 1445 y(Ans)f(=)h(yes,)1180 1487 y(self)f(?)g(acquire_knowledge\() 1245 1529 y(course_taking\(Cours)o(eId\)\))1071 1568 y(else)g(Ans)g(=)h(no.)1027 1626 y(final_grade\(CourseI)o(d,)d(Grade\)) h(->)1071 1668 y(self)h(?)g(remove_knowledge\()1289 1710 y(course_taking\(Cou)o(rseId)o(\))e(\),)1071 1749 y(CoursesTaken)g(:=) 1202 1778 y([\(CourseId,Grade)o(\)|Cou)o(rseTa)o(ken])o(.)1027 1807 y(.)1027 1836 y(.)j(\045other)e(procedure)g(methods)1027 1879 y(.)i(\045other)e(knowledge)g(methods)1027 1908 y(.)984 1937 y(code_definition)1027 1974 y(.)44 b(\045Parlog)20 b(and)h(Prolog)g(programs)1027 2016 y(.)44 b(\045private)20 b(to)h(the)g(class)1027 2045 y(.)918 2074 y(}.)940 2203 y Ff(Program)14 b(5.1)21 b(Using)14 b(dynamic)h(kno)o(wledge)f(to)1126 2253 y(record)h(state)g(informati)o(on)918 2503 y Fc(5.1)56 b(Consistency)38 b(of)i(Access)e(to)h(Dy-)1046 2561 y(namic)17 b(Kno)n(wledge)i(State)918 2673 y Fi(When)13 b(using)f(state)g(v)n (ariables)g(to)g(record)h(state)g(informa-)918 2723 y(tion)18 b(there)i(is)e(a)g(guaran)o(tee)h(of)f(consisten)o(t)h(access)i(and)918 2773 y(up)q(date)15 b(of)e(the)i(state.)k(A)14 b(pro)q(cedure)i(metho)q (d)e(executed)918 2823 y(on)20 b(receipt)h(of)f(a)f(message)h(M)g(sees) h(the)g(set)f(of)g(v)n(alues)p eop %%Page: 9 9 9 8 bop -47 18 a Fi(for)17 b(the)g(state)h(v)n(ariables)f(that)g (result)h(from)d(the)j(execu-)-47 68 y(tion)10 b(of)h Fd(al)r(l)k Fi(and)c Fd(only)k Fi(the)c(pro)q(cedure)i(metho)q(d)e (messages)-47 118 y(that)i(ha)o(v)o(e)f(reac)o(hed)i(the)f(ob)r(ject)h (b)q(efore)g(it,)e(ev)o(en)h(though)-47 167 y(it)k(can)h(start)h (executing)g(b)q(efore)f(these)i(other)e(metho)q(ds)-47 217 y(ha)o(v)o(e)13 b(terminated.)-47 303 y(Because)19 b(kno)o(wledge)d(metho)q(ds)h(of)f(an)h(ob)r(ject)g(can)g(also)-47 353 y(execute)i(concurren)o(tly)m(,)g(a)e(similar)e(guaran)o(tee)j (with)f(re-)-47 402 y(sp)q(ect)d(to)f(the)h(dynamic)d(kno)o(wledge)i (of)f(the)i(ob)r(ject)g(m)o(ust)-47 452 y(also)25 b(b)q(e)i(pro)o (vided.)53 b(In)26 b(other)h(w)o(ords,)i(the)d(system)-47 502 y(has)f(to)h(promise)e(that)i(a)f(kno)o(wledge)g(metho)q(d,)i(exe-) -47 552 y(cuted)17 b(on)e(receipt)i(of)f(some)f(message)g(M',)g(sees)j (the)e(dy-)-47 602 y(namic)10 b(kno)o(wledge)i(that)h(results)g(from)e Fd(al)r(l)16 b Fi(and)c Fd(only)k Fi(the)-47 651 y(kno)o(wledge)k(up)q (date)h(messages)g(whose)g(execution)h(w)o(as)-47 701 y(started)17 b(b)q(efore)g(the)g(receipt)g(of)f(the)h(message)f(M'.)f (DK)p 864 701 13 2 v -47 751 a(P)o(arlog)71 736 y Fh(++)134 751 y Fi(guaran)o(tees)d(this)f(b)o(y)f(handling)g(resolutions)h(of)-47 801 y(the)i(kno)o(wledge)f(up)q(date)h(messages)g(in)f(a)h(sp)q(ecial)f (w)o(a)o(y)m(.)17 b(A)-47 851 y(kno)o(wledge)12 b(up)q(date)h(action)e (is)h(only)g(tak)o(en)g(b)o(y)g(an)g(ob)r(ject)-47 901 y(if)18 b(all)f(previously)i(in)o(v)o(ok)o(ed)e(kno)o(wledge)i(metho)q (ds)f(ha)o(v)o(e)-47 950 y(completely)g(terminated.)34 b(\(This)19 b(means)g(that)g(all)f(the)-47 1000 y(needed)f(di\013eren)o (t)g(solutions)e(to)g(previous)h(queries)h(ha)o(v)o(e)-47 1050 y(b)q(een)d(found.\))k(In)13 b(addition,)e(no)i(new)h(message)f (in)o(v)o(oking)-47 1100 y(a)f(kno)o(wledge)h(metho)q(d)f(will)f(b)q(e) j(accepted)g(b)o(y)f(the)g(ob)r(ject)-47 1150 y(un)o(til)c(the)i(kno)o (wledge)g(up)q(date)g(metho)q(d)e(has)i(terminated.)-47 1235 y(This)20 b(consistency)h(of)e(access)j(to)e(dynamic)e(kno)o (wledge)-47 1285 y(state)d(guaran)o(teed)f(b)o(y)g(DK)p 392 1285 V 15 w(P)o(arlog)523 1270 y Fh(++)590 1285 y Fi(is)g(stronger)h(than)-47 1335 y(that)c(pro)o(vided)g(b)o(y)g(the)h (DLP)f(language)f([Eli92)o(],)g(another)-47 1385 y(distributed)g(logic) f(programmi)o(ng)e(language)h(in)i(whic)o(h)f(all)-47 1434 y(the)16 b(metho)q(ds)e(are)i(what)f(w)o(e)g(call)g(kno)o(wledge)g (metho)q(ds.)-47 1484 y(DLP)e(only)f(dela)o(ys)h(a)f(state)i(up)q(date) g(un)o(til)e(the)i(\014rst)f(solu-)-47 1534 y(tion)j(to)h(eac)o(h)h (curren)o(tly)g(executing)f(metho)q(d)g(has)g(b)q(een)-47 1584 y(found.)38 b(So,)22 b(on)e(bac)o(ktrac)o(king)h(to)f(\014nd)h (the)h(next)f(so-)-47 1634 y(lution,)16 b(the)i(metho)q(d)f(ma)o(y)e (see)k(a)e(dynamic)e(kno)o(wledge)-47 1683 y(state)f(di\013eren)o(t)h (to)e(that)h(seen)g(when)g(the)g(previous)g(solu-)-47 1733 y(tion)f(w)o(as)h(found.)-47 1912 y Fj(6)69 b(Related)21 b(W)-6 b(ork)-47 2040 y Ff(Orien)o(t84/K)21 b Fa(\021)j Ff(OOP)f(+)g(LP)g(+)h(Concurrency)-47 2090 y Fi(Orien)o(t84/K)16 b(w)o(as)h(designed)g(for)f(the)h(primary)e(purp)q(ose)-47 2140 y(of)k(describing)i(large)e(kno)o(wledge)h(systems,)i(whic)o(h)d (are)-47 2189 y(in)14 b(turn)i(comp)q(osed)f(of)f(man)o(y)f(co-op)q (erating)i(kno)o(wledge)-47 2239 y(sub-systems.)49 b(It)24 b(is)g(based)g(on)g(a)g(seman)o(tics)f(called)-47 2289 y(Distributed)e(Kno)o(wledge)g(Ob)r(ject)h(Mo)q(deling\(DK)o(OM\))-47 2339 y([TI85)o(],)g(a)e(kno)o(wledge)h(system)g(mo)q(deling)e(mec)o (hanism)-47 2389 y(using)13 b(ob)r(ject)h(orien)o(ted)g(metho)q (dologies.)i(The)e(language)-47 2438 y(com)o(bines)30 b(Ob)r(ject)i(Orien)o(ted)h(Programmi)o(ng\(OOP\),)-47 2488 y(Logic)22 b(based)i(Programming\(LP\),)c(Demon)i(Orien)o(ted)-47 2538 y(and)e(Concurren)o(t)h(Programming)16 b(paradigms.)35 b(P)o(aral-)-47 2588 y(lelism)11 b(in)h(Orien)o(t84/K)h(is)f(ac)o(hiev) o(ed)i(b)o(y)e(supp)q(orting)h(dis-)-47 2638 y(tributed)e(computation)e (and)i(b)o(y)g(forking)e(concurren)o(t)k(ac-)-47 2688 y(tiv)o(e)k(ob)r(jects)h(whic)o(h)g(execute)h(sequen)o(tially)m(.)27 b(No)17 b(in)o(tra-)-47 2737 y(metho)q(d)c(concurrency)j(is)e(pro)o (vided.)-47 2823 y(Orien)o(t84/K)k(is)h(p)q(erhaps)g(the)g(closest)h (in)e(design)h(goals)918 18 y(to)h(DK)p 1041 18 V 15 w(P)o(arlog)1172 3 y Fh(++)1224 18 y Fi(.)34 b(The)20 b(pro)q(cedural)g(metho)q(ds)f(of)f(its)918 68 y(ob)r(ject)f(are)f (implemen)o(ted)e(in)h(a)h(distributed)g(v)o(ersion)g(of)918 118 y(SmallT)m(alk,)22 b(and)h(the)g(kno)o(wledge)g(metho)q(d)g(is)g (imple-)918 167 y(men)o(ted)g(in)f(Prolog.)45 b(But)24 b(the)f(SmallT)m(alk)c(pro)q(cedu-)918 217 y(ral)k(metho)q(ds)g(are)h (sequen)o(tial,)h(and)e(the)h(\014t)f(b)q(et)o(w)o(een)918 267 y(SmallT)m(alk)18 b(and)k(Prolog)e(is)i(m)o(uc)o(h)e(less)i (homogeneous)918 317 y(than)c(that)g(b)q(et)o(w)o(een)g(P)o(arlog)f (and)h(Prolog.)28 b(F)m(or)17 b(exam-)918 367 y(ple,)c(as)g(w)o(e)g (understand)h(it,)e(the)i(kno)o(wledge)e(comp)q(onen)o(t)918 416 y(of)g(another)h(ob)r(ject)h(cannot)f(b)q(e)g(directly)g(queried)g (from)e(a)918 466 y(Smalltalk)e(metho)q(d,)h(only)h(the)h(ob)r(jects)h (lo)q(cal)e(kno)o(wledge)918 516 y(can)j(b)q(e)h(accessed.)918 675 y Ff(DLP)27 b Fa(\021)g Ff(LP)g(+)g(OOP)f(+)i Fa(k)41 b Fi(Distributed)24 b(Logic)918 725 y(Programming\(DLP\)[El)o(i92)m(]) 11 b(w)o(as)h(also)f(dev)o(elop)q(ed)i(with)918 775 y(the)21 b(in)o(ten)o(tion)f(to)h(amalgam)n(ate)d(the)j(Logic)f(Program-)918 825 y(ming,)d(the)i(Ob)r(ject)h(Orien)o(ted)g(Programmi)o(ng)c(and)i (the)918 875 y(Distributed)h(Computation)d(paradigms.)28 b(It)19 b(is)e(an)h(ex-)918 924 y(tension)10 b(of)f(Prolog)f(with)h(ob) r(ject)h(declarations)g(and)f(state-)918 974 y(men)o(ts)k(for)f (dynamic)f(creation)j(of)e(ob)r(jects,)i(comm)o(uni)o(ca-)918 1024 y(tion)i(b)q(et)o(w)o(een)h(ob)r(jects)g(and)e(the)i(assignmen)o (t)e(of)g(v)n(alues)918 1074 y(to)f(state)h(v)n(ariables)e(of)h(ob)r (jects.)19 b(DLP)14 b(uses)h(a)f(computa-)918 1124 y(tion)d(mo)q(del)f (whic)o(h)i(com)o(bines)e(the)i(Prolog)f(computation)918 1174 y(mo)q(del)j(and)g(a)h(parallel)e(ob)r(ject)j(orien)o(ted)f(mo)q (del)e(similar)918 1223 y(to)21 b(that)f(of)g(POOL[Ame87)o(].)37 b(Basically)m(,)20 b(an)h(applica-)918 1273 y(tion)16 b(is)f(a)h(collection)f(of)g Ff(ob)s(ject)f Fi(declarations.)24 b(Ob)r(ject)918 1323 y(instances)16 b(can)f(b)q(e)g(created)h (dynamically)c(and)i(accessed)918 1373 y(concurren)o(tly)m(.)k(As)10 b(in)g(DK)p 1338 1373 V 15 w(P)o(arlog)1469 1358 y Fh(++)1521 1373 y Fi(,)g(public)g(names)f(are)918 1423 y(used)15 b(for)f(ob)r(ject)g(declarations)g(in)g(DLP)m(.)918 1508 y(DLP)19 b(also)e(pro)o(vides)i(distributed)g(computation)d(facili-)918 1558 y(ties)f(and)f(allo)o(ws)f(concurren)o(t)j(execution)f(of)e(metho) q(ds)h(in)918 1608 y(an)h(ob)r(ject.)22 b(Ho)o(w)o(ev)o(er,)15 b(the)g(metho)q(d)f(can)h(only)f(b)q(e)i(what)918 1658 y(w)o(e)21 b(call)e(kno)o(wledge)h(metho)q(ds{or)f(Prolog)g(rules.)38 b(De-)918 1707 y(spite)14 b(also)e(ha)o(ving)f(a)i(distributed)g(bac)o (ktrac)o(king)f(abilit)o(y)m(,)918 1757 y(DLP)19 b(has)f(a)g(w)o(eak)o (er)h(constrain)o(t)g(regarding)f(when)h(dy-)918 1807 y(namic)12 b(information)e(can)k(b)q(e)f(c)o(hanged.)19 b(A)13 b(state)h(up)q(date)918 1857 y(is)19 b(allo)o(w)o(ed)e(when)j (all)d(curren)o(t)j(queries)g(ha)o(v)o(e)f(returned)918 1907 y(a)g(\014rst)g(solution.)31 b(But)19 b(in)f(DK)p 1441 1907 V 15 w(P)o(arlog)1572 1892 y Fh(++)1624 1907 y Fi(,)i(all)d(needed)918 1956 y(solutions)i(ha)o(v)o(e)g(to)g(ha)o(v)o (e)g(b)q(een)h(computed)f(b)q(efore)h(the)918 2006 y(up)q(date)15 b(is)f(allo)o(w)o(ed.)k(Also,)c(parallelism)e(in)h(an)i(ob)r(ject)g(is) 918 2056 y(only)h(b)q(et)o(w)o(een)i(alternativ)o(e)f(metho)q(ds.)26 b(Since)17 b(metho)q(ds)918 2106 y(are)12 b(just)f(Prolog)f(rules,)i (there)g(is)f(no)f(concurrency)j(within)918 2156 y(a)h(metho)q(d)f(in)g (DLP)m(.)918 2344 y Fj(7)70 b(Concluding)21 b(remarks)918 2474 y Fi(W)m(e)h(ha)o(v)o(e)g(in)o(tro)q(duced)g(most)f(of)g(the)i(k)o (ey)f(features)h(of)918 2524 y(DK)p 984 2524 V 15 w(P)o(arlog)1115 2509 y Fh(++)1168 2524 y Fi(.)17 b(One)e(feature)f(w)o(e)g(ha)o(v)o(e)g (not)g(men)o(tioned)918 2574 y(is)j(mo)q(delled)e(on)h(the)h(`b)q (ecome')f(of)g(actors)h([AH87)o(].)26 b(In-)918 2624 y(stead)14 b(of)e(a)g(state)h(up)q(date,)g(as)g(a)f(last)g(action)g(an) h(instance)918 2673 y(ob)r(ject)21 b(metho)q(d)e(can)h(metamorphise)e (the)j(ob)r(ject)f(in)o(to)918 2723 y(an)e(instance)h(of)f(another)g (class)h Fd(without)f Fi(c)o(hanging)f(the)918 2773 y(ob)r(ject's)i (iden)o(tit)o(y)m(.)28 b(This)18 b(can)g(b)q(e)g(used)h(to)f(restrict,) i(or)918 2823 y(totally)d(c)o(hange)g(the)i(metho)q(ds)e(of)g(an)g (instance)h(ob)r(ject,)p eop %%Page: 10 10 10 9 bop -47 18 a Fi(when)14 b(it)g(en)o(ters)h(a)f(certain)g(state.) -47 103 y(The)h(language)e(is)i(fully)e(implemen)o(ted)f(and)j(running) f(on)-47 153 y(a)f(net)o(w)o(ork)h(of)f(mac)o(hines)g(at)h(Imp)q(erial) e(College.)17 b(W)m(e)c(b)q(e-)-47 203 y(liev)o(e)j(that)h(it)g(has)g (a)f(unique)h(blend)g(of)f(features)i(and)f(is)-47 253 y(a)e(v)o(ery)h(p)q(o)o(w)o(erful,)g(and)f(quite)h(declarativ)o(e,)g (distributed)-47 303 y(ob)r(ject)h(orien)o(ted)f(programming)d (language.)24 b(In\015uences)-47 353 y(on)18 b(its)h(design)f(w)o(ere)i (the)f(previous)g(OO)g(extensions)g(of)-47 402 y(CLP)j(men)o(tioned)f (in)h(the)h(in)o(tro)q(duction,)g(actors,)i(and)-47 452 y(ABCL/1)11 b([SY87)o(])g(and)g(the)h(ab)q(o)o(v)o(e)f(men)o(tioned)f (DLP)h(and)-47 502 y(Orien)o(t84/K.)h(ABCL/1)h(is)g(an)g(actor)g(deriv) o(ed)g(language.)-47 588 y(W)m(e)18 b(are)i(no)o(w)f(considering)g (restricting)h(the)g(use)g(of)e(re-)-47 637 y(ply)12 b(v)n(ariables)g(in)g(messages)h(so)f(that)h(DK)p 619 637 13 2 v 15 w(P)o(arlog)750 622 y Fh(++)815 637 y Fi(can)-47 687 y(b)q(e)f(implemen)o(ted)e(without)h(the)h(need)h(for)f(an)f (underlying)-47 737 y(distributed)17 b(uni\014cation)g(sc)o(heme.)27 b(The)17 b(k)o(ey)g(idea)g(here)-47 787 y(is)c(to)g(declare)i(whic)o(h) e(o)q(ccurrences)k(of)c(v)n(ariables)g(in)g(b)q(oth)-47 837 y(a)k(sen)o(t)h(message)g(and)f(a)g(message)g(receiv)o(e)i(pattern) f(are)-47 886 y(reply)f(v)n(ariables,)f(and)h(to)g(insist)g(that)f(eac) o(h)i(reply)f(v)n(ari-)-47 936 y(able)f(of)g(a)g(metho)q(d)g(app)q (ears)i(in)e(exactly)g(one)h(action)f(of)-47 986 y(the)e(metho)q(d,)f (an)g(action)h(whic)o(h)g(assigns)g(a)f(v)n(alue)h(to)f(the)-47 1036 y(v)n(ariable)k(using)i(a)f(sp)q(ecial)h(reply)g(v)n(ariable)f (assignmen)o(t)-47 1086 y(op)q(eration.)-47 1171 y(No)o(w,)i(when)h(a)f (message)f(is)h(sen)o(t,)i(w)o(e)e(kno)o(w)g(what)g(its)-47 1221 y(reply)h(v)n(ariables)f(are)h(and)f(w)o(e)h(can)g(create)i(temp)q (orary)-47 1271 y(mailb)q(o)o(xes)9 b(on)h(the)i(sender's)g(mac)o(hine) e(to)h(hold)f(the)i(reply)-47 1321 y(bindings)e(for)g(these)i(v)n (ariables)e Fd(if)g Fi(the)i(target)f(ob)r(ject)g(is)g(on)-47 1371 y(another)18 b(mac)o(hine.)30 b(F)m(or)18 b(eac)o(h)h(suc)o(h)g (reply)g(v)n(ariable)e(X)-47 1420 y(w)o(e)c(also)g(fork)f(a)h(pro)q (cess)i(that)e(reads)h(the)g(mailb)q(o)o(x)c(v)n(alue)-47 1470 y(and)i(assigns)g(it)g(to)g(X.)g(This)g(pro)q(cess)j(susp)q(ends)f (un)o(til)d(the)-47 1520 y(mailb)q(o)o(x)k(gets)k(a)f(v)n(alue,)g(and)g (kills)f(the)i(mailb)q(o)o(x)c(when)-47 1570 y(the)k(v)n(alue)g(is)g (read.)33 b(The)20 b(mailb)q(o)o(x)c(iden)o(tities)j(replace)-47 1620 y(the)14 b(v)n(ariables)f(in)h(the)g(sen)o(t)h(message.)-47 1705 y(When)h(a)f(receiving)i(metho)q(d)e(w)o(an)o(ts)g(to)h(`assign')f (to)h(one)-47 1755 y(of)j(its)h(reply)g(v)n(ariables,)g(and)g(this)g (assignmen)o(t)f(action)-47 1805 y(\014nds)14 b(that)g(the)g(v)n (ariable)f(already)g(has)h(a)f(v)n(alue)g(whic)o(h)h(is)-47 1855 y(a)g(mailb)q(o)o(x)d(iden)o(tit)o(y)m(,)i(it)h(instead)h(sends)h (the)f(reply)f(v)n(alue)-47 1904 y(to)f(the)i(mailb)q(o)o(x.)-47 1990 y(Ev)o(en)24 b(with)f(this)h(restriction)h(on)f(the)g(reply)g(v)n (ariable)-47 2040 y(mec)o(hanism,)18 b(all)g(the)h(example)f(programs)g (of)h(this)g(pa-)-47 2090 y(p)q(er)14 b(can)g(b)q(e)h(easily)e (rewritten)i(and)e(will)f(still)h(execute)j(as)-47 2139 y(describ)q(ed.)-47 2225 y(A)e(ma)r(jor)f(application)g(area)h(that)h (w)o(e)f(are)h(in)o(v)o(estigating)-47 2275 y(is)e(En)o(terprise)j(In)o (tergration)e([CSW95)o(].)-47 2489 y Fj(References)-47 2624 y Fi([AH87])87 b(G.)28 b(Agha)h(and)g(C.)g(Hewitt.)63 b(Concur-)168 2673 y(ren)o(t)28 b(programmi)o(ng)d(using)i(actors.)59 b(In)168 2723 y(A.)19 b(Y)m(oneza)o(w)o(a)h(and)g(M.)f(T)m(ok)o(oro,)h (editors,)168 2773 y Fd(Obje)n(ct)i(Oriente)n(d)g(Concurr)n(ent)g(Pr)n (o)n(gr)n(am-)168 2823 y(ming)p Fi(.)13 b(MIT)h(Press,)h(1987.)918 18 y([Ame87])64 b(P)m(.)34 b(America,)j(\\POOL-T)d(:)f(A)h(P)o(aral-) 1133 68 y(lel)g(Ob)r(ject)i(Orien)o(ted)f(Language",)j(In)1133 118 y(Y)m(oneza)o(w)o(a,)15 b(A.)g(and)h(T)m(ok)o(oro,)e(M.,)g (editors,)1133 167 y Fd(Obje)n(ct-Oriente)n(d)25 b(Concurr)n(ent)h(Pr)n (o)n(gr)n(am-)1133 217 y(ming)p Fi(,)14 b(The)g(MIT)g(Press,)h(1987.) 918 313 y([CC93])89 b(D.)27 b(Ch)o(u,)k(K.)d(L.)f(Clark,)j (\\IC-PrologI)q(I:)1133 362 y(a)24 b(Multi-threaded)f(Prolog)g (System",)h(In)1133 412 y Fd(Pr)n(o)n(c)n(e)n(e)n(dings)18 b(of)g(the)g(ICLP'93)g(Post)g(Con-)1133 462 y(fer)n(enc)n(e)e(Workshop) i(on)e(Concurr)n(ent,)h(Dis-)1133 512 y(tribute)n(d)f(&)h(Par)n(al)r (lel)f(Implementations)h(of)1133 562 y(L)n(o)n(gic)12 b(Pr)n(o)n(gr)n(amming)f(Systems)p Fi(,)h(Budap)q(est,)1133 611 y(1993.)918 707 y([CC93])89 b(Y.)13 b(Cosmadop)q(oulos)f(and)h(D.)f (A.)h(Ch)o(u,)k Fd(IC-)1133 757 y(Pr)n(olo)n(g)c(II)g(R)n(efer)n(enc)n (e)g(Manual)p Fi(,)j(Logic)11 b(Pro-)1133 806 y(gramming)18 b(Section,)24 b(Dept.)d(of)g(Comput-)1133 856 y(ing,)13 b(Imp)q(erial)f(College,)h(London,)g(1993.)918 951 y([CDB)1021 936 y Fh(+)1049 951 y Fi(93])30 b(J.)24 b(Crammond,)f(A.)g(Da)o(vison,) i(A.)e(Burt,)1133 1001 y(M.)j(Hun)o(tbac)o(h,)k(M.)c(Lamand,)h(Y.)g (Cos-)1133 1051 y(madop)q(oulos,)13 b(and)h(D.)g(Ch)o(u.)20 b(The)c(parallel)1133 1101 y(parlog)f(user)h(man)o(ual.)j(Dept.)c(of)f (Comput-)1133 1151 y(ing,)f(Imp)q(erial)f(College,)h(1993.)918 1246 y([CG86])86 b(K.)27 b(L.)g(Clark)f(and)h(S.)g(Gregory)m(.)57 b(P)o(ar-)1133 1296 y(log)24 b(:)38 b(P)o(arallel)23 b(programmi)o(ng)e(in)j(logic.)1133 1346 y Fd(A)o(CM)36 b(tr)n(ansactions)g(on)g(Pr)n(o)n(gr)n(amming)1133 1396 y(L)n(anguages)k(and)f(Systems)p Fi(,)45 b(8\(1\):1{49,)1133 1445 y(1986.)918 1541 y([CW94])76 b(K.)27 b(L.)f(Clark)g(and)g(T.)g(I)h (W)m(ang.)54 b(Dis-)1133 1590 y(tributed)15 b(ob)r(ject)f(orien)o(ted)g (logic)e(program-)1133 1640 y(ming.)41 b(ICOT)22 b(Fifth)g(Generation)g (Com-)1133 1690 y(puter)32 b(System)e(W)m(orkshop)f(on)h(Hetero-)1133 1740 y(geneous)14 b(Co)q(op)q(erativ)o(e)f(Kno)o(wledge-Bases,)1133 1790 y(1994.)918 1885 y([CSW95])53 b(K.)16 b(L.)f(Clark)g(and)g(N.)h (Sk)n(armeas)e(and)h(T.)h(I)1133 1935 y(W)m(ang.)c(Distributed)f(ob)r (ject)g(orien)o(ted)g(logic)1133 1985 y(programming)19 b(as)k(a)f(to)q(ol)g(for)g(en)o(terprise)1133 2034 y(mo)q(delling.)41 b Fd(Pr)n(o)n(c)n(e)n(e)n(dings)23 b(of)g(IFIP)g(TC5)1133 2084 y(Working)18 b(Confer)n(enc)n(e)f(on)h(Mo)n(del)r(ling)g(and)1133 2134 y(Metho)n(dolo)n(gies)27 b(for)e(Enterprise)g(Inte)n(gr)n(a-)1133 2184 y(tion)19 b Fi(T)m(o)14 b(b)q(e)g(published)h(b)o(y)e(Chapman)g (and)1133 2234 y(Hall)918 2329 y([CW96])76 b(K.)81 b(L.)f(Clark)h(and)f (T.)h(I)1133 2379 y(W)m(ang.,)11 b(\\D)p 1328 2379 V 14 w(P)o(arlog)1458 2364 y Fh(++)1523 2379 y Fi(-)h(Ob)r(ject)h(Orien)o (ted)1133 2429 y(Logic)25 b(Programming)d(with)j(Distributed)1133 2478 y(Activ)o(e)20 b(Classes",)h(in)e(Goldsac)o(k)f(S.J.)h(and)1133 2528 y(Ken)o(t)j(S.J.H.,)f(editors,)i Fd(F)m(ormal)e(Metho)n(ds)1133 2578 y(and)12 b(Obje)n(ct)e(T)m(e)n(chnolo)n(gy)p Fi(,)h(Springer)f(V)m (erlag,)1133 2628 y(to)k(app)q(ear)h(\(1996\).)918 2723 y([Da)o(v89])75 b(A.)11 b(Da)o(vison.)h Fd(Polka:A)f(Parlo)n(g)h(Obje)n (ct)g(Ori-)1133 2773 y(ente)n(d)19 b(L)n(anguage)p Fi(.)31 b(PhD)18 b(thesis,)h(Imp)q(erial)1133 2823 y(College,)13 b(1989.)p eop %%Page: 11 11 11 10 bop -47 18 a Fi([Eli92])97 b(A.)19 b(Eli)o(\177)-20 b(ens,)21 b Fd(DLP)g(A)f(L)n(anguage)h(F)m(or)f(Dis-)168 68 y(tribute)n(d)11 b(L)n(o)n(gic)h(pr)n(o)n(gr)n(amming-Design,)g(Se-) 168 118 y(mantics)h(and)h(Implementation)p Fi(,)f(John)f(Wi-)168 167 y(ley)i(&)g(Sons,)f(England,)g(1992)-47 250 y([GR83])85 b(A.)11 b(Goldb)q(erg)g(and)h(D.)f(Robson.)i Fd(Smal)r(ltalk-)168 300 y(80:)19 b(The)c(L)n(anguage)h(and)f(its)g(Implementa-)168 350 y(tion)p Fi(.)j(Addison-W)m(esley)m(,)12 b(1983.)-47 433 y([KTMB87])20 b(Kenneth)28 b(M.)e(Kahn,)j(Eric)d(D.)g(T)m(ribble,) 168 483 y(Mark)13 b(S.)g(Miller,)f(and)i(Daniel)e(G.)g(Bobro)o(w.)168 533 y(V)m(ulcan:)50 b(Logical)28 b(concurren)o(t)k(ob)r(jects.)168 582 y(In)20 b(P)m(.)f(Shriv)o(er)h(and)g(P)m(.)f(W)m(egner,)i(editors,) 168 632 y Fd(R)n(ese)n(ar)n(ch)15 b(Dir)n(e)n(ctions)g(in)h(Obje)n (ct-Oriente)n(d)168 682 y(Pr)n(o)n(gr)n(amming)p Fi(.)d(MIT)g(Press,)i (1987.)-47 765 y([McC92])63 b(F.)9 b(G.)f(McCab)q(e,)j Fd(L&O:)f(L)n(o)n(gic)g(and)i(Obje)n(cts)p Fi(.)168 815 y(In)o(ternational)22 b(series)j(in)e(Computer)f(Sci-)168 865 y(ence.)14 b(Pren)o(tice-Hall)f(In)o(ternational,)f(1992.)-47 948 y([ST83])96 b(E.)20 b(Y.)f(Shapiro)h(and)f(A.)h(T)m(ak)o(euc)o(hi.) 36 b(Ob-)168 998 y(ject)22 b(orien)o(ted)g(programming)c(in)j(concur-) 168 1047 y(ren)o(t)c(prolog.)26 b(In)16 b Fd(New)h(Gener)n(ation)h (Com-)168 1097 y(puting)p Fi(.)c(1983.)-47 1180 y([SY87])95 b(E.)17 b(Shiba)o(y)o(ama)e(and)i(A.)h(Y)m(oneza)o(w)o(a.)28 b(Dis-)168 1230 y(tributed)33 b(computing)d(in)i(ab)q(cl/1.)72 b(In)168 1280 y(A.)19 b(Y)m(oneza)o(w)o(a)h(and)g(M.)f(T)m(ok)o(oro,)h (editors,)168 1330 y Fd(Obje)n(ct)i(Oriente)n(d)g(Concurr)n(ent)g(Pr)n (o)n(gr)n(am-)168 1379 y(ming)p Fi(.)13 b(MIT)h(Press,)h(1987.)-47 1463 y([TI85])104 b(M.)28 b(T)m(ok)o(oro,)j(and)e(Y.)f(Ishik)n(a)o(w)o (a,)j(\\Ori-)168 1512 y(en)o(t84/K)21 b(:)g(A)h(Language)f(with)h (Multiple)168 1562 y(P)o(aradigms)c(in)i(the)g(Ob)r(ject)i(F)m(ramew)o (ork")168 1612 y(,)c(in)f Fd(Pr)n(o)n(c)n(e)n(e)n(ding)h(of)g(the)g (19th)h(Hawaii)f(In-)168 1662 y(ternational)f(Confer)n(enc)n(e)g(on)h (System)g(Sci-)168 1712 y(enc)n(es)p Fi(,)c(Honolulu,)e(Jan)o(uary)i (1986.)-47 1795 y([W)m(an95])65 b(T.)14 b(I)g(W)m(ang.)19 b Fd(Distribute)n(d)c(Obje)n(ct-oriente)n(d)168 1844 y(L)n(o)n(gic)f(Pr)n(o)n(gr)n(amming)p Fi(.)j(PhD)d(thesis,)g(Imp)q(e-) 168 1894 y(rial)f(College,)g(1995.)-47 1977 y([YC88])88 b(K.)15 b(Y)m(oshida)g(and)h(T.)f(Chik)n(a)o(y)o(ama.)21 b(A'um-)168 2027 y(a)43 b(stream-based)h(concurren)o(t)i(ob)r(ject-)168 2077 y(orien)o(ted)26 b(language.)52 b(In)25 b Fd(Pr)n(o)n(c)n(e)n(e)n (ding)h(of)168 2127 y(F)o(GCS'88)p Fi(.)14 b(ICOT,)f(1988.)p eop %%Trailer end userdict /end-hook known{end-hook}if %%EOF