<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Reflective Systems Need Models at Run Time</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Christopher Landauer</string-name>
          <email>topcycal@gmail.com</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Kirstie L. Bellman</string-name>
          <email>bellmanhome@yahoo.com</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Topcy House Consulting</institution>
          ,
          <addr-line>Thousand Oaks, California</addr-line>
          ,
          <country country="US">USA</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>-We think that run-time models are a minimum necessity for significant self-awareness in Computationally Reflective systems. For us, a Computationally Reflective system is not only “self-aware” (it can collect information about its own behavior and that of its environment), but also “self-adaptive” (it can reason about that behavior and make adjustments that change it). Moreover, when the system is also “self-modeling”, that is, defined by the models it creates and maintains, then it can modify those models to better align its behavior with changes in its operating environment. In this paper, we show that building and managing these models presents some difficulties that are largely independent of the modeling mechanisms used. We also provide some mechanisms for coping with these difficulties, from a kind of “Behavior Mining” and “Model Deficiency Analysis” for current models to “Dynamic Knowledge Management”, of which major components are “Knowledge Refactoring” and “Constructive Forgetting”. None of these methods eliminate the problem, but each alleviates some of the difficult aspects of the problem, which allows bigger and more complex systems to exist in more complex and diverse environment for longer periods of time.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>I. INTRODUCTION</p>
      <p>
        We argue that run-time models are a minimum necessity
for significant and effective self-awareness in Computationally
Reflective systems. A Computationally Reflective system [
        <xref ref-type="bibr" rid="ref28">28</xref>
        ]
[
        <xref ref-type="bibr" rid="ref29">29</xref>
        ] [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] must not only be“self-aware” (it can collect and
organize information about its own behavior and that of its
environment), but also “self-adaptive” (it can reason about that
behavior and make adjustments that change it). We are
primarily interested in systems that are also “self-modeling”, which
extends the notion to systems that construct and maintain their
own models, and use those to generate their behavior. We think
that such systems must be able to change not only the models
but also the modeling mechanisms they use at run-time, not
just adapt parameters or switch between operating modes.
      </p>
      <p>A Computationally Reflective system can collect
information about its own structure and behavior, and it can also
examine that information to decide how to modify the behavior,
retain and analyze it over extended time periods, adjust its
decision processes to “optimize” it towards selected success
criteria, and even change the success criteria to respond to
changes detected in the environment (which may also include
newly imposed purposes or goals).</p>
      <p>In this paper, we explore some seemingly far-fetched
theoretical notions, show that they are eminently likely in
selfmodeling systems, and provide some suggestions for
alleviating their effects.</p>
    </sec>
    <sec id="sec-2">
      <title>A. Self-Modeling Systems</title>
      <p>
        Self-modeling systems [
        <xref ref-type="bibr" rid="ref24">24</xref>
        ] are self-aware systems that
have the capability to build and analyze models of their own
behavior, and use those models to produce as much of that
behavior as the designers intend. We have already shown
[
        <xref ref-type="bibr" rid="ref20">20</xref>
        ] [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ] that we can build systems for which all of the
system’s components are models, including the model
interpreter. While these Computationally Reflective systems are
usually originally deployed with an initial set of models and
model construction guidelines, their main self-modeling work
is to adjust those models according to their observations of
their operational external environment and their own internal
environment, and produce their behavior by interpreting the
models that they create. An engineering decision to be made
by the developers is to decide how much of these behavior
generating models are fixed and which ones can be variable
(and the boundary can often usefully be changed at run time,
depending on the situation).
      </p>
      <p>
        Because these models are intended to be interpreted by
the system, the common “4+1” view [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] is not entirely
appropriate: we must mainly be concerned with process and
interconnection models (behavior and interaction), and not
much with developmental or use case views. Moreover, the
system needs to build and maintain models of its operational
environment also, not just its own structure.
      </p>
      <p>The questions then become: how does a system
learn about its own structure and behavior?
make decisions about its own structure and behavior?
decide on changes to its own structure and behavior?
record and use the decisions and their consequences over
time?</p>
      <p>For us, all of these are about models or involve or require
models. The corresponding engineering design problems are:
how extensive these reflective mechanisms need to be for
a given application,
how much we want the system itself to construct and
modify the models, and
how much of the system behavior is to be driven by the
models.</p>
      <p>Models cost time for development and execution, which
makes this set of engineering problems central to the success
of self-adaptive systems in complex environments. If we make
this extensive use of models, we are brought to the notion of
using the models to define the behavior.</p>
      <p>These are self-modeling systems.</p>
    </sec>
    <sec id="sec-3">
      <title>B. Representational Issues</title>
      <p>In our prior work on self-modeling systems, we have
identified two fundamental representational issues that must
be addressed by any self-aware system of this kind:
1) the need for identifying repeated patterns and inventing
new symbols for them, to reduce the computational load;
2) the need for occasionally re-inventing the
representational mechanism itself, to avoid the inevitable increase
in rigidity in a complex knowledge-intensive system.</p>
      <p>
        These are both issues of Computational Semiotics [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ]
[
        <xref ref-type="bibr" rid="ref21">21</xref>
        ], since they involve the use and meaning of symbols
in computing systems. The first issue is a generalization
of some well-known optimization techniques, analogous to
training, that replace the computation of appropriate responses
to recognition of the appropriate situations (which is usually
much faster). The second issue follows from our “Get Stuck”
Theorems [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ] [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ], which essentially show that any
increasing knowledge structure will eventually become unwieldy and
extremely difficult to extend (even if humans are putting in
the new knowledge, so it is not a computability problem). The
theorems are formalizations of the long experience of failure
in building extensible languages, systems, and programs.
      </p>
      <p>These theorems are not insurmountable, but they do pose a
serious design consideration. In addition, it can be seen that
they are inevitable in any systems that build increasingly
finegrained models. That means that they are not unlikely; they
must be addressed.</p>
      <p>Helpfully, there are several processes that can be used to
alleviate their effects to some extent. We think that these
helpful processes are necessary in any case for a self-modeling
system to operate in a complex environment for any non-trivial
amount of time.</p>
      <p>“Behavior Mining” is the process of recording and
analyzing the system’s own behavior to make descriptive or
prescriptive models.</p>
      <p>“Model Deficiency Analysis” is the process of evaluating
