<?xml version="1.0" encoding="UTF-8"?>
<TEI xml:space="preserve" xmlns="http://www.tei-c.org/ns/1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.tei-c.org/ns/1.0 https://raw.githubusercontent.com/kermitt2/grobid/master/grobid-home/schemas/xsd/Grobid.xsd"
 xmlns:xlink="http://www.w3.org/1999/xlink">
	<teiHeader xml:lang="en">
		<fileDesc>
			<titleStmt>
				<title level="a" type="main">golog++ : An Integrative System Design</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author>
							<persName><forename type="first">Victor</forename><surname>Mataré</surname></persName>
							<affiliation key="aff0">
								<orgName type="laboratory">Mobile Autonomous Systems and Cognitive Robotics</orgName>
								<orgName type="institution">Aachen University of Applied Sciences</orgName>
								<address>
									<postCode>52066</postCode>
									<settlement>Aachen</settlement>
									<country key="DE">Germany</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Stefan</forename><surname>Schiffer</surname></persName>
							<affiliation key="aff0">
								<orgName type="laboratory">Mobile Autonomous Systems and Cognitive Robotics</orgName>
								<orgName type="institution">Aachen University of Applied Sciences</orgName>
								<address>
									<postCode>52066</postCode>
									<settlement>Aachen</settlement>
									<country key="DE">Germany</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Alexander</forename><surname>Ferrein</surname></persName>
							<affiliation key="aff0">
								<orgName type="laboratory">Mobile Autonomous Systems and Cognitive Robotics</orgName>
								<orgName type="institution">Aachen University of Applied Sciences</orgName>
								<address>
									<postCode>52066</postCode>
									<settlement>Aachen</settlement>
									<country key="DE">Germany</country>
								</address>
							</affiliation>
						</author>
						<title level="a" type="main">golog++ : An Integrative System Design</title>
					</analytic>
					<monogr>
						<imprint>
							<date/>
						</imprint>
					</monogr>
					<idno type="MD5">E938632CEFCC56E9014BC145F01C6641</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2023-03-24T09:51+0000">
					<desc>GROBID - A machine learning software for extracting information from scholarly documents</desc>
					<ref target="https://github.com/kermitt2/grobid"/>
				</application>
			</appInfo>
		</encodingDesc>
		<profileDesc>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>Golog is a language family with great untapped potential. We argue that it could become a practical and widely usable high-level control language, if only it had an implementation that is usable in a production environment. In this paper, we do not specify another Golog interpreter, but an extensible C++ framework that defines a coherent grammar, developer tool support, internal/external consistency checking with clean error handling, and a simple, portable platform interface. The framework specifically does not implement language semantics. For this purpose we can simply hook into any of the many existing implementations that do very well in implementing language semantics, but fall short in regards to interfacing, portability, usability and practicality in general.</p></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="en">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Introduction</head><p>As of 2018, we can safely say that the Golog <ref type="bibr" target="#b10">[11]</ref> language family is still far from realizing its potential as a practical high-level robot control language. Theoretically, the idea of freely interleaving planning with traditional imperative programming should be at the core of how complex robot behavior is implemented today, but for practical reasons, most high-level control is still either finite state machines or specialized imperative code.</p><p>The reasons for this are manifold. In an academic context, the criticism is often leveled at Golog's runtime complexity and supposed obsoleteness due to ad-</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>The Status quo and related work</head><p>There is a wealth of different implementations, and although diversity can be a good thing, the Golog family is missing technical coherence beyond the theory. Each implementation sports unique and valuable features, strengths and weaknesses. Documentation (aside from theoretical papers) on any of those is, however, sparse or nonexistent. To even figure out which one might fit a project's requirements, a programmer needs to be educated in formal logic to sift through the pertinent academic literature. Porting features between implementations can be tedious and error-prone since there are no explicit extension points and no internal consistency checks. In fact, most implementations do not even have any external consistency checking: Calling an action whose precondition is unsatisfied, for instance, yields the same result as calling an undefined action. While the former is a perfectly valid programming technique, the latter constitutes a malformed program which could easily be rejected with an explicit error message pinpointing the exact cause of the error. In general, the complete absence of such error handling in most Golog implementations makes debugging a larger codebase impossible within a reasonable time budget.</p><p>All of the Prolog-based implementations also tend to blur the line between the language and its imple-mentation. This issue has been noted before, e.g. by <ref type="bibr" target="#b4">[5]</ref>. Here, we want to emphasize that the Prolog implementation-level is not just sometimes abused for dirty hacks. On the contrary, it is even deliberately exposed as a quasi-legitimate meta-language to encode domain restrictions or to enumerate program elements. While this can certainly be a powerful tool to the expert programmer, it can also make any code unreadable if used irresponsibly. To the language learner, this metalanguage proves a conundrum, precisely because it is also the implementation language (i.e. it is effectively undefined!) and can be used to manipulate anything, including the language semantics.</p><p>The last major issue that cannot go unmentioned is interfacing with the real world. Usually, it boils down to some Prolog clause like execute ( Action , History ) : -impl ( Action ).</p><p>where impl(Action) is some Prolog code that takes care of triggering the real action, e.g. in the behavioral layer of some robotics framework. One notable exception to this otherwise minimalistic approach is IndiGolog <ref type="bibr" target="#b0">[1]</ref>, which comes with a more elaborate interfacing called the Environment Manager. Its use case is however for one IndiGolog agent to control N disparate execution environments via TCP/IP. Today, this is obsoleted by robotics frameworks that provide a coherent, component-based view on a robot <ref type="bibr" target="#b14">[15,</ref><ref type="bibr" target="#b13">14]</ref>. Such frameworks typically offer network-transparent component APIs <ref type="bibr" target="#b15">[16]</ref>, so that Indigolog's 1 : N over TCP capability just adds unnecessary complexity, on top of the cruft of embedding Prolog on the remote end to basically just unmarshal a TCP packet into an action call.</p><p>In general, we can see that the interfacing logic of most Golog implementations doesn't go any further than the execution system specified by <ref type="bibr" target="#b5">[6]</ref>. For N robot platforms and M Golog implementations, N × M platform interfaces need to be written since none of the interfacing code is portable between either robotics frameworks or Golog implementations.</p><p>All of these problems combined keep Golog from gaining a critical mass of supporters that could sustain a community that is interested in a good implementation.</p><p>Outside of the Golog community, we see more diverse approaches to high-level interfacing. The Semantic Robot Description Language (SRDL) <ref type="bibr" target="#b9">[10]</ref> implements a framework that describes a robot platform with its components, and how they can be used to realize certain actions. As such, it serves a different purpose, namely mapping an abstract action concept to a realization strategy on a particular robot platform. To the framework we envision here, actions are opaque units, so a system like SRDL could be used as an action execution backend. PRS/OpenPRS <ref type="bibr" target="#b8">[9]</ref> and the ecosystem around them are worth noting because they also serve the purpose of a high-level control language, but found much wider use than any Golog dialect. However *PRS does not set itself apart through better theoretical foundations or through greater expressivity. The issue where *PRS clearly has the lead on any Golog dialect is usability, developer support, integration, i.e. tool support in general.</p><p>The same applies to the C-Language Integrated Programming System <ref type="bibr" target="#b17">[18,</ref><ref type="bibr">CLIPS,</ref><ref type="bibr">cf.]</ref>. From a theoretical view, the language should be less expressive and less practical for high-level control application than Golog. But nonetheless, it is used much more widely<ref type="foot" target="#foot_0">1</ref> . While some of CLIPS' lead on Golog could be explained by the more general, rule-based language paradigm, its clear advantages are still a coherent language specification and well-designed, stable C/C++ bindings.</p><p>It is not like Golog's potential had not been widely noticed. It played a prominent part in the Semantic Web hype (cf. e.g. <ref type="bibr" target="#b11">[12]</ref> with thousands of citations), and it has been used for high-level control of soccer playing robots <ref type="bibr" target="#b2">[3]</ref> as well as for domestic service robots <ref type="bibr" target="#b16">[17]</ref>. However unlike OWL <ref type="bibr" target="#b6">[7]</ref>, it never made the leap out of the academic laboratories. Again, observe how OWL is supported by a rich set of interoperable tools that help with visualization, error checking and debugging, while Golog is not.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>How to fix it</head><p>We can summarize the issues outlined above as a general lack of tool support and usability which makes Golog infeasible as a practical high-level control language. So what features should an implementation have to make it useful in actual robotics scenarios? Important groundwork on this question has been done by <ref type="bibr" target="#b4">[5]</ref>. Here, we want to expand on that while shifting the focus towards a more condensed and flexible architecture.</p><p>First of all, we have to differentiate two major user roles: The language user (e.g. an application developer), and the language developer (e.g. a maintainer or an extension developer). The non-functional requirements that follow are relevant to these roles in varying degrees. The requirements Q1 through Q4 follow directly from general guidelines of usability, as described e.g. by <ref type="bibr" target="#b1">[2]</ref>. They apply mainly to the role of the language user. Q5 to Q8 on the other hand are most relevant to the language developer, and they correspond directly to the fundamentals of software engineering.</p><p>Non-functional requirements Q1 Familiarity Ensure that commonly known language constructs do what the programmer intuitively expects.</p><p>Q2 Readability Be syntactically "easy on the eye", i.e. let the visual structure reflect the syntactic structure (to help with skimming code).</p><p>Q3 Learnability Actively support the user in developing an understanding of the language's syntax and semantics. Make errors traceable to their cause, give a clear and specific hint at what is wrong.</p><p>Q4 Visibility Support implementation of visual editing frontends, i.e. code browsing, semantic code highlighting and interactive debugging.</p><p>Q5 Extensibility Define a clear path to introducing new language features and robot interfaces while ensuring internal consistency as well as possible.</p><p>Q6 Minimalism Don't bloat. Don't reinvent the wheel. Implement what is missing, re-use good code. Use minimal indirection, especially at runtime.</p><p>Q7 Separation of concerns Eliminate internal dependencies where possible. Concentrate external dependencies in few, well-specified interfaces.</p><p>Q8 Maintainability Keep external interfaces compatible. Be OpenSource. Be contributor friendly through good nomenclature, readable code and concise, instructive documentation.</p><p>The YAGI interpreter <ref type="bibr" target="#b4">[5]</ref> went a long way towards Q1, Q2 and Q3 by defining a specialized language syntax and implementing it in a proper parser. Q5 was considered in regard to robot interfaces, but in regard to the language itself, the focus was on specifying and implementing the full language semantics, effectively spawning yet another golog dialect (hence the name). This of course conflicts with Q6. Thought was also put into Q7 and Q8, mainly by employing a clean coding style and using appropriate design patterns.</p><p>We have to embrace the fact that the majority of Golog-related research deals with semantic variants and extensions. Another significant push in expressive power can be expected from the convergence of machine learning with knowledge-based systems. So what we need at this time is not another Golog implementation, but a language design and interfacing framework that puts the main emphasis on extensibility and practicality. With that, the resulting functional requirements are significantly slimmed down in comparison to <ref type="bibr" target="#b4">[5]</ref>:</p><p>Functional requirements F1 Parse Golog programs written in a specifically designed syntax.</p><p>F2 Represent the parsed program in a concise, typesafe object model. Reflect the type safety in all extension points and in the parser.</p><p>F3 Run the program represented by the object model, re-using as much code from the existing implementations as possible.</p><p>F4 Execute actions found by running the program on any robot or simulation environment.</p><p>F5 Map sensors to exogenous actions/events as specified by the program.</p><p>F6 Monitor action execution to support failure handling and self-maintenance.</p><p>So here, we deliberately do not specify language semantics since that is exactly what we want to keep extensible. What do need is a coherent interfacing framework that takes care of everything other than language semantics, namely the functional requirements F1 to F6, in a manner that satisfies the non-functional requirements Q1 through Q8. In general, all of the nonfunctional requirements should be applied to all of the functional requirements to varying degrees. Q7 Separation of concerns and Q8 Maintainability apply to the system as a whole and are thus equally important to all of the functional requirements.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>The golog++ interfacing framework</head><p>From the functional requirements, we can derive three global system concerns: Representation of the Golog program (including parsing), static and runtime semantics, and acting/sensing e.g. on a physical robot platform. They are represented in Figure <ref type="figure" target="#fig_0">1</ref> as dashed areas. Since we want to be extensible both in the platform interface and in the language semantics, these main concerns are linked together through interfaces that make a compromise between generality and strictness.</p><p>Other than in YAGI, for instance, the parser does not instantiate an auto-generated syntax tree that contains unnecessary syntactic detail, but a concise, handdesigned class model (the metamodel component in Figure <ref type="figure" target="#fig_0">1</ref>). The parser is written in templated C++, so the metamodel is usable and enforced in the grammar definition as well. An instance of the metamodel represents the basic action theory and the procedural code that together form a Golog domain/program.</p><p>Restrictions in the metamodel apply particularly to the extensible type model, syntactic constraints that follow from expression types, referential integrity and extension consistency. It conforms to the following (tentative and incomplete) specification:</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Representation concern (language metamodel)</head><p>The golog++ metamodel encompasses two sets of classes: The static program representation, and the runtime state. Elements of the static program representation are classes that can form a BAT (like Fluent, Action, EffectAxiom), procedural code (like Function, Pick, Search, Conditional, etc.), and formula constituents like Conjunction, Negation, Quantification and so on. Of the runtime state representation, only the Transition interface is shown in Figure <ref type="figure" target="#fig_0">1</ref>, since it links together the three main system concerns. Others, such as the History, might not even need explicit representation in all implementations.</p><p>Declarations and definitions of functions/procedures, actions and fluents are Globals (cf. Figure <ref type="figure" target="#fig_1">3</ref>, only actions and fluents shown), which means that by themselves they are toplevel entities and cannot be constituents of another expression. All other program References can refer to any Variable or Global, and they inherit from a type alias exposed by their target class that determines what type of expression a reference to that class will be. So while Variables and Globals themselves are not constituent expressions, References to them are. <ref type="foot" target="#foot_2">2</ref>Certain expressions by definition have a different type than their constituents. For example poss(ρ) and do(ρ) are both boolean expressions for a (void-valued) action or procedure ρ. The ternary expression φ 1 ?φ 2 :</p><formula xml:id="formula_0">$fluent loc ( $x ) { initially : ( b ) = table , ( a ) = b } action stack ( $x , $y ) { precondition : $x != $y //</formula><formula xml:id="formula_1">φ 3 has the type (T (φ 3 ) = T (φ 2 )), if T (φ 1 ) = Boolean.</formula><p>For the sake of rigidity and clarity, there is no implicit type conversion, e.g. comparisons can only be made between identical types and the result is always a boolean value. Every complex formula has the type of all its parts. Since all type-dependent code (including the parser) is templated, the restrictions specified above are enforced by the C++ compiler, even within the grammar definition. Implementing a new expression type in the metamodel automatically instantiates all needed templates where possible. Where manual template specialization is required, it is enforced by the C++ compiler.</p><p>Scopes are also represented explicitly in the static metamodel. Each Scope holds a reference to its parent scope, and it can resolve any symbol that is contained in itself or in one of its parents.</p><p>The parser reads a program in golog++ syntax (like the example in Figure <ref type="figure">2</ref>) and instantiates these metamodel classes to form a graph that represents the program as an interconnected C++ object structure. The code example in Figure <ref type="figure">2</ref> would (among others) produce an instance of the Action class called "stack", which accepts two symbol-valued arguments. As precondition, an Action can accept any BooleanExpression, which in this case would be an instance of the Conjunction class, which is again made up of Comparisons and a Quantification. Via the nesting of constituents, the program's object representation thus forms a syntax tree. References like the calls to the goal() function and to the stack($x, $y) action in the main program can interconnect the objects across the syntactic tree's branches, thus forming a (possibly cyclical) graph that represents the program's referential (call) structure. Each expression in a program is represented by a unique object, and none of these objects are copyable since their exact place within the syntactic tree is part of their identity.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Semantics concern</head><p>Every language element in the metamodel owns a specific implementation of the Semantics interface that is attached after a program's object representation is fully constructed. The core interfaces (i.e. all shown in Figure <ref type="figure" target="#fig_0">1</ref> and the entire metamodel ) do not make any assumptions about how the Semantics interface is realized. To give a program its semantics (i.e. to make it executable), the ExecutionContext recurses twice along the syntax tree of all Global s and of the main procedure. On the first recursion, every program element is visited by a factory (leveraging runtime polymorphism) that assigs a unique instance of a specific Semantics implementation to it. On the second recursion run, the ExecutionContext delegates to a virtual method in its concrete implementation that must use each element's Semantics to prepare it for execution (e.g. by compiling, initializing runtime state, etc).</p><p>So for the fluent declaration loc($x) in Fig. <ref type="figure">2</ref>, the ReadylogSemantics (cf. Fig. <ref type="figure" target="#fig_0">1</ref>) would produce the following Prolog clause:</p><formula xml:id="formula_2">prim_fluent ( loc ( X )) : -member (X , [a , b ]).</formula><p>Here, the argument variable X and the domain symbols a, b and table are each constituents of their own, so the fluent's semantics delegates to their semantics for producing the respective Prolog terms.</p><p>After compilation, all Semantics implementations must be in a state that allows the ExecutionContext to test the main program for the next Transition and for the final state. These methods are also specified by the ExecutionContext and realized by its implementation. The EclipseExecutionContext shown in Figure <ref type="figure" target="#fig_0">1</ref> for example embeds an eclipse-clp interpreter, loads ReadyLog <ref type="bibr" target="#b3">[4]</ref> and uses its trans/4 and final/2 predicates to implement runtime. A Transition created by an ExecutionContext implementation is a parameterized Action. When a legal Transition is found, it is passed to the PlatformBackend for execution.</p><p>The ExecutionContext also provides access to Exo-gEvent objects that are created from sensor data as well as from state changes in platform components or in action execution. An ExecutionContext implementation must consume these events and apply them to the runtime state implementation of the current golog++ program (usually by incorporating them into the history).</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Acting/sensing concern</head><p>The PlatformBackend accepts a Transition object, and its implementor must use that to trigger an action on some target platform. A PlatformBackend implementation must also select and retrieve the sensor data and other runtime state that is needed to instantiate the ExogEvent objects as specified by the golog++ program. A more precise specification of this interface is subject to currently ongoing work.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Discussion and rationale</head><p>This specification and its current implementation already satisfy large portions of the functional and nonfunctional requirements. Q1 Familiarity is mostly a given since the procedural semantics of Golog are already aligned with traditional imperative programming. Employing a familiar C-like syntax then makes the imperative Golog code immediately recognizable to all programmers that know e.g. C/C++, Java or JavaScript. A C-like syntax has been chosen over the Pascal-like variant employed in YAGI since it is more widely used, and we expect better visual ergonomics by using punctuation (i.e. curly braces) as block delimiters. Q2 Readability is further helped by using a C++ class-like notation for Golog action definitions (again inspired by YAGI), with "precondition:" and "effect:" as section markers within the action's definition block. However we have dispensed with YAGI's way of notating a fluent as a 0-arity functional symbol that denotes a set of n-tuples. Instead, we returned to the classical SitCalc-like notation with n-ary functional or relational fluents, which should be more recognizable to developers with e.g. a PDDL background.</p><p>The goal of Q3 Learnability is of course closely related to Q1 Familiarity, Q2 Readability and Q4 Visibility. A typical Golog developer may likely be proficient in other languages, but given its currently limited pervasion, we have to assume that he/she is unfamiliar with the Situation Calculus or any other Golog dialect. The most important tools to support Q3 are type safety and interactive debugging (i.e. single-stepping a live program with viewable runtime state).</p><p>Support for interactive debugging is limited in the current ExecutionContext implementation since the interpretation of all procedural code is encapsulated within the toplevel trans/4 call to the ReadyLog interpreter. To achieve full support for interactively single-stepping procedural code, an ExecutionContext implementation would have to handle each procedural statement individually. An alternative would be to change the implementations of all language elements to not assert/1 or compile/1 plain Prolog predicates representing the Golog program, but to register as C++ external predicates that implement appropriate debugging hooks.</p><p>Type safety is important to support Q3 Learnability since knowing the type of an expression allows for a much more descriptive code model. In particular, references can be resolved statically, which allows for implementation of proper code browsing (Q4 Visibility). Using the type of an expression to restrict the grammar allows us to catch many more cases of accidental misuse of symbol references and other expressions.</p><p>Q5 Extensibility, Q6 Minimalism, Q7 Separation of concerns and Q8 Maintainability are again a set of non-functional requirements that tend to go hand in hand. Together, they form the technical foundation for continued proliferation of any piece of software. In golog++, we achieve Minimalism by dealing purely with the three main concerns of representation, semantics and acting/sensing. It is important to note that only the representation concern (parsing into an instance of the metamodel) has a stand-alone implementation, i.e. it is the only one that does not depend on some external implementation of abstract interfaces to run. The metamodel's static and runtime state representation forms the (singular!) interface through which the semantics and acting/sensing concerns interact. Consequentially, Q7 Separation of concerns in golog++ means that anything concerned with semantics or acting/sensing can ever only depend on the metamodel, while the metamodel can ever only depend on the abstract acting/sensing and semantics interfaces.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Conclusion and outlook</head><p>The golog++ language grammar will be a more dedicated subject in future work when the syntactic extension points are developed. The mid-term vision is to support namespacing and language profiles similar to OWL <ref type="bibr" target="#b12">[13]</ref>.</p><p>One use case of the golog++ framework is the Con-TrAkt project, where the Golog language will be extended to support platform self-monitoring and autonomous, platform-aware failure recovery. To that end, a language specification for platform constraint modeling is in development. Its goal is to allow domain-independent encoding of platform details so that domain modellers don't have to worry about platform quirks <ref type="bibr" target="#b7">[8]</ref>. It will make use of extension points in the acting/sensing concern (i.e. the abstract platform interface) which are yet to be specified. It will also require syntactic extensions and possibly an external constraint solver to be embedded via an Execution-Context implementation.</p><p>The design goals of the framework presented here are flexibility, extensibility, usability and ease of deployment. Its most important feature is to decouple Golog reasoning, program representation and platform interfacing. Consequentially, to serve N platforms with M different language semantics, we simply need N platform interfaces and M semantics, instead of N × M leaky abstractions like before. Decoupling also allows us to use the right tool for the job: Modern, templated C++ for metamodeling, interfacing and outer control flow, and Prolog (or other AIaffine languages) for the implementation of language semantics and reasoning.</p><p>The complete source code of the golog++ framework is freely available at https://github.com/ MASKOR/gologpp.git.</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head>Figure 1 :</head><label>1</label><figDesc>Figure 1: High-level architectural view of the golog++ framework with exemplary ROS/ReadyLog backends. Component and interface boundaries imply tion of concerns and independent extensibility. Core golog++ interfaces and components have a shaded fill. Exchangeable backend components have a white fill. The dashed/colored areas represent the three system concerns.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_1"><head>Figure 3 :</head><label>3</label><figDesc>Figure 3: Simplified UML class diagram showing a small fragment of the golog++ language metamodel. Most class properties, operations and connectors are omitted to focus just on how the Action, EffectAxiom, Fluent and Reference classes relate to the expression types.</figDesc></figure>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="1" xml:id="foot_0">See also 418 questions tagged "clips" on stackoverflow (stackoverflow.com/questions/tagged/clips) vs.</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="2" xml:id="foot_1">questions tagged "golog" (stackoverflow.com/questions/tagged/golog).</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="2" xml:id="foot_2">cf. Figure</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="3" xml:id="foot_3">. Note that the UML standard has no syntax for describing this pattern, so we emulate it by representing TargetT::ExprT as a separate interface that can be either BooleanExpression or SymbolicExpression.</note>
		</body>
		<back>

			<div type="acknowledgement">
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Acknowledgments</head><p>This work was supported by the German National Science Foundation (DFG) under grant number FE 1077/4-1.</p></div>
			</div>

			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<analytic>
		<title level="a" type="main">Indigolog: A high-level programming language for embedded reasoning agents</title>
		<author>
			<persName><forename type="first">G</forename><forename type="middle">De</forename><surname>Giacomo</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Y</forename><surname>Lespérance</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><forename type="middle">J</forename><surname>Levesque</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Sardina</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Multi-Agent Programming</title>
				<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2009">2009</date>
			<biblScope unit="page" from="31" to="72" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<analytic>
		<title level="a" type="main">Design rules</title>
		<author>
			<persName><forename type="first">A</forename><surname>Dix</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Finlay</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><forename type="middle">D</forename><surname>Abowd</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Beale</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Human-Computer Interaction</title>
				<imprint>
			<publisher>Pearson Education Limited</publisher>
			<date type="published" when="2004">2004</date>
			<biblScope unit="volume">7</biblScope>
			<biblScope unit="page" from="258" to="288" />
		</imprint>
	</monogr>
	<note>3rd edition</note>
