**5. Crisp Petri nets**

**Theorem 2.** *[6] There exists a* <sup>1</sup>*-safe Petri net with the initial marking <sup>μ</sup>*0(*p*) = 1, <sup>∀</sup>*<sup>p</sup>* <sup>∈</sup> *P which generates each of the* 2*<sup>n</sup> binary n-vectors*

$$(a\_1, a\_2, a\_3, \dots, a\_n), \ a\_i \in \{0, 1\}, \ n = |P|\_{\nu}$$

*as one of its marking vectors, exactly once.*

*Proof.* We shall prove this result again by using the PMI on *n* = |*P*|.

For *n* = 1, we construct a Petri net *C*<sup>1</sup> as shown in Figure 6. In this Petri net *C*1,

**Figure 6.** Petri net *C*<sup>1</sup> and *R*(*C*1, *μ*0)

the total number of transitions <sup>=</sup> 21 <sup>−</sup> <sup>1</sup> <sup>=</sup> 1,

$$\begin{aligned} \vert p\_1^\bullet \vert &= 2^1 - 1 = 1, \\ \vert \bullet p\_1 \vert &= 2^{1-1} - 1 = 0, \\ \vert \bullet t\_1 \vert &= 1. \end{aligned}$$

8 Will-be-set-by-IN-TECH

*Proof.* Suppose *<sup>C</sup>* = (*P*, *<sup>T</sup>*, *<sup>I</sup>*−, *<sup>I</sup>*+, *<sup>μ</sup>*0) is a Petri net which is Boolean and *<sup>μ</sup>*0(*pi*) �<sup>=</sup> 1 for some *pi* ∈ *P*. By the definition of a Petri net, no place can be isolated. Therefore *pi* has to be

In Case 1, since the given Petri net *C* is safe, •*ti* �= ∅ [2]. Therefore, ∃ *pj* ∈•*ti* for some *pj* ∈ *P*. *pj* will have either one token or no token. If *pj* has one token then *ti* is enabled and hence fires. After firing of *ti*, *pj* will have no token and *pi* will receive one token. So, both the places cannot have one token simultaneously. Hence, we will not get the marking vector whose components are all equal to 1. Again, if *pj* has no token then *ti* cannot fire, whence *pi* will never receive a

Also, in Case 3, as in the proof of Case 1 *pi* ∈ •*ti* implies that we cannot have the marking

**Theorem 2.** *[6] There exists a* <sup>1</sup>*-safe Petri net with the initial marking <sup>μ</sup>*0(*p*) = 1, <sup>∀</sup>*<sup>p</sup>* <sup>∈</sup> *P which*

(*a*1, *a*2, *a*3, ··· , *an*), *ai* ∈ {0, 1}, *n* = |*P*|,

1*t*

(1)

1*t*

(0)

*i* .

Case 2 follows from the arguments given for Case 1 above since, in particular, *pi* ∈ *t*•

Thus, if a Petri net generates all the binary *<sup>n</sup>*-vectors then *<sup>μ</sup>*0(*pi*) = <sup>1</sup> <sup>∀</sup> *pi* <sup>∈</sup> *<sup>P</sup>*.

*Proof.* We shall prove this result again by using the PMI on *n* = |*P*|.

<sup>1</sup> *C* :

For *n* = 1, we construct a Petri net *C*<sup>1</sup> as shown in Figure 6. In this Petri net *C*1,

0 <sup>1</sup> *R C*( , ): μ

*p*1

connected to some *ti* ∈ *T*. Now, three cases arise for consideration:

**Case-1:** *pi* ∈ *t*•

**Case-3:** *pi*∈ •*ti*

**Case-2:** *pi* ∈ •*ti* ∩ *t*•

**5. Crisp Petri nets**

*i* ,

*<sup>i</sup>* , and

token, which contradicts the assumption of the case.

vector whose components are all equal to 1.

*generates each of the* 2*<sup>n</sup> binary n-vectors*

*as one of its marking vectors, exactly once.*

**Figure 6.** Petri net *C*<sup>1</sup> and *R*(*C*1, *μ*0)

Total number of transitions whose post-sets having no element = <sup>1</sup>*C*<sup>0</sup> = 1 and this transition is *t*1. Clearly, *R*(*C*1, *μ*0) of *C*<sup>1</sup> generates both the binary 1-vectors (1) and (0) as shown in Figure 6 in the first step and after this step, transition becomes dead.