the effectiveness of a model (not just success and failure,
but also performance, resource implications, and interference
with other models), and analyzing where improvements can
be made.</p>
      <p>“Knowledge Refactoring” is the process of rearranging the
hierarchical knowledge structures (e.g., ontologies) to reduce
dependencies, duplication and unused elements.</p>
      <p>“Constructive Forgetting” is the process of simplifying
knowledge structures by conflating and even removing some
terms and relationships.</p>
      <p>Each of these will be discussed in the rest of the paper.</p>
      <p>None of these methods entirely avoids the problems
presented by the theorems, of course; the theorems are still true.
They do, however, push the bounds farther out, which allows
bigger and more complex systems to exist in more complex
and diverse environments for longer periods of time.
perform</p>
      <p>actions
of
make</p>
      <p>observations</p>
    </sec>
    <sec id="sec-4">
      <title>C. Structure of Paper</title>
      <p>The rest of this paper is organized as follows. In the next
Section II, we describe more of the structure of self-modeling
systems.</p>
      <p>In Section III, we describe our own approach to constructing
self-modeling systems, using activity loops driven by
knowledge bases.</p>
      <p>In Section IV, we describe some fundamental results from
Computational Semiotics that have relevance to model
building at run time.</p>
      <p>In Section V, we show how some partial approaches can
alleviate the problem of getting stuck, and finally, in
Section VI, we describe some conclusions and prospects for
further development.</p>
      <sec id="sec-4-1">
        <title>II. SELF-MODELING SYSTEMS</title>
        <p>Our goal is to design and build systems that are able to
operate in hazardous or remote environments that cannot be
completely known. The assumption is that they are too far
away or too dynamically variable for a human controller, so
they will need to operate largely autonomously.</p>
        <p>To that end, we want these systems to build models of that
environment, so they can reason about it and their potential
activities. We expect the models to help them interact with
their environment more effectively. Moreover, if we also make
the systems build models of their own behavior, external and
internal, then they can reason about that behavior and its
connection to the environment. This approach to reflective
systems therefore expects the system to use processes that
build and use models of the system’s external environment
and processes, and also its internal environment and processes
(see Figure 1). We have argued that this modeling is an
eenxtveirrnoanlment
of
of
processes</p>
        <p>use
models</p>
        <p>
          build
processes
important enabler for the flexibility required to adjust behavior
to external conditions [
          <xref ref-type="bibr" rid="ref20">20</xref>
          ] [
          <xref ref-type="bibr" rid="ref22">22</xref>
          ].
        </p>
        <p>During the course of their activities, these systems will build
models of common situations and appropriate responses, so
they can subsequently recognize a situation to help decide
on a response more quickly. Then they can separate effective
and ineffective responses, identify environmental or internal
characteristics that distinguish these two classes, and extend
the relevant situation descriptions to include the newly
identified property. Therefore, these systems are in a continual state
of making new distinctions, thereby increasing the knowledge
base size and interconnectivity.</p>
        <p>However, this process cannot continue indefinitely, as we
shall show in Section IV.</p>
        <p>
          We have shown [
          <xref ref-type="bibr" rid="ref24">24</xref>
          ] how to build systems that consist
entirely of models, including the model interpreter. These
systems build models of system behavior (or are provided them
by the designers), and use the model interpreter to execute
them. The “Moby Hack” [
          <xref ref-type="bibr" rid="ref33">33</xref>
          ] [
          <xref ref-type="bibr" rid="ref20">20</xref>
          ] shows how to make this
circular process well-defined. Because it seems unusual, we
have a short explanation here.
        </p>
        <p>We start with the interpreter written in the modeling
language (which does put constraints on how simple the modeling
language can be), and an external program (that will be
used exactly once), written in any convenient language, that
compiles the modeling language into an executable process.
Then any model subsequently produced can be interpreted,
including changes to the interpreter (see Figure 2). Changes
interpreter
model
bootstrap
compiler
interpreter
process
all models</p>
        <p>all processes
to the modeling language are more problematic, and are left
for further studies. In many applications, the interpreter will
not change at run time, simplifying this process somewhat.</p>
        <p>III. OUR APPROACH</p>
        <p>
          To manage the large collection of necessary models, we use
the Wrapping integration infrastructure [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ] [
          <xref ref-type="bibr" rid="ref23">23</xref>
          ], which allows
us enormous flexibility in selecting and employing models. It
was first designed to help study infrastructure decisions. What
follows in this section is a short description of Wrappings,
with its focus on resource management. More details can be
found in the cited references.
        </p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>A. Problem Posing Interpretation</title>
      <p>The Problem Posing Interpretation is a different way to
interpret programs that provides an enormous amount of
flexibility consider in the assignment of semantics to syntax.</p>
      <p>The basic idea is to separate information service requests,
such as function calls, message sends, etc. from information
service providers, such as function and method definitions.
Compilers and interpreters can always tell the difference, so
there is no reason to require them to use the same name (which
is what we usually do).</p>
      <p>That separation immediately allows (and requires) a
mechanism to reconnect requests to providers. This change of
interpretation allows many interesting properties:</p>
      <p>Code reuse without modification;
Delaying language semantics to run-time,
Migration to standards;</p>
      <p>Run-Time flexibility.</p>
      <p>This last property is our interest here.</p>
    </sec>
    <sec id="sec-6">
      <title>B. Wrapping Properties</title>
      <p>Our choice for mapping problems to resources in context is
to use a Knowledge Base that defines the various uses of each
resource in different contexts; it allows different resources to
be used for the same problem in different contexts.</p>
      <p>This is a kind of implicit invocation.</p>
      <p>There are five essential properties of Wrappings:</p>
      <p>ALL parts of the system are resources;
ALL activities in the system are resource applications;
Relevant system state is given by context;</p>
    </sec>
    <sec id="sec-7">
      <title>Wrapping Knowledge Bases (WKBs) contain the map</title>
      <p>pings;
Problem Managers (PMs) interpret the Wrappings to
perform all of the infrastructure and application functions.</p>
    </sec>
    <sec id="sec-8">
      <title>C. Wrapping Processes</title>
      <p>The processes in the Wrapping approach are as important as
the data in the WKBs (it must be remembered that declarative
programs do not DO anything without an interpreter). The PMs
organize the computations and interpret the Wrappings. Two
basic classes of PMs are the Coordination Manager (CM) and
the Study Manager (SM). These two PMs separate the control
loop at the center of our approach into the looping “heartbeat”
that keeps the system moving forward (the Coordination
Manager or CM) from the basic planning steps within the
loop (the Study Manager or SM).</p>
      <p>1) Coordination Manager: The CM is a class of resources
