Keywords

1 Introduction

In our previous work [3], 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 [38, 10, 11] 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-* action. That is,

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

We see that self-CHOP is composed of four self-* actions 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-* action must satisfy some certain criteria, so-called self-* properties.

In its AC manifesto, IBM proposed eight actions 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 curried self-* actions in 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 [2] 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 specification of autonomic systems (ASs). In Sect. 4, self-* actions in ASs are specified. In Sect. 5, products of ASs and some universal properties are considered. Curried self-* actions are investigated in Sect. 6. Finally, a short summary is given in Sect. 7.

3 Specification of Autonomic Systems (ASs)

From our previous publications [38, 10, 11], we can consider 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 } \text{ a } \text{ state } \text{ of } \text{ AS }\}\).

The symbol \(\exists \) means “there exists”. So we can write the autonomic system as \(\{x \in AS \mid \exists y \text{ is } \text{ a } \text{ final } \text{ state } \text{ such } \text{ that } \text{ 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 Specification of Self-* Actions in Autonomic Systems

From our previous investigations [38, 10, 11], self-* actions in autonomic systems can be specified as follows:

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 \text{ 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 \( \text {im } (\text {self-*action}) \mathop {=}\limits ^{def} \{y \in AS' \mid \exists x \in AS \text{ such } \text{ that } \text{ self-*action }(x)=y\}. \) 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. 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. 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. If self-*action \(: AS \rightarrow AS'\) and \(\widehat{self-*action }: AS' \rightarrow AS''\) are each invertible with inverses self-*action \(': AS' \rightarrow AS\) and \(\widehat{self-*action }': AS'' \rightarrow AS'\) then the following calculations show that \(\widehat{self-*action }\) \(\circ \) self-*action is invertible with inverse self-*action \('\) \(\circ \) \(\widehat{self-*action }'\):

figure a

and

figure b

Q.E.D. 

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

$$ \underline{m} \mathop {\rightarrow }\limits ^{\alpha } AS \mathop {\rightarrow }\limits ^{f} AS' \mathop {\rightarrow }\limits ^{\beta ^{-1}} \underline{n} $$

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

Consider the following diagram:

(2)

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 (2) is considered to be the same diagram as each of the following:

Consider the following picture:

(3)

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.

5 Products of Autonomic Systems and Universal Properties

In this section, products of ASs [7, 8] and some universal properties in ASs [9] are considered.

5.1 Products of Autonomic Systems

As considered in [7, 8], 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'\)

(4)

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 (d,e)\) and \(disable (a,b,c)\) to be able to drop out relevant states.

(5)

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,

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

.

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

(6)

We might write the unique action as

$$ \langle self-*action _3, self-*action _4\rangle : AS'' \rightarrow AS \times AS' $$

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 \(\langle self-*action _3, self-*action _4\rangle \mathop {=}\limits ^{def} (self-*action _3(a),self-*action _4(a))\) for all \(a \in AS''\). 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

(7)

5.2 Universial Properties

As considered in [8], the following isomorphisms exist for any autonomic systems AS, \(AS'\), and \(AS''\)

\(AS \times \underline{0} \cong \underline{0}\)

\(AS \times \underline{1} \cong AS\)

\(AS \times AS' \cong AS' \times AS\)

\((AS \times AS') \times AS'' \cong AS \times (AS' \times AS'')\)

\(AS^{\underline{0}} \cong \underline{1}\)

\(AS^{\underline{1}} \cong AS\)

\(\underline{0}^{AS} \cong \underline{0}\)

\(\underline{1}^{AS} \cong \underline{1}\)

\((AS^{AS'})^{AS''} \cong AS^{AS' \times AS''}\)

If \(n \in \mathbb {N}\) is a natural number and \(\underline{n} = \{1,2,\ldots n\}\), then \(AS^n\) is an abbreviation for \(\prod _n AS\) and \(AS^n\) is an abbreviation for \(AS^{\underline{n}}\). Thus, we have \(AS^{\underline{n}} \cong \prod _n AS\)

In the case of \(\underline{0}^{\underline{0}}\), we get conflicting answers, because for any autonomic system AS, including \(AS = \oslash = \underline{0}\), we have claimed both that \(AS^{\underline{0}} \cong \underline{1}\) and that \(\underline{0}^{AS} \cong \underline{0}\). Based on the definitions of \(\underline{0}\), \(\underline{1}\) and \(AS^{AS'}\) given in Sect. 4, the correct answer for \(\underline{0}^{\underline{0}}\) is \(\underline{0}^{\underline{0}} \cong \underline{1}\). The universal properties, which are considered in this section, are in some sense about isomorphisms. It says that understanding isomorphisms of autonomic systems reduces to understanding natural numbers. But note that there is much more going on in the category of AS than isomorphisms; in particular there are self-* actions that are not invertible.

6 Currying Self-* Actions

Currying is the idea that when a self-* takes action on many ASs, we can let the self-* take action on one at a time or all at once. For example, consider self-* that takes action on AS and \(AS'\) and returns \(AS''\). This is a self-* action self-*action: \(AS \times AS' \rightarrow AS''\). This self-* takes action on two ASs at once, but it is convenient to curry the second AS. Currying transforms self-*action into a self-* action

$$\begin{aligned} curry(self-*action) : AS \rightarrow \text{ Hom }_\mathbf{AS }(AS',AS'') \end{aligned}$$

This is a good way to represent the same information in another fashion. For any \(AS'\), we can represent the self-* that takes action on AS and returns \(AS''\). This is a self-* action

$$\begin{aligned} curry(self-*action)' : AS' \rightarrow \text{ Hom }_\mathbf{AS }(AS,AS'') \end{aligned}$$

Note that sometimes we denote the set of self-* actions from AS to \(AS'\) by

$$\begin{aligned} AS'^{AS} \mathop {=}\limits ^{def} \text{ Hom }_\mathbf{AS }(AS,AS') \end{aligned}$$

If AS and \(AS'\) are both finite (so one or both are empty), then \(|AS'^{AS}| = |AS'|^{|AS|}\). For any AS and \(AS'\), there is an isomorphism

$$\begin{aligned} \text{ Hom }_\mathbf{AS }(AS\times AS',AS'') \cong \text{ Hom }_\mathbf{AS }(AS,AS''^{AS'}) \end{aligned}$$

Let \(AS=\{a,b\}\), \(AS'=\{c,d\}\) and \(AS''=\{1,0\}\). Suppose that we have the following self-* action self-*action: \(AS \times AS' \rightarrow AS''\)

Currying transforms self-*action mentioned above into another self-* action with the same semantics

7 Conclusions

The paper considers curried self-* actions using algebraic language. Currying is the idea that when a self-* takes action on many ASs, we can let the self-* take action on one at a time or all at once. Algebraic specification is presented in a simple way by a detailed discussion of the components required and only a brief mention to the more advanced components.