</biblStruct>

<biblStruct xml:id="b2">
	<analytic>
		<title level="a" type="main">Using golog for deliberation and team coordination in robotic soccer</title>
		<author>
			<persName><forename type="first">A</forename><surname>Ferrein</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Fritz</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Lakemeyer</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">KI</title>
		<imprint>
			<biblScope unit="volume">19</biblScope>
			<biblScope unit="issue">1</biblScope>
			<biblScope unit="page">24</biblScope>
			<date type="published" when="2005">2005</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<analytic>
		<title level="a" type="main">Logic-based robot control in highly dynamic domains</title>
		<author>
			<persName><forename type="first">A</forename><surname>Ferrein</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Lakemeyer</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Robotics and Autonomous Systems</title>
		<imprint>
			<biblScope unit="volume">56</biblScope>
			<biblScope unit="issue">11</biblScope>
			<biblScope unit="page" from="980" to="991" />
			<date type="published" when="2008">2008</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<analytic>
		<title level="a" type="main">Actionbased imperative programming with YAGI</title>
		<author>
			<persName><forename type="first">A</forename><surname>Ferrein</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Steinbauer</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Vassos</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 8th International Conference on Cognitive Robotics</title>
				<meeting>the 8th International Conference on Cognitive Robotics</meeting>
		<imprint>
			<publisher>AAAI Press</publisher>
			<date type="published" when="2012">2012</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<analytic>
		<title level="a" type="main">GOLEX -bridging the gap between logic (GOLOG) and a real robot</title>
		<author>
			<persName><forename type="first">D</forename><surname>Hähnel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><surname>Burgard</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Lakemeyer</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">KI-98: Advances in Artificial Intelligence</title>
				<editor>
			<persName><forename type="first">O</forename><surname>Herzog</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">A</forename><surname>Günter</surname></persName>
		</editor>
		<meeting><address><addrLine>Berlin, Heidelberg; Berlin Heidelberg</addrLine></address></meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="1998">1998</date>
			<biblScope unit="page" from="165" to="176" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b6">
	<analytic>
		<title level="a" type="main">OWL 2 web ontology language primer</title>
		<author>
			<persName><forename type="first">P</forename><surname>Hitzler</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Krötzsch</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Parsia</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><forename type="middle">F</forename><surname>Patel-Schneider</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Rudolph</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">W3C recommendation</title>
		<imprint>
			<biblScope unit="volume">27</biblScope>
			<biblScope unit="issue">1</biblScope>
			<biblScope unit="page">123</biblScope>
			<date type="published" when="2009">2009</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b7">
	<analytic>
		<title level="a" type="main">Constraint-based online transformation of abstract plans into executable robot actions</title>
		<author>
			<persName><forename type="first">T</forename><surname>Hofmann</surname></persName>
		</author>
		<author>
			<persName><forename type="first">V</forename><surname>Mataré</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Schiffer</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Ferrein</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Lakemeyer</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">AAAI Spring Symposium 2018 on Integrating Representation, Reasoning, Learning, and Execution for Goal Directed Autonomy</title>
				<meeting><address><addrLine>Stanford, CA, USA</addrLine></address></meeting>
		<imprint>
			<date type="published" when="2018">2018</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b8">
	<analytic>
		<title level="a" type="main">PRS: A high level supervision and control language for autonomous mobile robots</title>
		<author>
			<persName><forename type="first">F</forename><forename type="middle">F</forename><surname>Ingrand</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Chatila</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Alami</surname></persName>
		</author>
		<author>
			<persName><forename type="first">F</forename><surname>Robert</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">IEEE International Conference on Robotics and Automation</title>
				<imprint>
			<date type="published" when="1996">1996</date>
			<biblScope unit="volume">1</biblScope>
			<biblScope unit="page" from="43" to="49" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b9">
	<analytic>
		<title level="a" type="main">Towards semantic robot description languages</title>
		<author>
			<persName><forename type="first">L</forename><surname>Kunze</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Roehm</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Beetz</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">IEEE International Conference on Robotics and Automation</title>
				<imprint>
			<date type="published" when="2011">2011</date>
			<biblScope unit="page" from="5589" to="5595" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b10">
	<analytic>
		<title level="a" type="main">GOLOG: A Logic Programming Language for Dynamic Domains</title>
		<author>
			<persName><forename type="first">H</forename><forename type="middle">J</forename><surname>Levesque</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Reiter</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Y</forename><surname>Lespérance</surname></persName>
		</author>
		<author>
			<persName><forename type="first">F</forename><surname>Lin</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><forename type="middle">B</forename><surname>Scherl</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Journal of Logic Programming</title>
		<imprint>
			<biblScope unit="volume">31</biblScope>
			<biblScope unit="issue">1-3</biblScope>
			<biblScope unit="page" from="59" to="84" />
			<date type="published" when="1997-06">April-June 1997</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b11">
	<analytic>
		<title level="a" type="main">Semantic web services</title>
		<author>
			<persName><forename type="first">S</forename><forename type="middle">A</forename><surname>Mcilraith</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><forename type="middle">C</forename><surname>Son</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Zeng</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">IEEE Intelligent Systems</title>
		<imprint>
			<biblScope unit="volume">16</biblScope>
			<biblScope unit="issue">2</biblScope>
			<biblScope unit="page" from="46" to="53" />
			<date type="published" when="2001-03">Mar 2001</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b12">
	<analytic>
		<title level="a" type="main">OWL 2 web ontology language profiles</title>
		<author>
			<persName><forename type="first">B</forename><surname>Motik</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><forename type="middle">C</forename><surname>Grau</surname></persName>
		</author>
		<author>
			<persName><forename type="first">I</forename><surname>Horrocks</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Z</forename><surname>Wu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Fokoue</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Lutz</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">W3C recommendation</title>
		<imprint>
			<biblScope unit="volume">27</biblScope>
			<biblScope unit="page">61</biblScope>
			<date type="published" when="2009">2009</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b13">
	<analytic>
		<title level="a" type="main">Design principles of the component-based robot software framework fawkes</title>
		<author>
			<persName><forename type="first">T</forename><surname>Niemueller</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Ferrein</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Beck</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Lakemeyer</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">International Conference on Simulation, Modeling, and Programming for Autonomous Robots</title>
				<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2010">2010</date>
			<biblScope unit="page" from="300" to="311" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b14">
	<analytic>
		<title level="a" type="main">ROS: an open-source robot operating system</title>
		<author>
			<persName><forename type="first">M</forename><surname>Quigley</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><surname>Conley</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Gerkey</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Faust</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Foote</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Leibs</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Wheeler</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><forename type="middle">Y</forename><surname>Ng</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">ICRA workshop on open source software</title>
				<meeting><address><addrLine>Kobe, Japan</addrLine></address></meeting>
		<imprint>
			<date type="published" when="2009">2009</date>
			<biblScope unit="volume">3</biblScope>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b15">
	<analytic>
		<title level="a" type="main">An overview on framework design for autonomous robots</title>
		<author>
			<persName><forename type="first">M</forename><surname>Reichardt</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Föhst</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><surname>Berns</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">it-Information Technology</title>
		<imprint>
			<biblScope unit="volume">57</biblScope>
			<biblScope unit="issue">2</biblScope>
			<biblScope unit="page" from="75" to="84" />
			<date type="published" when="2015">2015</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b16">
	<analytic>
		<title level="a" type="main">Caesar -An Intelligent Domestic Service Robot</title>
		<author>
			<persName><forename type="first">S</forename><surname>Schiffer</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Ferrein</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Lakemeyer</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Artificial Intelligence in Robotics: Sensing, Representation and Action)</title>
				<imprint>
			<date type="published" when="2012">2012</date>
			<biblScope unit="volume">23</biblScope>
			<biblScope unit="page" from="259" to="273" />
		</imprint>
	</monogr>
	<note>Special Issue on</note>
</biblStruct>

<biblStruct xml:id="b17">
	<analytic>
		<title level="a" type="main">CLIPS -a powerful development and delivery expert system tool</title>
		<author>
			<persName><forename type="first">R</forename><forename type="middle">M</forename><surname>Wygant</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Computers &amp; industrial engineering</title>
		<imprint>
			<biblScope unit="volume">17</biblScope>
			<biblScope unit="issue">1-4</biblScope>
			<biblScope unit="page" from="546" to="549" />
			<date type="published" when="1989">1989</date>
		</imprint>
	</monogr>
</biblStruct>

				</listBibl>
			</div>
		</back>
	</text>
</TEI>