that are analogs of a system’s main program. The simplest one
consists of the following steps:</p>
      <p>Find Context
loop :</p>
      <p>Pose Problem
Study Problem
Present Results</p>
      <p>Collect initial context.</p>
      <p>Select one problem to study.</p>
      <p>Find and use one resource
for this problem.</p>
      <p>Make adjustments to context
(and possibly Wrappings).</p>
      <p>This is the analog of an extremely simple sequential main
program (and also clearly of the classic “read-eval-print” style
of basic LISP interpreter). There is a CM corresponding to any
“main program” style (parallel, cooperative, etc.). Remember
that each of these steps is also a posed problem, using
Wrappings to map them to appropriate resources in context.
As always, each of these steps is a posed problem, using
Wrappings to map them to resources. This is an extremely
simple-minded planner. The main power of Wrappings is that
any improvement in planning processes can be incorporated as
other resources that can address these posed problems. Other
SMs apply all relevant resources in turn until one succeeds,
or accumulate the results of all successful applications, etc..</p>
      <p>The interaction of the two main PMs is shown schematically
in Figure 3, which we find to be a useful mnemonic for which
steps occur when. The interaction of these two processes is the</p>
      <sec id="sec-8-1">
        <title>Find Context</title>
      </sec>
      <sec id="sec-8-2">
        <title>Assimilate Results</title>
        <p>Match Resources
Resolve Resources
Select Resource
Adapt Resource
Advise Poser
Apply Resource
Assess Results
2) Study Manager: The Study Manager is a class of
resources that are designed to address the problem “Study
Problem” (from the CM). It reads and interprets the WKB
(which is described in the next subsection). The simplest one
consists of the following steps:</p>
      </sec>
    </sec>
    <sec id="sec-9">
      <title>D. Wrapping Knowledge Bases</title>
      <p>The WKB contains entries called Wrappings. An individual
Wrapping is a map from a problem specification to a resource
application in context. Its main information components are:</p>
      <sec id="sec-9-1">
        <title>Match Resources</title>
      </sec>
      <sec id="sec-9-2">
        <title>Resolve Resources</title>
      </sec>
      <sec id="sec-9-3">
        <title>Select Resource</title>
      </sec>
      <sec id="sec-9-4">
        <title>Adapt Resource</title>
      </sec>
      <sec id="sec-9-5">
        <title>Advise Poser</title>
      </sec>
      <sec id="sec-9-6">
        <title>Apply Resource</title>
      </sec>
      <sec id="sec-9-7">
        <title>Assess Results</title>
      </sec>
    </sec>
    <sec id="sec-10">
      <title>E. Wrapping Summary</title>
      <p>
        The power of Wrappings comes from the notion that each
of the steps is a posed problem [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ], for which the entire
Wrapping infrastructure is available to identify an appropriate
resource to apply.
      </p>
      <p>It should also be clear that any system with such an explicit
central activity loop (whether or not it is organized in the way
we described) has a ready-made identifier for the events that
it performs. The event labels can be considered as the basic
representational language for modeling behavior.</p>
    </sec>
    <sec id="sec-11">
      <title>F. Use of Wrappings</title>
      <p>The use of Wrappings provides several conceptual
unifications in system design:</p>
      <p>ALL activity is requested as posed problems.</p>
      <p>ALL activity is performed by resources, ALL processing
is resource application.</p>
      <p>ALL activity can be recorded (Advise Poser in SM).</p>
      <p>Wrappings help with some of the organization processes
in self-modeling systems. They do not solve all of the hard
problems, but they do help organize the solutions.</p>
      <p>They allow a system</p>
      <p>
        To manage its collection of models;
To coordinate its activities with other systems.
foundation of our self-modeling systems [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ] [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ].
      </p>
      <p>IV. GETTING STUCK</p>
      <p>As our self-modeling systems, or indeed any systems that
constructs situational models at run time, behave in their
operational environment, the natural tendency for us as designers
is to assume that they will build more detailed models to
make more detailed distinctions among the phenomena they
encounter. This clearly could be a problem, and the following
results show that it is definitely a problem.</p>
      <p>
        The “Get Stuck” Theorems [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ] [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ] show some
fundamental limits on representing knowledge in symbolic structures in
computing systems, in particular, that systems operating in
complex environments will eventually need to change their
own internal representations. These theorems formalize the
decades of observations that have the common theme that
extending existing systems becomes more difficult and
errorprone over time (e.g., Lehman’s laws of software evolution
[
        <xref ref-type="bibr" rid="ref26">26</xref>
        ] [
        <xref ref-type="bibr" rid="ref27">27</xref>
        ] [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] for programs that operate in the real world,
among other informal notes), and in many cases has simply
precluded anything but minor maintenance.
      </p>
      <p>The first theorem is based on the fact that we can count
how many structures of a given size can exist, so representing
behavior in a sufficiently complex environment will eventually
need to use so many expressions that they will become too
large for the system to use either effectively or soon enough.
The second theorem is based on the fact that each new element
in a complex knowledge structure will need to attach to
more of the other elements, and that therefore the practical
constraints on adding new knowledge become more and more
difficult to satisfy.</p>
      <p>
        The first theorem is relatively straightforward to prove. If
the computing system has a fixed finite symbol system (finitely
many basic symbols, finitely many fixed arity combination
rules), then we can count the number of expressions of any
given size, using the well-known mathematical technique of
generating functions [
        <xref ref-type="bibr" rid="ref36">36</xref>
        ]. The point is not that the values
are large or small, it is that there are only finitely many
expressions of any given size. That means, as the system
tries to represent more and more complex phenomena or
relationships, or make more detailed distinctions, it will need
more and more expressions, so they will get larger and larger.
The system will eventually run out of expressions small
enough to process effectively.
      </p>
      <p>Similarly, if we are building and extending a knowledge
base, with references from entities to other entities, then the
interconnection density eventually becomes large enough that
the implications of potential changes take too much time to
analyze. The important point here is that it will happen even
if humans are doing the extensions.</p>
      <p>These two theorems have implications for our computing
