<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>ReactICS: Model Checking for Reaction Systems</title>
    <link>https://reactics.org/</link>
    <description>Recent content on ReactICS: Model Checking for Reaction Systems</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-gb</language>
    <managingEditor>artur@meski.io (Artur Meski)</managingEditor>
    <webMaster>artur@meski.io (Artur Meski)</webMaster>
    <copyright>ReactICS Research Team (CC BY 4.0)</copyright>
    <atom:link href="https://reactics.org/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Papers</title>
      <link>https://reactics.org/papers/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>artur@meski.io (Artur Meski)</author>
      <guid>https://reactics.org/papers/</guid>
      <description>&lt;h1 id=&#34;papers&#34;&gt;Papers&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A. Meski, M. Koutny, L. Mikulski, I. Petre, W. Penczek, M. Piatkowski: &lt;strong&gt;Model checking for distributed reaction systems with temporal-epistemic properties&lt;/strong&gt;. Nat. Comput. 24(4): 1101-1117 (2025)&lt;/li&gt;&#xA;&lt;li&gt;A. Meski, M. Koutny, L. Mikulski, W. Penczek: &lt;strong&gt;Reaction mining for reaction systems&lt;/strong&gt;. Nat. Comput. 23(2): 323-343 (2024)&lt;/li&gt;&#xA;&lt;li&gt;A. Meski, M. Koutny, W. Penczek: &lt;strong&gt;Reaction Mining for Reaction Systems&lt;/strong&gt;. UCNC 2018: 131-144&lt;/li&gt;&#xA;&lt;li&gt;A. Meski, M. Koutny, W. Penczek: &lt;strong&gt;Verification of Linear-Time Temporal Properties for Reaction Systems with Discrete Concentrations&lt;/strong&gt;. Fundam. Informaticae 154(1-4): 289-306 (2017)&lt;/li&gt;&#xA;&lt;li&gt;A. Meski, M. Koutny, W. Penczek: &lt;strong&gt;Towards Quantitative Verification of Reaction Systems&lt;/strong&gt;. UCNC 2016: 142-154&lt;/li&gt;&#xA;&lt;li&gt;A. Meski, W. Penczek, G. Rozenberg: &lt;strong&gt;Model checking temporal properties of reaction systems&lt;/strong&gt;. Inf. Sci. 313: 22-42 (2015)&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
      <content:encoded><![CDATA[<h1 id="papers">Papers</h1>
<ul>
<li>A. Meski, M. Koutny, L. Mikulski, I. Petre, W. Penczek, M. Piatkowski: <strong>Model checking for distributed reaction systems with temporal-epistemic properties</strong>. Nat. Comput. 24(4): 1101-1117 (2025)</li>
<li>A. Meski, M. Koutny, L. Mikulski, W. Penczek: <strong>Reaction mining for reaction systems</strong>. Nat. Comput. 23(2): 323-343 (2024)</li>
<li>A. Meski, M. Koutny, W. Penczek: <strong>Reaction Mining for Reaction Systems</strong>. UCNC 2018: 131-144</li>
<li>A. Meski, M. Koutny, W. Penczek: <strong>Verification of Linear-Time Temporal Properties for Reaction Systems with Discrete Concentrations</strong>. Fundam. Informaticae 154(1-4): 289-306 (2017)</li>
<li>A. Meski, M. Koutny, W. Penczek: <strong>Towards Quantitative Verification of Reaction Systems</strong>. UCNC 2016: 142-154</li>
<li>A. Meski, W. Penczek, G. Rozenberg: <strong>Model checking temporal properties of reaction systems</strong>. Inf. Sci. 313: 22-42 (2015)</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Using ReactICS</title>
      <link>https://reactics.org/using/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>artur@meski.io (Artur Meski)</author>
      <guid>https://reactics.org/using/</guid>
      <description>&lt;p&gt;Tested on:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;macOS 15.4 (Sequoia)&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;FreeBSD 14.x&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Arch Linux (kernel 6.19), GCC 15.2, Bison 3.8.2&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;bdd-based-module&#34;&gt;BDD-Based Module&lt;/h1&gt;&#xA;&lt;h2 id=&#34;dependencies&#34;&gt;Dependencies&lt;/h2&gt;&#xA;&lt;p&gt;A C++14 compiler, GNU make, Bison, and flex are required. The parser was originally developed against Bison 2.5, but more recent versions (tested up to 3.8.2) build without changes.&lt;/p&gt;&#xA;&lt;p&gt;On macOS, if you have MacPorts installed, it should be sufficient to just run:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;% sudo port install bison&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;On FreeBSD you may need to install GNU make:&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Tested on:</p>
<ul>
<li><em>macOS 15.4 (Sequoia)</em></li>
<li><em>FreeBSD 14.x</em></li>
<li><em>Arch Linux (kernel 6.19), GCC 15.2, Bison 3.8.2</em></li>
</ul>
<h1 id="bdd-based-module">BDD-Based Module</h1>
<h2 id="dependencies">Dependencies</h2>
<p>A C++14 compiler, GNU make, Bison, and flex are required. The parser was originally developed against Bison 2.5, but more recent versions (tested up to 3.8.2) build without changes.</p>
<p>On macOS, if you have MacPorts installed, it should be sufficient to just run:</p>





<pre tabindex="0"><code>% sudo port install bison</code></pre><p>On FreeBSD you may need to install GNU make:</p>





<pre tabindex="0"><code># pkg install gmake</code></pre><p>On Arch Linux all required tools are typically already present via <code>base-devel</code>. If not, install them with:</p>





<pre tabindex="0"><code># pacman -S --needed base-devel bison flex</code></pre><p>On Debian/Ubuntu:</p>





<pre tabindex="0"><code># apt install build-essential bison flex</code></pre><h2 id="build">Build</h2>
<p>Clone the ReactICS&rsquo;s repository and run the build procedure:</p>





<pre tabindex="0"><code>% git clone https://codeberg.org/arturmeski/reactics.git
% cd reactics
% ./reactics setup</code></pre><h2 id="examples">Examples</h2>
<p>The <code>examples</code> directory contains sample input files specified using <a href="/rssl/">RSSL</a>.</p>
<h3 id="multi-agent-reaction-systems-rsctlk-verification">Multi-agent reaction systems (rsCTLK verification)</h3>
<p>To quickly test the BDD module you can perform verification of the TGC controller consiting of three trains:</p>





<pre tabindex="0"><code>$ ./reactics bdd -c f1 examples/bdd/tgc.drs</code></pre><p>The above should print:</p>





<pre tabindex="0"><code> ------------------------------------------------
 -- ReactICS -- Reaction Systems Model Checker --
 ------------------------------------------------

Using BDD-based Bounded Model Checking
Formula ((EF(E&lt; proc0.allowed &gt;X(proc0.in)) AND EF(E&lt; proc1.allowed &gt;X(proc1.in))) AND EF(E&lt; proc2.allowed &gt;X(proc2.in))) holds</code></pre><h1 id="smt-based-module">SMT-Based Module</h1>
<h2 id="installation">Installation</h2>
<p>Python 3 with the Z3 module installed should be sufficient to run the SMT-based module of ReactICS.</p>
<p>On Arch Linux, install the system Z3 package (which provides the Python bindings):</p>





<pre tabindex="0"><code># pacman -S z3</code></pre><p>On Debian/Ubuntu:</p>





<pre tabindex="0"><code># apt install python3-z3</code></pre><p>Alternatively, on any platform, install via pip:</p>





<pre tabindex="0"><code>$ pip install z3-solver</code></pre><h2 id="usage--examples">Usage &amp; Examples</h2>
<h3 id="reachability">Reachability</h3>
<p>To test the SMT module you can perform reachability verification of the scalable chain system:</p>
<p>Running the benchmark without any arguments tells us what parameters are available:</p>





<pre tabindex="0"><code>$ ./reactics smt examples/smt/scalable_chain.py

 ------------------------------------------------
 -- ReactICS -- Reaction Systems Model Checker --
 ------------------------------------------------

arguments: &lt;chainLen&gt; &lt;maxConc&gt; &lt;formulaNumber&gt;</code></pre><p>We may execute the benchmark for <code>chainLen=2</code>, <code>maxConc=3</code>, and <code>formulaNumber=1</code> using the following command:</p>





<pre tabindex="0"><code>$ ./reactics smt examples/smt/scalable_chain.py 2 3 1</code></pre><h3 id="rsltl-verification">rsLTL verification</h3>
<p>To test the SMT module for rsLTL verification the scalable chain system benchmark may be used.</p>





<pre tabindex="0"><code>$ ./reactics smt examples/smt/scalable_chain.py 2 5 1</code></pre><h3 id="reaction-synthesis">Reaction synthesis</h3>
<p>To test the reaction synthesis approach on a mutual exclusion protocol modelling three processes, run the following command (three processes, parametric verification, result optimised with OptSMT):</p>





<pre tabindex="0"><code>$ ./reactics smt examples/smt/mutex_param.py 3 p -o</code></pre><p>To check the available parameters for the benchmark, we run it with <code>-h</code>:</p>





<pre tabindex="0"><code>$ ./reactics smt examples/smt/mutex_param.py -h

 ------------------------------------------------
 -- ReactICS -- Reaction Systems Model Checker --
 ------------------------------------------------

usage: mutex_param.py [-h] [-v] [-o] scaling {p,np-p,np-np}

positional arguments:
  scaling         scaling parameter value
  {p,np-p,np-np}  Selects the mode: p - parameter synthesis (parametric
                  implementation), np-p - non-parametric with parametric
                  implementation (with the parameters substituted), np-np -
                  non-parametric with non-parametric implementation
                  (parameters substituted)

optional arguments:
  -h, --help      show this help message and exit
  -v, --verbose   turn verbosity on
  -o, --optimise  minimise the parametric computation result</code></pre>]]></content:encoded>
    </item>
    <item>
      <title>RSSL</title>
      <link>https://reactics.org/rssl/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>artur@meski.io (Artur Meski)</author>
      <guid>https://reactics.org/rssl/</guid>
      <description>&lt;h1 id=&#34;reaction-systems-specification-language&#34;&gt;Reaction Systems Specification Language&lt;/h1&gt;&#xA;&lt;p&gt;Here is an example of how to encode the Train-Gate-Controller model as a Distributed Reaction System (with Context Automaton):&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;options { use-context-automaton; make-progressive; };&#xA;reactions {&#xA;&#xA;    train0 {&#xA;        {{out}, {} -&amp;gt; {approach}};&#xA;        {{approach}, {req} -&amp;gt; {req}};&#xA;        {{allowed}, {} -&amp;gt; {in}};&#xA;        {{in}, {} -&amp;gt; {out,leave}};&#xA;        {{req}, {in} -&amp;gt; {req}};&#xA;    };&#xA;&#xA;    train1 {&#xA;        {{out}, {} -&amp;gt; {approach}};&#xA;        {{approach}, {req} -&amp;gt; {req}};&#xA;        {{allowed}, {} -&amp;gt; {in}};&#xA;        {{in}, {} -&amp;gt; {out,leave}};&#xA;        {{req}, {in} -&amp;gt; {req}};&#xA;    };&#xA;&#xA;    train2 {&#xA;        {{out}, {} -&amp;gt; {approach}};&#xA;        {{approach}, {req} -&amp;gt; {req}};&#xA;        {{allowed}, {} -&amp;gt; {in}};&#xA;        {{in}, {} -&amp;gt; {out,leave}};&#xA;        {{req}, {in} -&amp;gt; {req}};&#xA;    };&#xA;};&#xA;&#xA;context-automaton {&#xA;    states { init, green, red };&#xA;    init-state { init };&#xA;    transitions {&#xA;        { train0={out} train1={out} train2={out} }: init -&amp;gt; green;&#xA;        { train0={allowed} }: green -&amp;gt; red : train0.req;&#xA;        { train1={allowed} }: green -&amp;gt; red : train1.req;&#xA;        { train2={allowed} }: green -&amp;gt; red : train2.req;&#xA;        { train0={} }: green -&amp;gt; green : ~train0.req AND ~train1.req AND ~train2.req;&#xA;        { train1={} }: green -&amp;gt; green : ~train0.req AND ~train1.req AND ~train2.req;&#xA;        { train2={} }: green -&amp;gt; green : ~train0.req AND ~train1.req AND ~train2.req;&#xA;        { train0={} }: red -&amp;gt; green : train0.leave;&#xA;        { train1={} }: red -&amp;gt; green : train1.leave;&#xA;        { train2={} }: red -&amp;gt; green : train2.leave;&#xA;        { train0={} }: red -&amp;gt; red : ~train0.leave AND ~train1.leave AND ~train2.leave;&#xA;        { train1={} }: red -&amp;gt; red : ~train0.leave AND ~train1.leave AND ~train2.leave;&#xA;        { train2={} }: red -&amp;gt; red : ~train0.leave AND ~train1.leave AND ~train2.leave;&#xA;&#xA;    };&#xA;};&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Properties expressed in rsCTLK can be specified in the following way:&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h1 id="reaction-systems-specification-language">Reaction Systems Specification Language</h1>
