Keywords

1 Introduction

Autonomic computing (AC) imitates and simulates the natural intelligence possessed by the human autonomic nervous system using generic computers. This indicates that the nature of software in AC is the simulation and embodiment of human behaviors, and the extension of human capability, reachability, persistency, memory, and information processing speed. AC was first proposed by IBM in 2001 where it is defined as

Autonomic computing is an approach to self-managed computing systems with a minimum of human interference. The term derives from the body’s autonomic nervous system, which controls key functions without conscious awareness or involvement” [1].

AC in our recent investigations [26] is generally described as self-*. Formally, let self-* be the set of self-\(\_\!\_\)’s. Each self-\(\_\!\_\) to be an element in self-* is called a self-* facet. That is,

$$\begin{aligned} \text{ self-* } = \{\text {self-}\_\!\_\;|\; \text {self-}\_\!\_\text {is a self-* facet}\} \end{aligned}$$
(1)

We see that self-CHOP is composed of four self-* facets of self-configuration, self-healing, self-optimization and self-protection. Hence, self-CHOP is a subset of self-*. That is, self-CHOP = {self-configuration, self-healing, self-optimization, self-protection} \(\subset \) self-*. Every self-* facet must satisfy some certain criteria, so-called self-* properties.

In its AC manifesto, IBM proposed eight facets setting forth an AS known as self-awareness, self-configuration, self-optimization, self-maintenance, self-protection (security and integrity), self-adaptation, self-resource- allocation and open-standard-based [1]. In other words, consciousness (self-awareness) and non-imperative (goal-driven) behaviors are the main features of autonomic systems (ASs).

In this paper we will specify ASs and self-* and then move on to consider products and coproducts of ASs. All of this material is taken as an investigation of our category, the category of ASs, which we call AS.

2 Outline

In the paper, we attempt to make the presentation as self-contained as possible, although familiarity with the notion of self-* in ASs is assumed. Acquaintance with the associated notion of algebraic language is useful for recognizing the results, but is almost everywhere not strictly necessary.

The rest of this paper is organized as follows: Sect. 3 presents the notion of autonomic systems (ASs). In Sect. 4, self-* actions in ASs are specified, products and coproducts of ASs are considered. Finally, a short summary is given in Sect. 5.

3 Autonomic Systems (ASs)

We can think of an AS as a collection of states \(x\in AS\), each of which is recognizable as being in AS and such that for each pair of named states \(x, y \in AS\) we can tell if \(x = y\) or not. The symbol \(\oslash \) denotes the AS with no states.

If \(AS_1\) and \(AS_2\) are ASs, we say that \(AS_1\) is a sub-system of \(AS_2\), and write \(AS_1 \subseteq AS_2\), if every state of \(AS_1\) is a state of \(AS_2\). Checking the definition, we see that for any system AS, we have sub-systems \(\oslash \subseteq AS\) and \(AS \subseteq AS\).

We can use system-builder notation to denote sub-systems. For example the autonomic system can be written \(\{x \in AS \mid x ~\text {is a state of AS}\}\).

The symbol \(\exists \) means “there exists”. So we can write the autonomic system as \(\{x \in AS \mid \exists y\) is a final state such that self-*action \({(x) = y}\}\)

The symbol \(\exists !\) means “there exists a unique”. So the statement “\(\exists ! x \in AS\) is an initial state” means that there is one and only one state to be a start one, that is, the state of the autonomic system before any self-* action is processed.

Finally, the symbol \(\forall \) means “for all”. So the statement “\( \forall x \in AS\) \(\exists y \in AS \) such that self-* action \((x)=y\)” means that for every state of autonomic system there is the next one.

In the paper, we use the \(\mathop {=}\limits ^{def}\) notation “\(AS_1 \mathop {=}\limits ^{def} AS_2\)” to mean something like “define \(AS_1\) to be \(AS_2\)”. That is, a \(\mathop {=}\limits ^{def}\) declaration is not denoting a fact of nature (like \(1+2=3\)), but our formal notation. It just so happens that the notation above, such as Self-CHOP \(\mathop {=}\limits ^{def}\) {self-configuration, self-healing, self-optimization, self-protection}, is a widely-held choice.

4 Products and Coproducts of Autonomic Systems

If AS and \(AS'\) are sets of autonomic system states, then a self-*action self-*action from AS to \(AS'\), denoted self-*action \(: AS \rightarrow AS'\), is a mapping that sends each state \(x \in AS\) to a state of \(AS'\), denoted self-*action \((x) \in AS'\). We call AS the domain of self-*action and we call \(AS'\) the codomain of self-*action.