systems: they will have to change their representational
mechanisms. In the next Section, we describe some processes that
can at least delay the problem.</p>
      <p>V. GETTING UNSTUCK</p>
      <p>We have shown that if our system is effective at discovering
new distinctions and making more refined models, then it will
eventually “Get Stuck”. In this Section, we describe some
processes that will help alleviate the problem, but not, of
course, eliminate it. The processes are:</p>
      <sec id="sec-11-1">
        <title>Behavior Mining,</title>
        <p>Model Deficiency Analysis,
Dynamic Knowledge Management, and its main
component processes
– Knowledge Refactoring and
– Constructive Forgetting.</p>
        <p>These processes help delay the problem, and we believe that
more such alleviations are necessary.</p>
      </sec>
    </sec>
    <sec id="sec-12">
      <title>A. Behavior Mining</title>
      <p>We use the term “Behavior Mining” for any analysis of
the sequence of events performed by a system (there may of
course be multiple parallel analyses at different resolutions
and / or scopes). The intention is to identify and encapsulate
common sequences, so that they may not need to be computed
separately repeatedly. This is akin to encapsulating sequences
of operations into “macros” to reduce computation (the target
computation is the same, but the decision processes that
construct the sequence are eliminated). The system will invent new
symbols as event labels for these common event sequences,
as well as other recurring structures (repetitions, alternations,
etc.), and use them in a continual analysis.</p>
      <p>
        The technical area of interest for this process is grammatical
inference [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ], which is about discovering
higher-level structure among sequences of relatively low-level
events. For different sets of assumptions about the high-level
structure of these common sequences, different algorithms
can be used to infer the higher-level organization of those
structures. This is an enormous field, and we have included
some references to illustrate some of the different approaches
and theoretical results. One of the theorems is that most
interesting classes of structures cannot be effectively inferred
without having both positive and negative examples [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]
[
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] (see [
        <xref ref-type="bibr" rid="ref25">25</xref>
        ] for a summary of these results).
      </p>
      <p>
        Our Wrapping infrastructure allows for both positive and
negative examples [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ], since it makes available not only the
context and reasons for choosing a particular resource to
perform a computing step, but also the conditions that eliminated
other possible resources. It therefore seems possible that these
systems can infer more complex behavioral structures than
other mechanisms can provide.
      </p>
      <p>
        Once the system has new labels for some collection of
common event structures, it becomes interesting to consider
the possibility that all events can be placed into one of the
identified commonalities (“macros”). When this happens, there
is the possibility of defining the events solely in terms of the
macros. That is, the event succession can be re-expressed in
terms of the new symbols. If the system can actually express
its behavior using these new symbols only, then we write that
the new symbol set is “semiotically closed” [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ] [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ], which
we believe is an essential component of emergence. This line
of reasoning is important, but beyond the scope of this paper.
      </p>
    </sec>
    <sec id="sec-13">
      <title>B. Model Deficiency Analysis</title>
      <p>The processes we collectively call Model Deficiency
Analysis are intended to detect problems with the models in use and
provide suggestions for reducing the problems and improving
the models. The system needs to be able to determine that
a model has a problem, isolate the problem to particular
sections of the model, and determine potential changes that
will improve the model.</p>
      <p>There are three key issues:</p>
      <p>How to monitor and validate the models,
How to decide which model (if any) has failed or
(preferably) is about to fail,</p>
      <p>How to use the failure to improve the model.</p>
      <p>We can view these collected process as one step in a learning
mechanism that is intended to improve the effectiveness of the
model behavior. However, most learning applications assume
a fairly class of parameterized models, and their process is
to adjust the parameters to improve the behavior (which can
be quite effective in some circumstances). Very few treat the
models as explicit objects of study, and attempt to diagnose
what is wrong when the models fail (as opposed to performing
less well than they could).</p>
      <p>A key property to this kind of analysis is that in
Wrappingbased systems, there is a ready-made class of symbols that
can be used for event names (the problem names), and a
ready-made class of events that can be labeled (the resource
applications announced in the SM). This property allows the
system to construct models of its own actual behavior, which
can be compared to the behavior intended by the designers
(as specified, inevitably, by another model). Precise point
of failure can be identified by incorrect or missing resource
applications, and the event context (also reported by the SM in
the Advise Poser step) and the WKB can be studied directly
for errors and omissions in the context that was used to create
the incorrect resource application (or not select the correct
one).</p>
      <p>
        Further discussion from a different context can be found in
[
        <xref ref-type="bibr" rid="ref23">23</xref>
        ].
      </p>
      <p>
        This kind of analysis is helpful for the infrastructure models,
but not quite sufficient for creating and improving the domain
models. For that part of the analysis process, we rely on some
combination of simulation and evolutionary programming
techniques [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] This area is under active investigation.
      </p>
    </sec>
    <sec id="sec-14">
      <title>C. Dynamic Knowledge Management</title>
      <p>Wrappings are one kind of knowledge base in these systems,
but there are certain to be many others to represent domain
knowledge and other information resources.</p>
      <p>We have not specified what form the knowledge bases are
to take, since these methods are largely independent of that,
and can be applied or adapted to most kinds of declarative
knowledge. One of the most powerful time savers in accessing
knowledge is context: the use of situational awareness to
greatly reduce the search space for any posed problem. We
describe two forms of context-based Dynamic Knowledge
Management, time-based forgetting and context-based search
reduction.</p>
      <p>We envision this knowledge base with meta-knowledge on
each element that contains a measure of its “popularity”, that
is, how often it has been used in recent reasoning processes.
These values are adjusted as the system reasons, and the
data structures used for the knowledge base should reflect
that ordering. This kind of “dynamic rule promotion” keeps
commonly used rules near the front of the search system, and
is known to reduce search times. Then the system can
occasionally discard some of the oldest and least used elements,
as another way to do Constructive Forgetting.</p>
      <p>Context describes the current and intended state of affairs
of the system (taking goals and capabilities into account),
and its best guess for the current and expected state of
affairs of the environment (taking its predictive models of
the environment into account). Then the available knowledge
can be searched in an order determined by expected relevance
(this ordering involves the indexing mechanisms, and does not
need to move the knowledge around). In some cases, this
reordering will delay the discovery of unexpected paths to a
goal, or even prevent the system from finding a good course
of action, but it is helpful on the whole. We clearly need better
indexing and ordering mechanisms, relevance computations,
and dynamically steerable search algorithms.</p>
    </sec>
    <sec id="sec-15">
      <title>D. Knowledge Refactoring</title>
      <p>
        Even if the system cannot define away its problems, it might
