# Inhibition and Permission TPN (IPTPN)

Berthomieu et al. [PBV2011] define an extension of TPN with inhibition and permission that provides a method for building composable nets; meaning TPN where all observable transitions have trivial time constraints (their time interval is $[0, \infty[$]). With this extension, it is always possible to build a composable IPTPN from a TPN.

For example, Fig. 1 and 2 below display two TPN and Fig. 3 displays the IPTPN corresponding to their product. In this construction, we create a silent, extra-transition $tc_i$ for every non-trivial observable transition $t_i$. These transitions cannot fire (they self-inhibit themselves with an inhibitor arc —○) but “record the timing constraints” of the transition they are associated with. Then a permission arc ( —●) is used to transfer these constraints on the (product of) labeled transitions.

Option -iptpn is used to generate a TPN (in .net or .tpn syntax) that can be analyzed using Tina. This option can be used to generate an IPTPN from: (1) the product of two nets (together with option -I); (2) the “twin-plant” construction (-twin); or (3) just from a single net alone. In the resulting net, the silent (timed) transition corresponding to $tc_i$ is named {ti.t}.

$twina -iptpn -fault=a C1.net # # net C1 # 2 places, 2 transitions + 1 tc transitions # pl p0 (1) pl p1 (1) tr t0 : a [0,w[ p0 -> tr t1 : b p1 -> tr {t1.t} [0,1] p1 -> pr {t1.t} -o {t1.t} pr {t1.t} -* t1 To use the resulting net with Tina you only need to set an environment variable called IPTPN (to a non-zero value). Then you may directly pipe the result to Tina, like in the following example. (our example below use sift, an optimized tool for state-space generation.)$ export IPTPN=1
\$ twina -iptpn -I C1.net C2.net | sift -
3 marking(s), 3 domain(s), 3 classe(s), 2 transition(s)
0.000s

## Examples used in this post

The basic examples of nets used in our paper C1.net and C2.net .