2025-12-02 04:59:44 +01:00
\begin { section} { Introduction}
% §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§
\begin { frame}
Two Rust crates have been developed to model, analyze and design Reaction Systems.
\vspace { 1em}
2025-11-29 14:07:27 +01:00
\begin { itemize}
2025-12-02 04:59:44 +01:00
\item ReactionSystems
\item ReactionSystemsGUI
2025-11-29 14:07:27 +01:00
\end { itemize}
2025-12-02 04:59:44 +01:00
\vspace { 1em}
ReactionSystemsGUI implements a custom visual language using the libraries \( \texttt { egui } \) and \( \texttt { egui \_ node \_ graph 2 } \) .
\vspace { 1em}
A web version is also provided that runs locally using WebAssembly.
% A CLI is implemented in ReactionSystems too
2025-11-29 14:07:27 +01:00
\end { frame}
2025-12-02 04:59:44 +01:00
% §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§
\begin { frame}
\begin { figure} [h]
\includegraphics [width=0.9\textwidth] { figures/instructions_ medical.png}
\end { figure}
\begin { figure} [h]
\includegraphics [width=0.9\textwidth] { figures/output_ medical.png}
\end { figure}
\end { frame}
% §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§
\end { section}
% ==============================================================================
\begin { section} { Design}
% §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§
\begin { frame}
The libraries are more than 30k lines of code, organized in workspaces that allow easy development; the GUI has 29 types and more than 70 node operations.
\begin { figure} [!h]
\centering
\scalebox { 0.55} {
\begin { tikzpicture} [
place/.style={ rectangle,draw=blue!50,fill=blue!20,thick} ,
>=Stealth, thick, every node/.style={ font=\sffamily } ]
\node [place] (analysis) at (0,0.1) { analysis} ;
\node [place] (grammar) at (3,-2) { grammar} ;
\node [place] (grammarseparated) at (-3,-2) { grammar\_ separated} ;
\node [place] (execution) at (0,-1) { execution} ;
\node [place] (bisimilarity) at (-3,-1) { bisimilarity} ;
\node [place] (assert) at (0,-2) { assert} ;
\node [place] (rsprocess) at (0,-3) { rsprocess} ;
\draw [->] (rsprocess) -- (assert);
\draw [->] (rsprocess) -- (grammarseparated);
\draw [->,bend right=35] (rsprocess) to[bend right=55] (execution);
\draw [->] (rsprocess) -- (grammar);
\draw [->,bend right=32] (rsprocess) to[bend right=57] (analysis);
\draw [->] (assert) -- (execution);
\draw [->] (assert) -- (grammarseparated);
\draw [->] (assert) -- (grammar);
\draw [->] (execution) -- (analysis);
\draw [->] (execution) -- (grammarseparated);
\draw [->] (execution) -- (grammar);
\draw [->] (bisimilarity) -- (execution);
\draw [->] (grammar) to[bend right=10] (analysis);
\end { tikzpicture}
}
\scalebox { 0.55} {
\begin { tikzpicture} [scale=0.8, every node/.style={ scale=0.8} ,
place/.style={ rectangle,draw=blue!50,fill=blue!20,thick} ,
>=Stealth, thick, every node/.style={ font=\sffamily } ]
\node [place] (set) at (0,3) { Set} ;
\node [place] (reaction)at (4,3) { Reaction} ;
\node [place] (choices) at (8,3) { Choices} ;
\node [place] (label) at (-2,1.5) { Label} ;
\node [place] (env) at (2,1.5) { Environment} ;
\node [place] (process) at (6,1.5) { Process} ;
\node [place] (system) at (4,0) { System} ;
\node [place] (graph) at (0,0) { Graph} ;
% Set
\draw [->] (set) -- (reaction);
\draw [->,bend left=18] (set) to (choices);
\draw [->,bend right=25] (set) to (label);
\draw [->] (set) -- (graph);
\draw [->,bend right=35,looseness=1.1] (set) to (system);
\draw [->,bend right=12] (set) to (env);
% Label -> Graph
\draw [->] (label) -- (graph);
% Reaction
\draw [->,bend left=12] (reaction) to (process);
\draw [->,bend right=12] (reaction) to (env);
\draw [->,bend left=16] (reaction) to (system);
% Process
\draw [->] (process) -- (env);
\draw [->] (process) -- (system);
\draw [->,bend right=18] (process) to (choices);
\draw [->] (choices) to [bend left=2] (env);
\draw [->] (choices.south) to [bend left=25] (system.east);
\draw [->] (env) -- (system);
\draw [<->,bend left=15] (system) to (graph);
\end { tikzpicture}
}
\end { figure}
Grammars have been specified and developed for the RS structures using \( \texttt { lalrpop } \) .
\end { frame}
% §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§
\begin { frame} \frametitle { Reaction Systems}
\begin { tblr} { colspec={ X[b]X[h]} , measure = vbox}
{ \begin { minipage} { \dimexpr \linewidth -\tabcolsep } \raggedright %
Reaction System (RS) is a successful computational framework inspired by biological systems.
\vspace { 1em}
Key concepts: \textit { Facilitation} and \textit { Inhibition}
\vspace { 1em}
Reaction: \( ( R, I, P ) \)
Reaction System: \( \mathcal { A } = ( S, A ) \)
\end { minipage} } & { \captionsetup [figure] { font=tiny} \begin { figure}
\includegraphics [clip, trim=20mm 110mm 85mm 40mm, width=0.8\linewidth, ] { figures/Molecular_ Biology.pdf}
\caption { Principle of Positive and Negative Regulation\cite { Clark_ Pazdernik_ McGehee_ 2018} }
\end { figure} } \\
\end { tblr}
% S is called the background set of A and its elements are called entities
% A is a set of reactions
\end { frame}
% §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§
\begin { frame}
Three key properties:
\begin { enumerate} [label= (\roman * )]
\item no permanency: entities vanish unless sustained by a reaction;
\item no counting: the exact quantity of each entity is irrelevant;
\item threshold nature of resources: if an entity is present, it is present for all possible reactions.
\end { enumerate}
\end { frame}
% §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§
\begin { frame} \frametitle { Interactive Process}
The behavior of a RS is formalized through the notion of an interactive process:
\begin { center}
\begin { tblr} { colspec={ rll} , colsep=1pt}
Context Sequence: & \( \gamma \) & \( = { \{ C _ i \} } _ { i \in [ 0 ,n ] } \) , \\
Result Sequence: & \( \delta \) & { \( = { \{ D _ i \} } _ { i \in [ 0 , n ] } \) with \text { \tikz [baseline={(char.base)}] {
\node [anchor=base] (char) { \( D _ { i + 1 } : = res _ A ( D _ i \cup C _ i ) \) } ;
\draw [thick,blue!50,decorate,decoration={coil,aspect=0,pre length=4pt,post length=0pt, amplitude=1pt}] (char.south west) to (char.south east);
} } }
\end { tblr}
\end { center}
\begin { figure} [h]
\def \svgwidth { 0.7\linewidth }
\import { figures} { reaction_ system.pdf_ tex}
\end { figure}
% A Reaction System is then modeled as a process, with a externally given
% context, from which the result is calculated: given a set given from the
% context, it is summed to the previous result and for each reaction that is
% activated the products are then summed and are the next result
\end { frame}
% §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§
\begin { frame} \frametitle { SOS rules}
\begin { tblr} { colspec={ Q[c,m]Q[l,m]} }
{ \begin { bnf} (relation-sym-map = % chktex 36
{
{ ::=} = { \ensuremath { \Coloneqq } } ,
{ ->} = { } ,
{ :in:} = { \ensuremath { \subseteq } } ,
} ,)
$ P $ : ::= % chktex 26
| [$ M $ ] : % chktex 26
;; % chktex 26
$ M $ : ::= % chktex 26
| $ ( R, I, P ) $ : % chktex 26
| $ D $ : % chktex 26
| $ K $ : % chktex 26
| $ M \vert M $ : % chktex 26
;; % chktex 26
$ K $ : ::= % chktex 26
| \textbf { $ 0 $ } : % chktex 26
| $ X $ : % chktex 26
| $ C.K $ : % chktex 26
| $ K + K $ : % chktex 26
| $ \texttt { rec } X . K $ : % chktex 26
\end { bnf} } & { Mutual Exclusion of 2 looping processes:\\
\vspace { 1em}
{ \tt Environment: [\\
\quad k1 = (\{ \} .k1 + \{ act\_ 1\} .k1),\\
\quad k2 = (\{ \} .k2 + \{ act\_ 2\} .k2)\\
]\\
Initial Entities: \{ out\_ 1, out\_ 2\} \\
Context: [k1, k2]\\
Reactions: (} \( \ldots \) { \tt )} } \\ % chktex 9
\end { tblr}
% The behavior of a RS could be defined as a discrete time interactive
% process: a finite context sequence describes the entities provided by the
% environment at each step, the current state is determined by the union of
% the entities coming from the environment with those produced from the
% previous step and the state sequence is determined by applying all and
% only the enabled reactions to the set of entities available in the current
% state
% (R, I, P) is a reaction, D is a set of entities (a reaction that is always
% enabled), | (pipe) is the parallel composition
% 0 is the nil context written as nill, X is a process variable, C is a set
% of entities, + is non deterministic choice, rec is the recursive operator
% operational semantics follow the definitions
\end { frame}
% §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§
\begin { frame} { Graphs}
To explore the structure of RSs, methods are provided to create and manipulate graphs.
\begin { tblr} { colspec={ Q[l,b]Q[l,b]} ,width=\linewidth }
{ \includegraphics [scale=0.16] { figures/graph_ instructions.png} } & {
Domain specific languages have been\\ developed for:
\begin { itemize}
\item [$-$] specifying labels of nodes \& edges,
\item [$-$] specifying color of nodes \& edges,
\item [$-$] grouping of nodes,
\item [$-$] relabeling of edges.
\end { itemize} } \\
\end { tblr}
\end { frame}
% §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§
\begin { frame}
\begin { figure} [h]
\includegraphics [width=0.95\textwidth] { figures/lock_ instructions.png}
\end { figure}
\begin { figure} [h]
\includegraphics [scale=0.2] { figures/lock.pdf}
\end { figure}
\end { frame}
% §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§
\begin { frame} \frametitle { Positive Reaction Systems}
Instead of considering the absence of an element, consider the presence of a negative element:
\vspace { 0.5em}
Reaction: \( ( R, P ) \)
\vspace { 0.5em}
An equivalent Positive RS can be built for each RS.%
\begin { figure} [h]
\includegraphics [width=0.9\textwidth] { figures/to_ positive_ reactions.png}
\end { figure}
% To convert a list of reactions we first create a reaction for each product
% in each reaction, then all reactions that have the same product are
% converted together into their positive versions: One reaction is simply
% the positive reactants and the negative inhibitors that produce the
% positive product. The others are related to the absence of the product and
% are created from the prohibiting set, where for every reactants or
% inhibitor that does not allow the reaction to be enabled a reaction is
% created.
% The resulting reactions are then minimized, in order to reduce the
% complexity of the traces, even tho the behavior is the same.
\end { frame}
% §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§
\begin { frame} \frametitle { Slicing}
Dynamic slicing is a technique that helps a user to debug a program by simplifying a partial execution trace.
The goal is to highlight how a subset of the elements in a state were originated.
\begin { minipage} { \textwidth }
\centering
\begin { minipage} [t][0.5\textheight ][t]{ 0.75\textwidth }
\begin { figure}
\includegraphics [height=0.5\textheight] { figures/positive_ slice.png}
\end { figure}
\end { minipage} %
\begin { minipage} [t][0.5\textheight ][t]{ 0.25\textwidth }
\begin { figure}
\includegraphics [scale=0.25] { figures/counting.pdf}
\end { figure}
\end { minipage}
\end { minipage}
\end { frame}
% §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§
\begin { frame} \frametitle { Bisimulation}
A common question given two RS processes is if they behave the same.
Bisimulation is a binary relation between transition systems defined in therms of coinductive games, of fixed point theory and of logic.
Two algorithms have been implemented: by Kanellakis and Smolka, and by Paige and Tarjan.
\begin { figure}
\includegraphics [scale=0.25] { figures/bisimilarity.png}
\end { figure}
\end { frame}
% §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§
\begin { frame} \frametitle { Kanellakis and Smolka}
The algorithm by Kanellakis and Smolka is based on the concept of splitter.
\begin { tikzpicture} [baseline,
place/.style={ circle,draw=blue!50,fill=blue!20,thick} ,
>=Stealth, thick, every node/.style={ font=\sffamily } ]
\node [place] (s1) at (0,0) { \( s _ 1 \) } ;
\node [place] (s2) at (2,0) { \( s _ 2 \) } ;
\node [place] (s3) at (4,0) { \( s _ 3 \) } ;
\node [place] (s4) at (1,-2) { \( s _ 4 \) } ;
\node [place] (s5) at (3,-2) { \( s _ 5 \) } ;
\draw [->] (s1) -- (s4);
\draw [->] (s2) -- (s5);
\draw [->] (s2) to[bend left=20] (s3);
\draw [->] (s3) to[bend left=20] (s2);
\node [draw=black!80,fit=(s1) (s2) (s3),label=above right:$B_1$] { } ;
\node [draw=black!80,fit=(s4) (s5),label=below right:$B_2$] { } ;
\end { tikzpicture} %
\hspace { 0.3em} \( \to \) \hspace { 0.3em} %
\begin { tikzpicture} [baseline,
place/.style={ circle,draw=blue!50,fill=blue!20,thick} ,
>=Stealth, thick, every node/.style={ font=\sffamily } ]
\node [place] (s1) at (0,0) { \( s _ 1 \) } ;
\node [place] (s2) at (2,0) { \( s _ 2 \) } ;
\node [place] (s3) at (4,0) { \( s _ 3 \) } ;
\node [place] (s4) at (1,-2) { \( s _ 4 \) } ;
\node [place] (s5) at (3,-2) { \( s _ 5 \) } ;
\draw [->] (s1) -- (s4);
\draw [->] (s2) -- (s5);
\draw [->] (s2) to[bend left=20] (s3);
\draw [->] (s3) to[bend left=20] (s2);
\node [draw=blue!80,fit=(s1) (s2),label=above right:$B_1$] { } ;
\node [draw=blue!80,fit=(s3),label=above:$B_3$] { } ;
\node [draw=black!80,fit=(s4) (s5),label=below right:$B_2$] { } ;
\end { tikzpicture} %
\end { frame}
% §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§
\begin { frame} \frametitle { Paige and Tarjan}
The algorithm by Kanellakis and Smolka has time complexity \( O ( n \cdot m ) \) .
% where n is the number of states and m is the number of transitions
By reducing to the coarsest stable partition problem, the complexity can be reduced to \( O ( n \cdot \log ( m ) ) \) , since three-way splitting can be performed in time proportional to the size of the smaller of the two blocks.
% additional structures are needed for bookkeeping
\vspace { 1em}
The algorithm is specified over systems with only one action, but other systems can be translated into equivalent ones.
\begin { tblr} { width=\linewidth , colspec={ X[r]Q[c]X[l]} }
\begin { tikzpicture} [auto,
place/.style={ rectangle,draw=blue!50,fill=blue!20,thick,inner sep=0pt,
minimum size=6mm} ,
pre/.style={ <-,shorten <=1pt,>={ Stealth[round]} ,semithick} ,
post/.style={ ->,shorten >=1pt,>={ Stealth[round]} ,semithick}
]
\node [place] (P1) { \( P _ 1 \) } ;
\node [place] (P2) [right=of P1] { \( P _ 2 \) }
edge [pre] node [auto, swap] { \( \alpha _ 1 \) } (P1);
\node [place] (P3) [below=of P2] { \( P _ 3 \) }
edge [pre] node [auto] { \( \alpha _ 2 \) } (P1)
edge [pre] node [auto, swap] { \( \alpha _ 2 \) } (P2);
\end { tikzpicture}
& \( \raisebox { 3 . 5 em } { \to } \) &
\scalebox { 0.30} {
\begin { tikzpicture} [auto,
place/.style={ rectangle,draw=blue!50,fill=blue!20,thick,inner sep=0pt,
minimum size=6mm} ,
new/.style={ circle,draw=blue!30,fill=blue!10,thick,inner sep=0pt,
minimum size=6mm} ,
pre/.style={ <-,shorten <=1pt,>={ Stealth[round]} ,semithick} ,
post/.style={ ->,shorten >=1pt,>={ Stealth[round]} ,semithick}
]
\node [place] (P1) { \( P _ 1 \) } ;
\node [new] (p1e1) [above=of P1] { }
edge [pre] (P1);
\node [new] (p1e2) [above=of p1e1] { }
edge [pre] (p1e1);
\node [new] (p1e3) [above=of p1e2] { }
edge [pre] (p1e2);
\node [new] (a1) [right=of P1] { }
edge [pre] (P1);
\node [new] (a1e1) [above=of a1] { }
edge [pre] (a1);
\node [place] (P2) [right=of a1] { \( P _ 2 \) }
edge [pre] (a1);
\node [new] (p2e1) [above=of P2] { }
edge [pre] (P2);
\node [new] (p2e2) [above=of p2e1] { }
edge [pre] (p2e1);
\node [new] (p2e3) [above=of p2e2] { }
edge [pre] (p2e2);
\node [new] (a2) [below=of P2] { }
edge [pre] (P2);
\node [new] (a2e1) [right=of a2] { }
edge [pre] (a2);
\node [new] (a2e2) [right=of a2e1] { }
edge [pre] (a2e1);
\node [new] (a3) [below=of a1] { }
edge [pre] (P1);
\node [new] (a3e1) [below=of a3] { }
edge [pre] (a3);
\node [new] (a3e2) [below=of a3e1] { }
edge [pre] (a3e1);
\node [place] (P3) [below=of a2] { \( P _ 3 \) }
edge [pre] (a2)
edge [pre] (a3);
\node [new] (p3e1) [right=of P3] { }
edge [pre] (P3);
\node [new] (p3e2) [right=of p3e1] { }
edge [pre] (p3e1);
\node [new] (p3e3) [right=of p3e2] { }
edge [pre] (p3e2);
\end { tikzpicture}
}
\end { tblr}
% The operation is log-space
\end { frame}
% §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§
\end { section}
% ==============================================================================
\begin { section} { Conclusion}
% §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§
\begin { frame} \frametitle { Conclusion}
Key contributions:
\begin { itemize}
\item [$\bullet$] New RS Modeling Platform that aids in analysis and design, implemented in Rust. Provided both a CLI and a GUI.%
\item [$\bullet$] Comprehensive Feature Set: simulation of RS, bisimulation of graphs, trace slicing, graph generation with Dot, GraphML and SVG outputs, loop analysis, automated conversion between RS types.
\item [$\bullet$] Improved performance and usability compared to previous software written in prolog and python.
\end { itemize}
\end { frame}
% §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§
2025-11-29 16:34:25 +01:00
\end { section}