Next, for *n* = 2, the Petri net *C*<sup>2</sup> shown in Figure 7 has two places. In *C*2, we have

**Figure 7.** Petri net *C*<sup>2</sup> and *R*(*C*2, *μ*0)

the total number of transitions <sup>=</sup> 22 <sup>−</sup> <sup>1</sup> <sup>=</sup> <sup>4</sup> <sup>−</sup> <sup>1</sup> <sup>=</sup> 3,

$$\begin{aligned} |p^\bullet| &= 2^2 - 1 = 3, \,\forall \, p\_\prime\\ |\uparrow p| &= 2^{2-1} - 1 = 1, \,\forall \, p\_\prime\\ |\uparrow t| &= 2, \,\forall \, t. \end{aligned}$$

The total number of transitions whose post-sets have one element = <sup>2</sup>*C*<sup>1</sup> = 2 and these transitions are *t*1, *t*2.

The total number of transitions whose post-sets have no element = <sup>2</sup>*C*<sup>0</sup> = 1 and this transition is *t*3.

It is clear from Figure 7 that *<sup>R</sup>*(*C*2, *<sup>μ</sup>*0) has exactly 4 <sup>=</sup> 22 binary 2-vectors (*a*1, *<sup>a</sup>*2), *<sup>a</sup>*1, *<sup>a</sup>*<sup>2</sup> <sup>∈</sup> {0, 1} in the first step and after this step, all the transitions become dead.

We can construct *R*(*C*2, *μ*0) from *R*(*C*1, *μ*0) as follows: Take two copies of *R*(*C*1, *μ*0). In the first copy, augment each vector of *R*(*C*1, *μ*0) by the adjunction of a '0' entry at the second coordinate of every marking vector and denote the resulting labeled tree as *R*0(*C*1, *μ*0). Similarly, in the second copy, augment each vector by the adjunction of a '1' at the second coordinate of every marking vector and let *R*1(*C*1, *μ*0) be the resulting labeled tree (see Figure 8). Now, using

$$R\_0(C\_1, \mu^0): \begin{array}{c} (1,0) \\ t\_1 \\ \bullet \\ (0,0,0) \end{array} \qquad R\_1(C\_1, \mu^0): \begin{array}{c} (1,1) \\ t\_1 \\ \bullet \\ (0,1) \end{array}$$

1 *t*

2*t*

1 *p*

2 *p*

*k p*

: *Ck*

and these transitions are *tk*+1, *tk*+2, *tk*+3, ··· , *t <sup>k</sup>*2+*<sup>k</sup>*

<sup>6</sup> and these transitions are *t <sup>k</sup>*2+*k*+<sup>2</sup>

transitions are *<sup>t</sup>*2*<sup>k</sup>*−*k*−1, *<sup>t</sup>*2*<sup>k</sup>*−*k*, *<sup>t</sup>*2*<sup>k</sup>*−*k*+1, ··· , *<sup>t</sup>*2*<sup>k</sup>*−2.

. .

.

from *R*0(*Ck*, *μ*0) and *R*1(*Ck*, *μ*0).

**Figure 9.** Petri net *Ck* for *k* places

. .

is *<sup>t</sup>*2*<sup>k</sup>*−1.

. .

2 1 *<sup>k</sup> t* <sup>−</sup>

, ··· , *t <sup>k</sup>*3+5*<sup>k</sup>* 6 .

. .

. . 2

Boolean Petri Nets 391

The total number of transitions whose post-sets have *<sup>k</sup>* <sup>−</sup> 2 elements <sup>=</sup> *kCk*−<sup>2</sup> <sup>=</sup> *kC*<sup>2</sup> <sup>=</sup> *<sup>k</sup>*(*k*−1)

2 .

The total number of transitions whose post-sets have *<sup>k</sup>* <sup>−</sup> 3 elements <sup>=</sup> *kCk*−<sup>3</sup> <sup>=</sup> *kC*<sup>3</sup> <sup>=</sup> *<sup>k</sup>*(*k*−1)(*k*−2)

. .

The total number of transitions whose post-sets have one element = *kC*<sup>1</sup> = *k* and these