be able to re-organize its knowledge structures to require much
shorter expressions. Because this is a more complicated
operation than the previous two, we spend more time discussing
it. There are two parts to this kind of re-organization: the
first is a simple change of emphasis for all of the models
and rules, and the second is an actual re-arrangement. This
re-arrangement has come to be known as refactoring, and is
very popular in object-oriented coding circles [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] [
        <xref ref-type="bibr" rid="ref30">30</xref>
        ].
There are many different kinds of refactoring operations, and
which one to use first depends on some characteristics of the
interconnection graph that have come to be called “smells”
in the object-oriented coding world. For our application, we
need “smell” analogs for knowledge bases, which are relatively
easily adapted from [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], in addition to those that can be derived
from first principles.
      </p>
      <p>
        As an example of the latter, we note the property of
“tangleness”, that is, many elements all referring to each other.
One simple measures of tangleness is the size of maximal
cliques in the directed reference graph. Each maximal clique
is a set of elements that all refer to each other, so it seems
that there should be some partition of the set into subclasses,
or even some new element that they are all connected to. For
an n-clique, this changes the n * (n -1) / 2 edges between
every pair of elements to n edges, from each of the elements
to the new one. We have a speculative notion that small world
graphs may be useful for this kind of structure [
        <xref ref-type="bibr" rid="ref34">34</xref>
        ] [
        <xref ref-type="bibr" rid="ref35">35</xref>
        ].
      </p>
      <p>
        The notion of graph cliques brings up an entirely new
speculation that is interesting and may become important. It
is well-known that the collection of cliques in an undirected
graph is a simplicial complex, and therefore many topological
methods, and in particular persistent homology, can be applied
to understand the structure of the knowledge base at all
scales [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] [
        <xref ref-type="bibr" rid="ref32">32</xref>
        ]. Our interest is in the recent improvements in
computational speed [
        <xref ref-type="bibr" rid="ref37">37</xref>
        ] [
        <xref ref-type="bibr" rid="ref38">38</xref>
        ], which may allow these result
to be computed on the fly. The question is which of these
methods provides useful information.
      </p>
      <p>
        Another intriguing possibility is about reconstructing the
symbolic dynamics of a nonlinear system (a computable
definition of what the system does and will do). Mischaikow
et al. [
        <xref ref-type="bibr" rid="ref31">31</xref>
        ] show that, given a sequence of measurements
of the system, a symbolic model with a finite number of
states can be computed, and that model used for predictions
and other analyses. Its utility is in proving that a certain
dynamical system is chaotic (which is largely of theoretical
interest), in separating noise from essentials (which is of great
practical interest), and in determining invariant sets (sets that
the dynamics preserves, which include all attractors, and gives
hints about long-term behavior).
      </p>
      <p>Each of these possibilities warrants much more study.</p>
      <p>We close with some of the refactoring “smells” and
corrective actions that may apply to knowledge based systems,
whether they are embodied as rules or some other declarative
mechanism. We describe such a knowledge base as having
several sets of element definitions that define what objects are
being considered, how they relate to each other and how they
change. The entities and attributes define the objects, and there
are relationships among the objects, and activities that change
those objects. The key interconnection is the reference from
one of these entities to another.</p>
      <p>An entity with too many attributes should be separated into
a hierarchy of multiple entities that group the attributes in
a sensible way. An entity with too few attributes could be
too general, needing some new attributes to make appropriate
distinctions (of course, the system needs a reason to make
those distinctions). Two entities with too many relationships
should be better modeled as subordinate to a more general
combined entity. Many different entities with the same set of
attributes should be better modeled using a common
subordinate containing those attributes. These and other changes are
relatively easy. The old element references can be adjusted to
these new ones (though the system will have to make up some
names).</p>
      <p>Note that this kind of refactoring is almost entirely
experience driven, and has essentially nothing to do with simplifying
different aspects of original models, since they usually do not
exist.</p>
      <p>The more radical restructurings of the knowledge base
depend on the semantics of the elements and their connections,
to which the system has little or no access, so these are
generally left for the designers, for now (though there are
certainly claims in the code refactoring world that many of
these small changes can add up to a large one). Eventually,
we expect to go farther along the path of having the system
identify new core concepts, adjust the knowledge base, and
translate old expressions into new ones.</p>
      <p>There are many other warning signs that the knowledge
base structure might be unwieldy, but none as strong as search
delays or mistakes, which the system may not be able to detect
when they happen, but might be able to diagnose after the fact.</p>
      <p>This kind of refactoring is time-consuming, and very likely
too static for the “on-line” system, so we expect our
runtime systems to rely on the continual rearrangement of rule
priorities according to context and situation, and to do more
serious refactoring during down times (if there are any).</p>
    </sec>
    <sec id="sec-16">
      <title>E. Constructive Forgetting</title>
      <p>Since we know that the system will eventually run out
of space, the system needs ways to reclaim that space. Our
notion of “Constructive Forgetting” is about how to reduce
the knowledge base without sacrificing performance. For this
purpose, we think that the system can make simplifications
by grouping similar clusters or sequences, and simply treating
them all the same. If differences are eventually identified, then
either the system can recover some of the distinctions, or it
can recognize that it does not have the resources to cope.</p>
      <p>This is an application of grammatical inference, and
identifying classes of structures that have the same or a similar
effect, or to which the system responds nearly identically. In
those cases, the distinction is irrelevant to the response and it
can be discarded. Of course, if subsequent experience shows
that the distinction matters, the normal elaboration process will
make that refinement.</p>
      <p>It is extremely important for managing the balance among
these processes that the system record all of the elaborations
and collapsings, so they and their preconditions can be studied.
For example, when the system operation seems to be getting
slow (or the stored knowledge large), the threshold for
approximate matching can be lowered, so that more responses are
collapsed by this process. When system operation is relatively
fast, the elaboration mechanism can be turned up a little bit,
so that finer distinctions can be considered.</p>
      <sec id="sec-16-1">
        <title>VI. CONCLUSIONS AND FUTURE PROSPECTS</title>
        <p>In this paper, we have described an application of
