\documentclass[a4paper,11pt]{article} \usepackage{zed-csp} \usepackage{a4wide} \begin{document} \begin{center} {\Large\bf Petri Nets}\\ {\large A Formal Specification in Z} \\ {by Philip Dart} \end{center} This document should be read together with a complete description such as \emph{Petri Net Theory and the Modeling of Systems}, James L. Peterson, Prentice Hall, 1981. \subsection*{Basic definitions} \subsubsection*{Structure} \begin{zed} [PLACE, TRANSITION] \\ \end{zed} %\newcommand{\pnets}{Petri\_net\_structure} \newcommand{\pnets}{PNetStruct} \newcommand{\ipo}{\mathrel{\mbox{\sf input-place-of}}} \newcommand{\opo}{\mathrel{\mbox{\sf output-place-of}}} %%SYNTAX inrel \ipo %%SYNTAX inrel \opo \begin{schema}{\pnets} P: \finset PLACE \\ T: \finset TRANSITION \\ I, O: TRANSITION \pfun \bag PLACE \\ \also \_ \ipo \_, \_ \opo \_: PLACE \rel TRANSITION \\ \where \dom I = \dom O = T \\ \bigcup (\dom \limg \ran I \rimg) \subseteq P \\ \bigcup (\dom \limg \ran O \rimg) \subseteq P \\ \also \forall p: P; t: T @ p \ipo t \iff p \inbag I(t) \\ \forall p: P; t: T @ p \opo t \iff p \inbag O(t) \\ \end{schema} \subsubsection*{Markings and State Space} \begin{zed} MARKING == \bag PLACE \\ \end{zed} %\newcommand{\pnet}{Petri\_Net} \newcommand{\pnet}{PNet} %\newcommand{\mpnet}{Marked\_Petri\_Net} \newcommand{\mpnet}{MPNet} %\newcommand{\enabled}{\mathrel{\mbox{\sf enabled}}} % %%prerel \enabled \newcommand{\irf}{\mathrel{\mbox{\sf immediately\_reachable\_from}}} %%%SYNTAX inrel \irf \begin{schema}{\pnet} \pnets \\ M: \power MARKING \\ enabled: MARKING \rel TRANSITION \\ next\_state: MARKING \cross TRANSITION \pfun MARKING \\ immediately\_reachable: MARKING \rel MARKING \\ reachable: MARKING \rel MARKING \\ potentially\_fireable: MARKING \rel TRANSITION \\ live: MARKING \rel TRANSITION \\ \where M = \{~m: MARKING | \dom m \subseteq P~\} \\ enabled = \{~m: M; t: T | I(t) \subbageq m~\} \\ next\_state = (\lambda m: M; t: T | t \in enabled\limg\{~m~\}\rimg @ m \uminus I(t) \uplus O(t)) \\ immediately\_reachable = \{~m, m': M | (\exists t: T @ m' = next\_state(m, t))~\} \\ reachable = immediately\_reachable \star \\ potentially\_fireable = reachable \comp enabled \\ live = \{~m: M; t: T | (\forall m': reachable\limg\{~m~\}\rimg @ t \in potentially\_fireable\limg\{~m'~\}\rimg)~\}\\ \end{schema} \newpage \subsubsection*{Execution} \begin{schema}{\mpnet} C: \pnet \\ m: MARKING \\ enabled: \power TRANSITION \\ \where m \in C.M \\ enabled = C.enabled\limg\{~m~\}\rimg \\ \end{schema} \begin{schema}{\Delta \mpnet} \mpnet \\ \mpnet' \\ \where C' = C \\ \end{schema} \begin{schema}{Firing} \Delta \mpnet \\ t?: TRANSITION \where t? \in enabled \\ m' = C.next\_state(m, t?) \\ \end{schema} \newcommand{\deadlocked}{\mathrel{\mbox{\sf deadlocked}}} %%SYNTAX prerel \deadlocked \begin{axdef} \deadlocked \_: \power \mpnet \\ \where \forall M: \mpnet @~\deadlocked M \iff M.enabled = \emptyset \\ \end{axdef} %\newcommand{\ipnet}{Initialised\_Petri\_Net} \newcommand{\ipnet}{IPNet} \begin{schema}{\ipnet} \mpnet[i/m] \\ reachability\_set: \power MARKING \\ live: \power TRANSITION \\ ksafe, kbounded: \nat_1 \fun \power PLACE \\ safe: \power PLACE \\ \where reachability\_set = C.reachable\limg \{~i~\} \rimg \\ live = C.live\limg \{~i~\} \rimg \\ \forall k: \nat_1 @ ksafe(k) = kbounded(k) = \{~p: C.P | (\forall m: reachability\_set @ m \bcount p \leq k)~\} \\ safe = ksafe(1) \\ \end{schema} \newpage \subsection*{Analysis} \subsubsection*{Safeness and boundedness} \newcommand{\safe}{\mathrel{\sf safe}} %%SYNTAX prerel \safe \newcommand{\ksafe}{\mathrel{\mbox{\sf safe}}} %%SYNTAX inrel \ksafe \newcommand{\kbounded}{\mathrel{\mbox{\sf bounded}}} %%SYNTAX inrel \kbounded \newcommand{\bounded}{\mathrel{\sf bounded}} %%SYNTAX prerel \bounded \begin{axdef} \_ \ksafe \_, \_ \kbounded \_: \nat_1 \rel \ipnet \\ \safe \_, \bounded \_: \power \ipnet \\ \where \forall k: \nat_1; N: \ipnet @~k \ksafe N \iff k \kbounded N \iff N.ksafe(k) = N.C.P \\ \forall N: \ipnet @~\safe N \iff 1 \ksafe N \\ \forall N: \ipnet @~\bounded N \iff (\exists k: \nat_1 @ k \kbounded N) \\ \end{axdef} \subsubsection*{Conservation} \newcommand{\ssum}{\Sigma} \newcommand{\vprod}{\odot} %%SYNTAX infun 4 \vprod \begin{gendef}[X] \ssum: \bag X \fun \num \\ \_ \vprod \_: \bag X \cross \bag X \fun \bag X \\ \where % \forall m: X \fun \num @ \ssum m = (\# \circ items \inv)(m) \\ \forall m: \bag X @ \ssum m = (\# \circ items \inv)(m) \\ \forall w, m: \bag X @ w \vprod m = \{~p: \dom m @ p \mapsto (w \bcount p * m \bcount p)~\} \\ \end{gendef} \newcommand{\scons}{\mathrel{\mbox{\sf strictly-conservative}}} %%SYNTAX prerel \scons \newcommand{\conswrt}{\mathrel{\mbox{\sf conservative-with-respect-to}}} %%SYNTAX inrel \conswrt \newcommand{\cons}{\mathrel{\mbox{\sf conservative}}} %%SYNTAX prerel \cons \begin{axdef} \scons \_: \power \ipnet \\ \_ \conswrt \_: \ipnet \rel (PLACE \pfun \nat) \\ \cons \_: \power \ipnet \\ \where \forall N: \ipnet @ \\ \t1 \scons N \iff (\forall m: N.reachability\_set @ \ssum m = \ssum N.i) \\ \also \forall N: \ipnet; w: PLACE \pfun \nat | \dom w = N.C.P @ \\ \t1 N \conswrt w \iff \\ \t2 (\forall m: N.reachability\_set @ \ssum (w \vprod m) = \ssum (w \vprod N.i)) \\ \also \forall N: \ipnet @ \\ \t1 \cons N \iff (\exists w: N.C.P \fun \nat_1 @ N \conswrt w) \\ \end{axdef} \subsubsection*{Liveness} \newcommand{\live}{\mathrel{\mbox{\sf live}}} %%SYNTAX prerel \live \begin{axdef} \live \_: \power \ipnet \\ \where \forall N: \ipnet @~\live N \iff N.live = N.C.T \\ \end{axdef} \end{document}