The total number of transitions whose post-sets have no element = *kC*<sup>0</sup> = 1 and this transition

We will now prove the result for the 1-safe Petri net *Ck*<sup>+</sup><sup>1</sup> having *k* + 1 places and *t*2*k*+<sup>1</sup> − 1 transitions and having the structure shown schematically in **Figure-9**. For this purpose, take two copies of *R*(*Ck*, *μ*0). In the first copy, augment each vector of *R*(*Ck*, *μ*0) by the adjunction of a '0' entry at the (*k* + 1)*th* coordinate of every marking vector and denote the resulting labeled tree as *R*0(*Ck*, *μ*0). Similarly, in the second copy, augment each vector by the adjunction of a '1' at the (*k* + 1)*th* coordinate of every marking vector and let *R*1(*Ck*, *μ*0) be the resulting labeled tree. Now, using the following steps we construct the reachability tree *R*(*Ck*+1, *μ*0) of *Ck*<sup>+</sup><sup>1</sup>

**Step-1.** The induction hypothesis implies that the binary (*<sup>k</sup>* <sup>+</sup> <sup>1</sup>)-vectors in *<sup>R</sup>*0(*Ck*, *<sup>μ</sup>*0) <sup>∪</sup>

**Step-3.** In *<sup>R</sup>*0(*Ck*, *<sup>μ</sup>*0), the root node (1, 1, 1, ··· , 0) is the marking obtained after firing of transition *tk*<sup>+</sup><sup>1</sup> in *Ck*+1. Hence, we join the root node (1, 1, 1, ··· , 0) of *<sup>R</sup>*0(*Ck*, *<sup>μ</sup>*0) to the

*R*1(*Ck*, *μ*0) are all distinct and they are exactly 2*<sup>k</sup>* + 2*<sup>k</sup>* = 2*k*+<sup>1</sup> in number. **Step-2.** In *<sup>R</sup>*0(*Ck*, *<sup>μ</sup>*0), none of the transitions is enabled at (1, 1, 1, ··· , 0).

, *t <sup>k</sup>*2+*k*+<sup>6</sup> 2

.

, *t <sup>k</sup>*2+*k*+<sup>4</sup> 2

2

.

**Figure 8.** Augmented reachability trees and resulting labeled tree *T*<sup>2</sup>

the following steps we construct the reachability tree *R*(*C*2, *μ*0) of *C*<sup>2</sup> from *R*0(*C*1, *μ*0) and *R*1(*C*1, *μ*0).

**Step-1.** Clearly, the binary 2-vectors in *<sup>R</sup>*0(*C*1, *<sup>μ</sup>*0) <sup>∪</sup> *<sup>R</sup>*1(*C*1, *<sup>μ</sup>*0) are all distinct and are exactly 22 = 4 in number.

**Step-2.** In *R*0(*C*1, *μ*0), none of the transitions *tj* is enabled at (1, 0).

**Step-3.** In *R*0(*C*1, *μ*0), the root node (1, 0) has the marking obtained after firing of transition *t*<sup>2</sup> in *C*2. Hence, we join the root node (1, 0) of *R*0(*C*1, *μ*0) to the root node (1, 1) of *R*1(*C*1, *μ*0) by an arc labeled *t*<sup>2</sup> so that (1, 0) would become the 'child node' obtained by firing *t*<sup>2</sup> in *C*2. Next, we join the child node (0, 0) of *R*0(*C*1, *μ*0) to the root node (1, 1) of *R*1(*C*1, *μ*0) by an arc labeled *t*<sup>3</sup> so that (0, 0) would become the child node obtained by firing *t*<sup>3</sup> in *C*2. Then, the resulting labeled tree *T*<sup>2</sup> has exactly 22 binary 2-vectors as its set of nodes. *T*<sup>2</sup> is indeed the reachability tree of *C*<sup>2</sup> because in *C*<sup>2</sup> all the transitions *t*1, *t*<sup>2</sup> and *t*<sup>3</sup> are enabled at the initial marking (1, 1) and fire. Further, after firing of each transition, the new markings obtained by the rule

$$
\mu'(p\_i) = \mu^0(p\_i) - I^-(p\_{i\nu}t\_j) + I^+(p\_{i\nu}t\_j),
$$