<p>Here is an example of how to encode the Train-Gate-Controller model as a Distributed Reaction System (with Context Automaton):</p>





<pre tabindex="0"><code>options { use-context-automaton; make-progressive; };
reactions {

    train0 {
        {{out}, {} -&gt; {approach}};
        {{approach}, {req} -&gt; {req}};
        {{allowed}, {} -&gt; {in}};
        {{in}, {} -&gt; {out,leave}};
        {{req}, {in} -&gt; {req}};
    };

    train1 {
        {{out}, {} -&gt; {approach}};
        {{approach}, {req} -&gt; {req}};
        {{allowed}, {} -&gt; {in}};
        {{in}, {} -&gt; {out,leave}};
        {{req}, {in} -&gt; {req}};
    };

    train2 {
        {{out}, {} -&gt; {approach}};
        {{approach}, {req} -&gt; {req}};
        {{allowed}, {} -&gt; {in}};
        {{in}, {} -&gt; {out,leave}};
        {{req}, {in} -&gt; {req}};
    };
};

context-automaton {
    states { init, green, red };
    init-state { init };
    transitions {
        { train0={out} train1={out} train2={out} }: init -&gt; green;
        { train0={allowed} }: green -&gt; red : train0.req;
        { train1={allowed} }: green -&gt; red : train1.req;
        { train2={allowed} }: green -&gt; red : train2.req;
        { train0={} }: green -&gt; green : ~train0.req AND ~train1.req AND ~train2.req;
        { train1={} }: green -&gt; green : ~train0.req AND ~train1.req AND ~train2.req;
        { train2={} }: green -&gt; green : ~train0.req AND ~train1.req AND ~train2.req;
        { train0={} }: red -&gt; green : train0.leave;
        { train1={} }: red -&gt; green : train1.leave;
        { train2={} }: red -&gt; green : train2.leave;
        { train0={} }: red -&gt; red : ~train0.leave AND ~train1.leave AND ~train2.leave;
        { train1={} }: red -&gt; red : ~train0.leave AND ~train1.leave AND ~train2.leave;
        { train2={} }: red -&gt; red : ~train0.leave AND ~train1.leave AND ~train2.leave;

    };
};</code></pre><p>Properties expressed in rsCTLK can be specified in the following way:</p>