selfmodeling systems to autonomous systems that we expect to
operate in hazardous or remote environments, and to adapt
their behavior to the external (and internal, e.g., low battery)
conditions they encounter. These systems refine
designerprovided knowledge bases that describes what they should
expect to encounter from the environment, from themselves,
and from the complexities of their interactions. We have also
described some methods for reducing the size and complexity
of the knowledge bases in an attempt to stave off the “Get
Stuck” Theorems, which will allow these self-modeling
systems to operate autonomously for longer periods of time or in
more dynamic environments.</p>
        <p>In general, the question of how to balance expansion and
contraction, and tune them to the complexity and dynamics of
the environment, is the main sustainable system question, but
it is our recommendation to keep the system near the higher
boundary, to maximize the available size of the semantic space.
A more general answer requires experimentation with some
engineering applications, and we expect the result to be quite
application specific.</p>
        <p>The important design question is how much of this variation
machinery we actually need for a given application, and
how much of the system structure can remain fixed (and
unmodeled). This engineering question can only be answered
in the context of a particular application.</p>
        <p>The important implementation question is how to make the
analysis fast enough to be useful, or how much of the model
update process the system can afford to do. This question also
is dependent on the particular application, because that will
determine how much computing power is available for these
sustainability functions.</p>
        <p>We know that we can build these self-modeling systems. We