are (0, 1),(1, 0) and (0, 0) respectively and no further firing takes place as the enabling condition fails to hold for these marking vectors; i.e., we get exactly 2<sup>2</sup> = 4 binary 2-vectors in the first step only.

Next, suppose this result is true for *n* = *k*. That is, *Ck* is the 1-safe Petri net having *k*-places and 2*<sup>k</sup>* <sup>−</sup> 1 transitions *<sup>t</sup>*1, *<sup>t</sup>*2, *<sup>t</sup>*3, ··· , generating each of the 2*<sup>k</sup>* binary *<sup>k</sup>*-vectors exactly once and having the structure as schematically shown in Figure 9 which has the following parameters:

$$\begin{array}{l}|p^{\bullet}| = 2^{k} - 1, \forall \ p\_{\prime} \\ |\stackrel{\bullet}{p}| = 2^{k-1} - 1, \forall \ p\_{\prime} \\ |\stackrel{\bullet}{\bullet}t| = k, \forall \ t. \end{array}$$

The total number of transitions whose post-sets have *<sup>k</sup>* <sup>−</sup> 1 elements <sup>=</sup> *kCk*−<sup>1</sup> <sup>=</sup> *kC*<sup>1</sup> <sup>=</sup> *<sup>k</sup>* and these transitions are *t*1, *t*2, *t*3, ··· , *tk*.

#### **Figure 9.** Petri net *Ck* for *k* places

.

. .

.

. .

. .

10 Will-be-set-by-IN-TECH

1 1 *R C*( , ): μ

<sup>1</sup>*t* <sup>1</sup>

<sup>2</sup>*<sup>t</sup>* <sup>3</sup> *<sup>t</sup>*

(1, 0 ) (1, 1)

( 0, 1) (0, 0)

(1, 1)

(0, 0) ( 0, 1) (1, 0 )

the following steps we construct the reachability tree *R*(*C*2, *μ*0) of *C*<sup>2</sup> from *R*0(*C*1, *μ*0) and

**Step-1.** Clearly, the binary 2-vectors in *<sup>R</sup>*0(*C*1, *<sup>μ</sup>*0) <sup>∪</sup> *<sup>R</sup>*1(*C*1, *<sup>μ</sup>*0) are all distinct and are exactly

**Step-3.** In *R*0(*C*1, *μ*0), the root node (1, 0) has the marking obtained after firing of transition *t*<sup>2</sup> in *C*2. Hence, we join the root node (1, 0) of *R*0(*C*1, *μ*0) to the root node (1, 1) of *R*1(*C*1, *μ*0) by an arc labeled *t*<sup>2</sup> so that (1, 0) would become the 'child node' obtained by firing *t*<sup>2</sup> in *C*2. Next, we join the child node (0, 0) of *R*0(*C*1, *μ*0) to the root node (1, 1) of *R*1(*C*1, *μ*0) by an arc labeled *t*<sup>3</sup> so that (0, 0) would become the child node obtained by firing *t*<sup>3</sup> in *C*2. Then, the resulting labeled tree *T*<sup>2</sup> has exactly 22 binary 2-vectors as its set of nodes. *T*<sup>2</sup> is indeed the reachability tree of *C*<sup>2</sup> because in *C*<sup>2</sup> all the transitions *t*1, *t*<sup>2</sup> and *t*<sup>3</sup> are enabled at the initial marking (1, 1) and fire. Further, after firing of each transition, the new markings obtained by the rule

are (0, 1),(1, 0) and (0, 0) respectively and no further firing takes place as the enabling condition fails to hold for these marking vectors; i.e., we get exactly 2<sup>2</sup> = 4 binary 2-vectors in

Next, suppose this result is true for *n* = *k*. That is, *Ck* is the 1-safe Petri net having *k*-places and 2*<sup>k</sup>* <sup>−</sup> 1 transitions *<sup>t</sup>*1, *<sup>t</sup>*2, *<sup>t</sup>*3, ··· , generating each of the 2*<sup>k</sup>* binary *<sup>k</sup>*-vectors exactly once and having the structure as schematically shown in Figure 9 which has the following parameters:

The total number of transitions whose post-sets have *<sup>k</sup>* <sup>−</sup> 1 elements <sup>=</sup> *kCk*−<sup>1</sup> <sup>=</sup> *kC*<sup>1</sup> <sup>=</sup> *<sup>k</sup>* and