<pre tabindex="0"><code>rsctlk-property { f1 : EF( E&lt;train0.allowed&gt;X( train0.in ) ) AND EF( E&lt;train1.allowed&gt;X( train1.in ) ) AND EF( E&lt;train2.allowed&gt;X( train2.in ) ) };

rsctlk-property { f2 : EF( train0.approach AND train1.approach AND train2.approach ) };

rsctlk-property { f3 : AG( train0.in IMPLIES K[train0](~train1.in AND ~train2.in) ) };

rsctlk-property { f4 : AG( train0.in IMPLIES C[train0,train1,train2](~train1.in AND ~train2.in) ) };</code></pre>]]></content:encoded>
    </item>
    <item>
      <title>Contributors</title>
      <link>https://reactics.org/contrib/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>artur@meski.io (Artur Meski)</author>
      <guid>https://reactics.org/contrib/</guid>
      <description>&lt;h1 id=&#34;current-and-past-contributors&#34;&gt;Current and past contributors&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Maciej Koutny&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://meski.io&#34;&gt;Artur Meski&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Łukasz Mikulski&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://home.ipipan.waw.pl/w.penczek/&#34;&gt;Wojciech Penczek&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Ion Petre&lt;/li&gt;&#xA;&lt;li&gt;Marcin Piątkowski&lt;/li&gt;&#xA;&lt;li&gt;Grzegorz Rozenberg&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;em&gt;(in alphabetical order)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;current-maintainers-of-reactics&#34;&gt;Current Maintainers of ReactICS&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://meski.io&#34;&gt;Artur Meski&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Marcin Piątkowski&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;contributing&#34;&gt;Contributing&lt;/h1&gt;&#xA;&lt;p&gt;If you would like to contribute or use ReactICS to implement your experiments or ideas,&#xA;please feel free to reach out to us. We will do our best to help you get started with the tool and the source code.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h1 id="current-and-past-contributors">Current and past contributors</h1>
<ul>
<li>Maciej Koutny</li>
<li><a href="https://meski.io">Artur Meski</a></li>
<li>Łukasz Mikulski</li>
<li><a href="https://home.ipipan.waw.pl/w.penczek/">Wojciech Penczek</a></li>
<li>Ion Petre</li>
<li>Marcin Piątkowski</li>
<li>Grzegorz Rozenberg</li>
</ul>
<p><em>(in alphabetical order)</em></p>
<h1 id="current-maintainers-of-reactics">Current Maintainers of ReactICS</h1>
<ul>
<li><a href="https://meski.io">Artur Meski</a></li>
<li>Marcin Piątkowski</li>
</ul>
<h1 id="contributing">Contributing</h1>
<p>If you would like to contribute or use ReactICS to implement your experiments or ideas,
please feel free to reach out to us. We will do our best to help you get started with the tool and the source code.</p>
<p>You can contribute by creating a <a href="https://codeberg.org/arturmeski/reactics/pulls">pull request</a>.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