Note that the symbol \(AS'\), read “AS-prime”, has nothing to do with calculus or derivatives. It is simply notation that we use to name a symbol that is suggested as being somehow like AS. This suggestion of consanguinity between AS and \(AS'\) is meant only as an aid for human cognition, and not as part of the mathematics. For every state \(x \in AS\), there is exactly one arrow emanating from x, but for a state \(y \in AS'\), there can be several arrows pointing to y, or there can be no arrows pointing to y.

Suppose that \(AS' \subseteq AS\) is a sub-system. Then we can consider the self-* action \(AS' \rightarrow AS\) given by sending every state of \(AS'\) to “itself” as a state of AS. For example if \(AS = \{a, b, c, d, e, f\}\) and \(AS' = \{b, d, e\}\) then \(AS' \subseteq AS\) and we turn that into the self-* action \(AS' \rightarrow AS\) given by \(b \mapsto b, d \mapsto d, e \mapsto e\). This kind of arrow, \(\mapsto \), is read aloud as “maps to”. A self-* action self-*action \(: AS \rightarrow AS'\) means a rule for assigning to each state \(x \in AS\) a state self-*action \((x) \in AS'\). We say that “x maps to self-*action(x)” and write \(x \mapsto \) self-*action(x).

As a matter of notation, we can sometimes say something like the following: Let self-*action \(: AS' \subseteq AS\) be a sub-system. Here we are making clear that \(AS'\) is a sub-system of AS, but that self-*action is the name of the associated self-* action.

Given a self-* action self-*action \(: AS \rightarrow AS'\), the states of \(AS'\) that have at least one arrow pointing to them are said to be in the image of self-*action; that is we have

$$\begin{aligned} \text{ im }({\textit{self-*action}}) \mathop {=}\limits ^{def} \{y \in AS' \mid \exists x \in AS ~\text {such that}~ {\textit{self-*action}}(x)=y\} \end{aligned}$$
(2)

Given self-*action \(: AS \rightarrow AS'\) and self-*action \(': AS' \rightarrow AS''\), where the codomain of self-*action is the same set of autonomic system states as the domain of self-*action \('\) (namely \(AS'\)), we say that self-*action and self-*action \('\) are composable

The composition of self-*action and self-*action \('\) is denoted by self-*action \('\) \(\circ \) self-*action \(: AS \rightarrow AS''\).

We write Hom\(_\mathbf{AS }(AS,AS')\) to denote the set of self-*actions \(AS \rightarrow AS'\). Two self-* actions self-*action, self-*action \(': AS \rightarrow AS'\) are equal if and only if for every state \(x \in AS\) we have self-*action \((x)=\) self-*action \('(x)\).

We define the identity self-*action on AS, denoted \(id_{AS} : AS \rightarrow AS\), to be the self-* action such that for all \(x \in AS\) we have \(id_{AS}(x) = x\).

A self-*action: \(AS \rightarrow AS'\) is called an isomorphism, denoted self-*action: \(AS \mathop {\rightarrow }\limits ^{\cong } AS'\), if there exists a self-* action self-*action \(': AS' \rightarrow AS\) such that self-*action \('\) \(\circ \) self-*action \( = id_{AS}\) and self-*action \(\circ \) self-*action \(' = id_{AS'}\). We also say that self-*action is invertible and we say that self-*action \('\) is the inverse of self-*action. If there exists an isomorphism \(AS \mathop {\rightarrow }\limits ^{\cong } AS'\) we say that AS and \(AS'\) are isomorphic autonomic systems and may write \(AS \cong AS'\).

Proposition 1

The following facts hold about isomorphism.

  1. 1.

    Any autonomic system AS is isomorphic to itself; i.e. there exists an isomorphism \(AS \mathop {\rightarrow }\limits ^{\cong } AS\).

  2. 2.

    For any autonomic systems AS and \(AS'\), if AS is isomorphic to \(AS'\) then \(AS'\) is isomorphic to AS.

  3. 3.

    For any autonomic systems AS, \(AS'\) and \(AS''\), if AS is isomorphic to \(AS'\) and \(AS'\) is isomorphic to \(AS''\) then AS is isomorphic to \(AS''\).

Proof:

  1. 1.

    The identity self-* action \(id_{AS}: AS \rightarrow AS\) is invertible; its inverse is \(id_{AS}\) because \(id_{AS} \circ id_{AS} = id_{AS}\).

  2. 2.

    If self-*action \(: AS \rightarrow AS'\) is invertible with inverse self-*action \(': AS' \rightarrow AS\) then self-*action \('\) is an isomorphism with inverse self-*action.

  3. 3.

    If self-*action \(: AS \rightarrow AS'\) and are each invertible with inverses self-*action \(': AS' \rightarrow AS\) and then the following calculations show that is invertible with inverse :

figure a

and

figure b

For any natural number \(n \in \mathbb {N}\), define a set \(\underline{n}=\{1,2,\ldots ,n\}\). So, in particular, \(\underline{0} = \oslash \). A function \(f :\underline{n} \rightarrow AS\) can be written as a sequence \(f=(f(1), f(2), \ldots , f(n))\). We say that AS has cardinality n, denoted \(\mid AS \mid =n\) if there exists an isomorphism \(AS \cong \underline{n}\). If there exists some \(n \in \mathbb {N}\) such that AS has cardinality n then we say that AS is finite. Otherwise, we say that AS is infinite and write \(\mid AS \mid \geqslant \infty \).

Proposition 2

Suppose that AS and \(AS'\) are finite. If there is an isomorphism of autonomic systems \(f: AS \rightarrow AS'\) then the two autonomic systems have the same cardinality, \(\mid AS \mid = \mid AS' \mid \).

Proof:

Suppose that \(f: AS \rightarrow AS'\) is an isomorphism. If there exists natural numbers \(m, n \in \mathbb {N}\) and isomorphisms \(\alpha : \underline{m} \mathop {\rightarrow }\limits ^{\cong } AS\) and \(\beta : \underline{n} \mathop {\rightarrow }\limits ^{\cong } AS'\) then

is an isomorphism. We can prove by induction that the sets \(\underline{m}\) and \(\underline{n}\) are isomorphic if and only if \(m = n\).   \(\mathrm{Q.E.D.}\)

Consider the following diagram:

(3)

We say this is a diagram of autonomic systems if each of \(AS, AS', AS''\) is an autonomic system and each of self-*action, self-*action \('\), self-*action \(''\) is a self-* action. We say this diagram commutes if self-*action \(' \circ \) self-*action = self-*action \(''\). In this case we refer to it as a commutative triangle of autonomic systems. Diagram (3) is considered to be the same diagram as each of the following:

(4)

Consider the following picture:

(5)

We say this is a diagram of autonomic systems if each of \(AS, AS', AS'', AS'''\) is an autonomic system and each of self-*action, self-*action \('\), self-*action \(''\), self-*action \('''\) is a self-* action. We say this diagram commutes if self-*action \(' \circ \) self-*action = self-*action \(''' \circ \) self-*action \(''\). In this case we refer to it as a commutative square of autonomic systems.

Let AS and \(AS'\) be autonomic systems. The product of AS and \(AS'\), denoted \(AS \times AS'\), is defined as the autonomic system of ordered pairs (xy) where states of \(x \in AS\) and \(y \in AS'\). Symbolically, \(AS \times AS' = \{(x,y) | x \in AS, y \in AS'\}\). There are two natural projection actions of self-* to be self-*action \(_1:AS \times AS' \rightarrow AS\) and self-*action \(_2:AS \times AS' \rightarrow AS'\)

(6)

For illustration, suppose that \(\{a,b,c\}\) are states in AS and \(\{d,e\}\) in \(AS'\), the states are happening in such autonomic systems. Thus, AS and \(AS'\), which are running concurrently, can be specified by \(AS | AS' \mathop {=}\limits ^{def} \{(a|d),(a|e),(b|d),(b|e),(c|d),(c|e)\}\). Note that the symbol “|” is used to denote concurrency of states existing at the same time. We define self-* actions as disable(de) and disable(abc) to be able to drop out relevant states.

(7)

It is possible to take the product of more than two autonomic systems as well. For example, if \(AS_1\), \(AS_2\), and \(AS_3\) are autonomic systems then \(AS_1 | AS_2 | AS_3\) is the system of triples,

$$\begin{aligned} AS_1 | AS_2 | AS_3 \mathop {=}\limits ^{def} \{(a|b|c)| a \in AS_1, b \in AS_2, c \in AS_3\} \end{aligned}$$

Proposition 3

Let AS and \(AS'\) be autonomic systems. For any autonomic system \(AS''\) and actions self-*action\(_3: AS'' \rightarrow AS\) and self-*action\(_4: AS'' \rightarrow AS'\), there exists a unique action \(AS'' \rightarrow AS \times AS'\) such that the following diagram commutes

(8)

We might write the unique action as

$$\begin{aligned} \langle {\textit{self-*action}}_3, {\textit{self-*action}}_4\rangle : AS'' \rightarrow AS \times AS' \end{aligned}$$

Proof:

Suppose given self-*action \(_3\) and self-*action \(_4\) as above. To provide an action \(z: AS'' \rightarrow AS \times AS'\) is equivalent to providing a state \(z(a) \in AS \times AS'\) for each \(a \in AS''\). We need such an action for which self-*action \(_1 \circ z\) = self-*action \(_3\) and self-*action \(_2 \circ z\) = self-*action \(_4\). A state of \(AS \times AS'\) is an ordered pair (xy), and we can use \(z(a) = (x,y)\) if and only if x = self-*action \(_1(x,y)\) = self-*action \(_3(a)\) and y = self-*action \(_2(x,y)\) = self-*action \(_4(a)\). So it is necessary and sufficient to define

for all \(a \in AS''\).   \(\mathrm{Q.E.D.}\)

Given autonomic systems AS, \(AS'\), and \(AS''\), and actions self-*action \(_3: AS'' \rightarrow AS\) and self-*action \(_4: AS'' \rightarrow AS'\), there is a unique action \(AS'' \rightarrow AS \times AS'\) that commutes with self-*action \(_3\) and self-*action \(_4\). We call it the induced action \(AS'' \rightarrow AS \times AS'\), meaning the one that arises in light of self-*action \(_3\) and self-*action \(_4\).

For example, as mentioned above autonomic systems \(AS=\{a,b,c\}\), \(AS'=\{d,e\}\) and \(AS | AS' \mathop {=}\limits ^{def} \{(a|d),(a|e),(b|d),(b|e),(c|d),(c|e)\}\). For an autonomic system \(AS''= \oslash \), which stops running, we define self-* actions as \(enable (d,e)\) and \(enable (a,b,c)\) to be able to add further relevant states. Then there exists a unique action

$$\begin{aligned} enable ((a|d),(a|e),(b|d),(b|e),(c|d),(c|e)) \end{aligned}$$

such that the following diagram commutes

(9)

Let AS and \(AS'\) be autonomic systems. The coproduct of AS and \(AS'\), denoted \(AS \sqcup AS'\), is defined as the “disjoint union” of AS and \(AS'\), i.e. the autonomic system for which a state is either a state of AS or a state of \(AS'\). If something is a state of both AS and \(AS'\) then we include both copies, and distinguish between them, in \(AS \sqcup AS'\). There are two natural inclusion actions self-*action \(_1: AS \rightarrow AS \sqcup AS'\) and self-*action \(_2: AS' \rightarrow AS \sqcup AS'\).

(10)

For illustration, suppose that \(\{a,b,c\}\) are states in autonomic system AS and \(\{d,e\}\) in \(AS'\). Thus, \(AS \sqcup AS'\), which is disjoint union, can be specified by \(AS \sqcup AS' \mathop {=}\limits ^{def} \{a,b,c,d,e,\}\). We define self-* actions as \(ensable (d,e)\) and \(enable (a,b,c)\) to be able to add further relevant states.

(11)

Proposition 4

Let AS and \(AS'\) be autonomic systems. For any autonomic system \(AS''\) and actions self-*action\(_3: AS \rightarrow AS''\) and self-*action\(_4: AS' \rightarrow AS''\), there exists a unique action \(AS \sqcup AS' \rightarrow AS''\) such that the following diagram commutes

(12)

We might write the unique action as

$$\begin{aligned}{}[{\textit{self-*action}}_3, {\textit{self-*action}}_4]: AS \sqcup AS' \rightarrow AS'' \end{aligned}$$

Proof:

Suppose given self-*action \(_3\), self-*action \(_4\) as above. To provide an action \(z: AS \sqcup AS' \rightarrow AS''\) is equivalent to providing a state self-*action \(_3(m) \in AS''\) is for each \(m \in AS \sqcup AS'\). We need such an action such that \(z \circ \) self-*action \(_1\) = self-*action \(_3\) and \(z \circ \) self-*action \(_2\) = self-*action \(_4\). But each state \(m \in AS \sqcup AS'\) is either of the form self-*action \(_1x\) or self-*action \(_2y\), and cannot be of both forms. So we assign

(13)

This assignment is necessary and sufficient to make all relevant diagrams commute.   \(\mathrm{Q.E.D.}\)

For example, as mentioned above autonomic systems \(AS=\{a,b,c\}\), \(AS'=\{d,e\}\) and \(AS \sqcup AS' \mathop {=}\limits ^{def} \{a,b,c,d,e\}\). For an autonomic system \(AS''= \oslash \), which stops running, we define self-* actions as \(disable (d,e)\) and \(disable (a,b,c)\) to drop out relevant states. Then there exists a unique action \(disable (a,b,c,d,e)\) such that the following diagram commutes

(14)

5 Conclusions

The paper is a reference material for readers who already have a basic understanding of self-* in ASs and are now ready to consider products and coproducts of ASs using algebraic language. Algebraic specification is presented in a straightforward fashion by discussing in detail the necessary components and briefly touching on the more advanced components.