<sup>−</sup>(*pi*, *tj*) + *I*

+(*pi*, *tj*)

0 1 *R* ( , ): *C* μ <sup>0</sup>

*t*

1 *t*

0

<sup>2</sup> *T* :

*R*1(*C*1, *μ*0).

22 = 4 in number.

the first step only.

<sup>|</sup>*p*•| <sup>=</sup> <sup>2</sup>*<sup>k</sup>* <sup>−</sup> 1, <sup>∀</sup> *<sup>p</sup>*,

•*t*| = *k*, ∀ *t*.

• *<sup>p</sup>*<sup>|</sup> <sup>=</sup> <sup>2</sup>*k*−<sup>1</sup> <sup>−</sup> 1, <sup>∀</sup> *<sup>p</sup>*,

these transitions are *t*1, *t*2, *t*3, ··· , *tk*.



**Figure 8.** Augmented reachability trees and resulting labeled tree *T*<sup>2</sup>

**Step-2.** In *R*0(*C*1, *μ*0), none of the transitions *tj* is enabled at (1, 0).

*μ*�

(*pi*) = *<sup>μ</sup>*0(*pi*) <sup>−</sup> *<sup>I</sup>*

The total number of transitions whose post-sets have *<sup>k</sup>* <sup>−</sup> 2 elements <sup>=</sup> *kCk*−<sup>2</sup> <sup>=</sup> *kC*<sup>2</sup> <sup>=</sup> *<sup>k</sup>*(*k*−1) 2 and these transitions are *tk*+1, *tk*+2, *tk*+3, ··· , *t <sup>k</sup>*2+*<sup>k</sup>* 2 .

The total number of transitions whose post-sets have *<sup>k</sup>* <sup>−</sup> 3 elements <sup>=</sup> *kCk*−<sup>3</sup> <sup>=</sup> *kC*<sup>3</sup> <sup>=</sup> *<sup>k</sup>*(*k*−1)(*k*−2) <sup>6</sup> and these transitions are *t <sup>k</sup>*2+*k*+<sup>2</sup> 2 , *t <sup>k</sup>*2+*k*+<sup>4</sup> 2 , *t <sup>k</sup>*2+*k*+<sup>6</sup> 2 , ··· , *t <sup>k</sup>*3+5*<sup>k</sup>* 6 .

The total number of transitions whose post-sets have one element = *kC*<sup>1</sup> = *k* and these transitions are *<sup>t</sup>*2*<sup>k</sup>*−*k*−1, *<sup>t</sup>*2*<sup>k</sup>*−*k*, *<sup>t</sup>*2*<sup>k</sup>*−*k*+1, ··· , *<sup>t</sup>*2*<sup>k</sup>*−2.

. .

.

. .

. .

The total number of transitions whose post-sets have no element = *kC*<sup>0</sup> = 1 and this transition is *<sup>t</sup>*2*<sup>k</sup>*−1.

We will now prove the result for the 1-safe Petri net *Ck*<sup>+</sup><sup>1</sup> having *k* + 1 places and *t*2*k*+<sup>1</sup> − 1 transitions and having the structure shown schematically in **Figure-9**. For this purpose, take two copies of *R*(*Ck*, *μ*0). In the first copy, augment each vector of *R*(*Ck*, *μ*0) by the adjunction of a '0' entry at the (*k* + 1)*th* coordinate of every marking vector and denote the resulting labeled tree as *R*0(*Ck*, *μ*0). Similarly, in the second copy, augment each vector by the adjunction of a '1' at the (*k* + 1)*th* coordinate of every marking vector and let *R*1(*Ck*, *μ*0) be the resulting labeled tree. Now, using the following steps we construct the reachability tree *R*(*Ck*+1, *μ*0) of *Ck*<sup>+</sup><sup>1</sup> from *R*0(*Ck*, *μ*0) and *R*1(*Ck*, *μ*0).

**Step-1.** The induction hypothesis implies that the binary (*<sup>k</sup>* <sup>+</sup> <sup>1</sup>)-vectors in *<sup>R</sup>*0(*Ck*, *<sup>μ</sup>*0) <sup>∪</sup> *R*1(*Ck*, *μ*0) are all distinct and they are exactly 2*<sup>k</sup>* + 2*<sup>k</sup>* = 2*k*+<sup>1</sup> in number.