think that we can learn to tune the balance rules effectively.
We expect that they will be useful for difficult applications.</p>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>Dana</given-names>
            <surname>Angluin</surname>
          </string-name>
          , “
          <article-title>Finding Patterns Common to a Set of Strings”</article-title>
          ,
          <source>J. Computer and System Sciences</source>
          , vol.
          <volume>21</volume>
          , pp.
          <fpage>46</fpage>
          -
          <lpage>62</lpage>
          (
          <year>1980</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>Dana</given-names>
            <surname>Angluin</surname>
          </string-name>
          , “
          <article-title>Inductive Inference of Formal Languages from Positive Data”</article-title>
          ,
          <source>Information and Control</source>
          , vol.
          <volume>45</volume>
          , pp.
          <fpage>117</fpage>
          -
          <lpage>135</lpage>
          (
          <year>1980</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>Dana</given-names>
            <surname>Angluin</surname>
          </string-name>
          ,
          <string-name>
            <surname>Carl H. Smith</surname>
          </string-name>
          , “
          <source>Inductive Inference: Theory and Methods”</source>
          ,
          <source>Computing Surveys</source>
          , vol.
          <volume>15</volume>
          , no.
          <issue>3</issue>
          , pp.
          <fpage>237</fpage>
          -
          <lpage>269</lpage>
          (
          <year>Sep 1983</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <surname>Dr. Kirstie L. Bellman</surname>
          </string-name>
          , Dr. Christopher Landauer, Dr. Phyllis R. Nelson, “
          <article-title>Managing Variable and Cooperative Time Behavior”</article-title>
          ,
          <source>Proceedings SORT 2010: The First IEEE Workshop on Self-Organizing Real-Time Systems</source>
          , 05 May, part of ISORC 2010:
          <article-title>The 13th</article-title>
          IEEE International Symposium on Object/component/service-oriented
          <source>Realtime distributed Computing</source>
          ,
          <volume>05</volume>
          -
          <fpage>06</fpage>
          May
          <year>2010</year>
          , Carmona, Spain (
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>J.</given-names>
            <surname>Berstel</surname>
          </string-name>
          , L. Boasson, “
          <article-title>Context-Free Languages”, Chapter 2</article-title>
          , pp.
          <fpage>59</fpage>
          -
          <lpage>102</lpage>
          in Jan van Leeuwen (Managing Editor),
          <source>Handbook of Theoretical Computer Science</source>
          vol.
          <source>B: Formal Methods and Semantics</source>
          , MIT (
          <year>1990</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>C. A.</given-names>
            <surname>Coello Coello</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G. B.</given-names>
            <surname>Lamont</surname>
          </string-name>
          , and
          <string-name>
            <surname>D. A. Van Veldhuizen</surname>
          </string-name>
          ,
          <article-title>Evolutionary Algorithms for Solving Multi-Objective Problems</article-title>
          , Springer Science+Business Media (
          <year>2007</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>J. M.</given-names>
            <surname>Foster</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Automatic Syntactic Analysis</given-names>
            , American
            <surname>Elsevier</surname>
          </string-name>
          (
          <year>1970</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>Martin</given-names>
            <surname>Fowler</surname>
          </string-name>
          ,
          <source>Refactoring: Improving the Design of Existing Code</source>
          ,
          <string-name>
            <surname>Addison-Wesley</surname>
          </string-name>
          (
          <year>1999</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>K. S.</given-names>
            <surname>Fu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T. L.</given-names>
            <surname>Booth</surname>
          </string-name>
          , “
          <article-title>Grammatical Inference: introduction and survey”</article-title>
          ,
          <source>IEEE Trans. Systems, Man, and Cybernetics</source>
          , vol.
          <source>SMC-5</source>
          , pp.
          <fpage>95</fpage>
          -
          <lpage>111</lpage>
          , pp.
          <fpage>409</fpage>
          -
          <lpage>423</lpage>
          (
          <year>1975</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>E. M.</given-names>
            <surname>Gold</surname>
          </string-name>
          , “
          <article-title>Language Identification in the Limit”</article-title>
          ,
          <source>Information and Control</source>
          , vol.
          <volume>10</volume>
          , pp.
          <fpage>447</fpage>
          -
          <lpage>474</lpage>
          (
          <year>1967</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>D.</given-names>
            <surname>Hadka</surname>
          </string-name>
          , P. Reed, “
          <article-title>Borg: An Auto-Adaptive Many-Objective Evolutionary Computing Framework”</article-title>
          ,
          <source>Evolutionary Computation</source>
          , vol.
          <volume>21</volume>
          , no.
          <issue>2</issue>
          , pp.
          <fpage>231</fpage>
          -
          <lpage>259</lpage>
          (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <surname>Israel</surname>
            <given-names>Herraiz</given-names>
          </string-name>
          , Daniel Rodriguez, Gregorio Robles and
          <string-name>
            <surname>Jesus M. Gonzalez-Barahona</surname>
          </string-name>
          , “
          <article-title>The evolution of the laws of software evolution: A discussion based on a systematic literature review”</article-title>
          ,
          <source>ACM Computing Surveys</source>
          , Vol.
          <volume>1</volume>
          , No.
          <volume>1</volume>
          (
          <year>June 2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <surname>Colin de la Higuera</surname>
          </string-name>
          ,
          <source>Grammatical Inference: Learning Automata and Grammars</source>
          , Cambridge U. Press (
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <surname>Danijela</surname>
            <given-names>Horak</given-names>
          </string-name>
          , Slobodan Maletic´ and Milan Rajkovic´, “
          <article-title>Persistent homology of complex networks”</article-title>
          ,
          <source>J. Stat. Mech.: Theory and Experiment arXiv 0811.2203</source>
          (
          <year>2008</year>
          ) https://arxiv.org/pdf/0811.2203 (availability
          <source>last checked 24 Jul</source>
          <year>2016</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <surname>Joshua</surname>
            <given-names>Kerievsky</given-names>
          </string-name>
          , Refactoring to Patterns, Pearson (
          <year>2004</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <surname>Philippe</surname>
            <given-names>Kruchten</given-names>
          </string-name>
          , “
          <article-title>Architectural Blueprints The 4+1 View Model of Software Architecture”</article-title>
          ,
          <source>IEEE Software</source>
          , vol.
          <volume>12</volume>
          , no.
          <issue>6</issue>
          , pp.
          <fpage>42</fpage>
          -
          <lpage>50</lpage>
          (
          <year>November 1995</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <surname>Christopher</surname>
            <given-names>Landauer</given-names>
          </string-name>
          , “
          <article-title>Infrastructure for Studying Infrastructure”</article-title>
          ,
          <source>Proc. ESOS 2013: Workshop on Embedded Self-Organizing Systems, 25 June</source>
          <year>2013</year>
          , San Jose, California; part of 2013
          <source>USENIX Federated Conference Week</source>
          ,
          <fpage>24</fpage>
          -
          <lpage>28</lpage>
          June 2013, San Jose, California (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <surname>Christopher</surname>
            <given-names>Landauer</given-names>
          </string-name>
          , Kirstie L. Bellman, “Situation Assessment via Computational Semiotics”, pp.
          <fpage>712</fpage>
          -
          <lpage>717</lpage>
          <source>in Proc. ISAS'98: The 1998 International MultiDisciplinary Conference on Intelligent Systems and Semiotics</source>
          ,
          <volume>14</volume>
          -17
          <source>Sep</source>
          <year>1998</year>
          , NIST, Gaithersburg, Maryland (
          <year>1998</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <surname>Christopher</surname>
            <given-names>Landauer</given-names>
          </string-name>
          , Kirstie L. Bellman, “
          <article-title>Generic Programming, Partial Evaluation, and a New Programming Paradigm”, Chapter 8</article-title>
          , pp.
          <fpage>108</fpage>
          -
          <lpage>154</lpage>
          in Gene McGuire (ed.),
          <source>Software Process Improvement</source>
          , Idea Group Publishing (
          <year>1999</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <surname>Christopher</surname>
            <given-names>Landauer</given-names>
          </string-name>
          , Kirstie L. Bellman, “
          <string-name>
            <surname>Self-Modeling</surname>
            <given-names>Systems</given-names>
          </string-name>
          ”, pp.
          <fpage>238</fpage>
          -
          <lpage>256</lpage>
          in R. Laddaga, H. Shrobe (eds.), “
          <string-name>
            <surname>Self-Adaptive Software</surname>
          </string-name>
          ”,
          <source>Springer Lecture Notes in Computer Science</source>
          , vol.
          <volume>2614</volume>
          (
          <year>2002</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <surname>Christopher</surname>
            <given-names>Landauer</given-names>
          </string-name>
          , Kirstie L. Bellman, “
          <source>Semiotic Processing in Constructed Complex Systems”, Proc. CSIS2002: The 4th International Workshop on Computational Semiotics for Intelligent Systems, JCIS2002: The 6th Joint Conference on Information Sciences</source>
          ,
          <fpage>08</fpage>
          -
          <lpage>13</lpage>
          Mar 2002, Research Triangle Park, NC (
          <year>2002</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <surname>Christopher</surname>
            <given-names>Landauer</given-names>
          </string-name>
          , Kirstie L. Bellman, “
          <article-title>Managing Self-Modeling Systems”</article-title>
          , in R. Laddaga, H. Shrobe (eds.),
          <source>Proc. Third International Workshop on Self-Adaptive Software</source>
          ,
          <fpage>09</fpage>
          -
          <lpage>11</lpage>
          Jun 2003, Arlington, Virginia (
          <year>2003</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [23]
          <string-name>
            <surname>Christopher</surname>
            <given-names>Landauer</given-names>
          </string-name>
          , Kirstie L. Bellman, “
          <article-title>Model-Based Cooperative System Engineering and Integration”</article-title>
          ,
          <source>Proc. SiSSy 2016: The Third Workshop on Self-Improving Self-Integrating Systems, 19 Jul</source>
          <year>2016</year>
          , Wu¨rzburg,
          <string-name>
            <surname>Germany</surname>
          </string-name>
          (
          <year>2016</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [24]
          <string-name>
            <surname>Dr</surname>
          </string-name>
          . Christopher Landauer, Dr. Kirstie L. Bellman, Dr. Phyllis R. Nelson, “Wrapping Tutorial:
          <article-title>How to Build Self-Modeling Systems”</article-title>
          ,
          <source>Proc. SASO</source>
          <year>2012</year>
          :
          <article-title>The 6th IEEE Intern</article-title>
          .
          <source>Conf. on Self-Adaptive and Self-Organizing Systems</source>
          ,
          <volume>10</volume>
          -
          <fpage>14</fpage>
          Sep 2012, Lyon, France (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          [25]
          <string-name>
            <surname>Lillian</surname>
            <given-names>Lee,</given-names>
          </string-name>
          “
          <article-title>Learning of Context-Free Languages: A Survey of the Literature”</article-title>
          ,
          <source>Technical Report TR-12-96</source>
          ,
          <string-name>
            <surname>Harvard</surname>
            <given-names>U.</given-names>
          </string-name>
          (
          <year>1996</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          [26]
          <string-name>
            <surname>Meir</surname>
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Lehman</surname>
            , “Programs,
            <given-names>Life</given-names>
          </string-name>
          <string-name>
            <surname>Cycles</surname>
          </string-name>
          , and
          <article-title>Laws of Software Evolution”</article-title>
          ,
          <source>Proc. IEEE</source>
          , vol.
          <volume>68</volume>
          , No.
          <issue>9</issue>
          , pp.
          <fpage>1060</fpage>
          -
          <lpage>1076</lpage>
          (
          <year>1980</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          [27]
          <string-name>
            <surname>M. M. Lehman</surname>
            and
            <given-names>L. A.</given-names>
          </string-name>
          Belady (eds.),
          <source>Program evolution. Processes of software change</source>
          , Academic Press (
          <year>1985</year>
          )
          <article-title>Professional</article-title>
          , Inc., San Diego, CA, USA
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          [28]
          <string-name>
            <surname>Pattie</surname>
            <given-names>Maes</given-names>
          </string-name>
          , “Computational Reflection”,
          <source>technical report 87 2</source>
          ,
          <string-name>
            <given-names>Vrije</given-names>
            <surname>Universiteit</surname>
          </string-name>
          <string-name>
            <surname>Brussel</surname>
          </string-name>
          ,
          <source>Artificial Intelligence Laboratory</source>
          (
          <year>1987</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref29">
        <mixed-citation>
          [29]
          <string-name>
            <surname>Pattie</surname>
            <given-names>Maes</given-names>
          </string-name>
          , “
          <article-title>Concepts and Experiments in Computational Reflection”</article-title>
          , pp.
          <fpage>147</fpage>
          -
          <lpage>155</lpage>
          in Proceedings OOPSLA '
          <volume>87</volume>
          (
          <year>1987</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref30">
        <mixed-citation>
          [30]
          <string-name>
            <given-names>Q.</given-names>
            <surname>Ethan</surname>
          </string-name>
          <string-name>
            <given-names>McCallum</given-names>
            ,
            <surname>Bad Data Handbook</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O</given-names>
            <surname>'Reilly</surname>
          </string-name>
          (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref31">
        <mixed-citation>
          [31]
          <string-name>
            <surname>Konstantin</surname>
            <given-names>Mischaikow</given-names>
          </string-name>
          , Marian Mrozek,
          <string-name>
            <given-names>J. D.</given-names>
            <surname>Reiss</surname>
          </string-name>
          , Andrzej Szymczak, “
          <article-title>Construction of Symbolic Dynamics from Experimental Time Series”</article-title>
          ,
          <source>Phys. Rev. Lett</source>
          . vol.
          <volume>82</volume>
          , pp.
          <volume>1144</volume>
          (
          <issue>8 Feb 1999</issue>
          )
        </mixed-citation>
      </ref>
      <ref id="ref32">
        <mixed-citation>
          [32]
          <string-name>
            <surname>Giovanni</surname>
            <given-names>Petri</given-names>
          </string-name>
          , Martina Scolamiero, Irene Donato, Francesco Vaccarino. “
          <article-title>Topological Strata of Weighted Complex Networks”</article-title>
          ,
          <source>PLOS One</source>
          , vol.
          <volume>8</volume>
          , no.
          <issue>6</issue>
          ,
          <issue>e66506</issue>
          (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref33">
        <mixed-citation>
          [33]
          <string-name>
            <surname>Ken</surname>
            <given-names>Thompson</given-names>
          </string-name>
          , “Reflections on Trusting Trust”,
          <source>Comm. of the ACM</source>
          , vol.
          <volume>27</volume>
          , no.
          <issue>8</issue>
          , pp.
          <fpage>761</fpage>
          -
          <lpage>763</lpage>
          (
          <year>Aug 1984</year>
          ), also at URL http://www.acm. org/classics/sep95/ (availability last checked 24
          <source>Jul</source>
          <year>2016</year>
          )
          <article-title>; see also the commentary in the “back door” entry of “The Jargon Lexicon”, which is widely available on the Web, and in particular, is findable by searching with Google for “back door moby hack” (availability last checked</article-title>
          24
          <source>Jul</source>
          <year>2016</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref34">
        <mixed-citation>
          [34]
          <string-name>
            <surname>Duncan</surname>
            <given-names>J.</given-names>
          </string-name>
          <string-name>
            <surname>Watts</surname>
          </string-name>
          ,
          <string-name>
            <surname>Steven H. Strogatz</surname>
          </string-name>
          , “
          <article-title>Collective dynamics of 'smallworld' networks”</article-title>
          .
          <source>Nature</source>
          , vol.
          <volume>393</volume>
          , pp.
          <fpage>440</fpage>
          -
          <lpage>442</lpage>
          (
          <year>1998</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref35">
        <mixed-citation>
          [35]
          <string-name>
            <surname>Duncan</surname>
            <given-names>J.</given-names>
          </string-name>
          <string-name>
            <surname>Watts</surname>
          </string-name>
          , Small Worlds:
          <article-title>The Dynamics of Networks between Order and Randomness</article-title>
          , Princeton U. Press (
          <year>2003</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref36">
        <mixed-citation>
          [36]
          <string-name>
            <surname>Herbert</surname>
            <given-names>S.</given-names>
          </string-name>
          <string-name>
            <surname>Wilf</surname>
          </string-name>
          , generatingfunctionology, Academic Press (
          <year>1990</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref37">
        <mixed-citation>
          [37]
          <string-name>
            <surname>Afra</surname>
            <given-names>Zomorodian,</given-names>
          </string-name>
          “
          <article-title>The Tidy Set: A Minimal Simplicial Set for Computing Homology of Clique Complexes”</article-title>
          , pp.
          <fpage>257</fpage>
          -
          <lpage>266</lpage>
          in Afra Zomorodian (ed.),
          <source>Proc. SoCG10: 26th Symposium on Computational Geometry</source>
          ,
          <fpage>13</fpage>
          -
          <lpage>16</lpage>
          Jun 2010, Snowbird, Utah (
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref38">
        <mixed-citation>
          [38]
          <string-name>
            <surname>Afra</surname>
            <given-names>Zomorodian</given-names>
          </string-name>
          ,
          <source>Topological Data Analysis: Proc. 2011 AMS Short Course on Computational Topology</source>
          ,
          <fpage>04</fpage>
          -05
          <source>Jan</source>
          <year>2011</year>
          , New Orleans, Louisiana, Symposia in Applied Mathematics, v.70,
          <string-name>
            <surname>AMS</surname>
          </string-name>
          (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>