**Step-2.** In *<sup>R</sup>*0(*Ck*, *<sup>μ</sup>*0), none of the transitions is enabled at (1, 1, 1, ··· , 0).

**Step-3.** In *<sup>R</sup>*0(*Ck*, *<sup>μ</sup>*0), the root node (1, 1, 1, ··· , 0) is the marking obtained after firing of transition *tk*<sup>+</sup><sup>1</sup> in *Ck*+1. Hence, we join the root node (1, 1, 1, ··· , 0) of *<sup>R</sup>*0(*Ck*, *<sup>μ</sup>*0) to the root node (1, 1, 1, ··· , 1) of *<sup>R</sup>*1(*Ck*, *<sup>μ</sup>*0) by an arc labeled *tk*<sup>+</sup><sup>1</sup> so that (1, 1, 1, ··· , 0) would become the child node obtained by firing *tk*<sup>+</sup><sup>1</sup> in *Ck*<sup>+</sup><sup>1</sup> and in *R*1(*Ck*, *μ*0) the child node (0, 0, 0, ··· , 1) is the marking obtained after firing of the transition *tk*<sup>+</sup><sup>2</sup> at the root node (1, 1, 1, ··· , 1) of *<sup>R</sup>*1(*Ck*, *<sup>μ</sup>*0); so, we replace the arc labeled as *tk*<sup>+</sup><sup>1</sup> by *tk*<sup>+</sup><sup>2</sup> in *<sup>R</sup>*1(*Ck*, *<sup>μ</sup>*0). Next, we join the remaining (2*k*+<sup>1</sup> <sup>−</sup> <sup>1</sup>) <sup>−</sup> *<sup>k</sup>* <sup>+</sup> 2 child nodes (0, 1, 0, ··· , 0), (1, 0, 0, ··· , 0), ··· ,(0, 0, 0, ··· , 0) of *<sup>R</sup>*0(*Ck*, *<sup>μ</sup>*0) to the root node (1, 1, 1, ··· , 1) of *<sup>R</sup>*1(*Ck*, *<sup>μ</sup>*0) by an arc each, labeled *tk*+3, *tk*+4, *tk*+5, ··· , *<sup>t</sup>*2*<sup>k</sup>*−<sup>1</sup> respectively, so that (0, 1, 0, ··· , 0), (1, 0, 0, ··· , 0), ··· , (0, 0, 0, ··· , 0) would become the marking vector obtained after firing of *tk*+3, *tk*+4, *tk*+5, ··· , *<sup>t</sup>*2*<sup>k</sup>*−<sup>1</sup> respectively in *Ck*+1. Then the resulting labeled tree *Tk*<sup>+</sup><sup>1</sup> has exactly 2*k*+<sup>1</sup> binary (*k* + 1)-vectors. *Tk*<sup>+</sup><sup>1</sup> is indeed the reachability tree of *Ck*<sup>+</sup><sup>1</sup> because in *Ck*<sup>+</sup><sup>1</sup> all the transitions are enabled at the initial marking (1, 1, 1, ··· , 1) and fire. After firing, the new markings obtained by the rule

$$
\mu'(p\_i) = \mu^0(p\_i) - I^-(p\_{i\prime}t\_j) + I^+(p\_{i\prime}t\_j),
$$

are

(0, 1, 1, ··· , 1),(1, 0, 1, ··· , 1),(1, 1, 0, ··· , 1), ··· ,(0, 0, 0, ··· , 0)

respectively and no further firing takes place as the enabling condition fails to hold for these marking vectors; i.e., we get exactly 2*k*+<sup>1</sup> binary (*k* + 1)-vectors, each generated exactly once in the first step itself.

It is clear that the Petri net constructed above generates each of the 2*<sup>n</sup>* binary *n*-vectors exactly once in the very first step and, hence, is the smallest number of steps because no firing will take place after that step.

Hence, the result follows by the PMI.

Hence, we shall call a Boolean Petri net *crisp* if it generates every binary *n*−vector exactly once.

It may be observed from the above proof that the Petri net constructed therein yields all the binary *n*-vectors as marking vectors in the least possible number of steps. Such a Boolean Petri net will be called *optimal*.
