<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[Mitja Bezenšek]]></title>
  <link href="http://bezensek.com/atom.xml" rel="self"/>
  <link href="http://bezensek.com/"/>
  <updated>2015-05-08T00:54:09+02:00</updated>
  <id>http://bezensek.com/</id>
  <author>
    <name><![CDATA[Mitja Bezenšek]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[Deterministic finite state machine minimization]]></title>
    <link href="http://bezensek.com/blog/2015/05/08/deterministic-finite-state-machine-minimization/"/>
    <updated>2015-05-08T00:48:59+02:00</updated>
    <id>http://bezensek.com/blog/2015/05/08/deterministic-finite-state-machine-minimization</id>
    <content type="html"><![CDATA[<p>I have received a question about how to approach DFSM minimization in <a href="http://bezensek.com/blog/2014/08/13/deterministic-finite-state-machine-implementation-in-c-number/">one of the previous posts</a>. This is an attempt to answer that question.</p>

<h2>What is DFSM minimization?</h2>

<p>First, let us consider what does it mean for two DFSM to be <strong>equivalent</strong>? Imagine having two DFSM that both accept the same input symbols. You then pass all the possible inputs to those two machines. If and only if the answers are the same for all the inputs then the two machines are equivalent. That is: they accept exactly the same inputs, even though their inner workings might not be the same.</p>

<p>This means that there are many equivalent DFSM. For example all three DFSM in the below picture accept the same input which can be written as a regular expression (0+1)<sup>*</sup>.</p>

<p><img src="http://bezensek.com/img/Equivalence.png" title="Deterministic finite state machine equivalence" alt="Deterministic finite state machine equivalence"></br></p>

<p>The three DFSM vary in the number of states and also in the number of the transitions. Nonetheless, I hope you will agree with me that they all accept the same input.</p>

<!-- more -->


<p>In this example case the machines are simple. But what would happen if the machines were complex - how would we determine if they are equivalent?</p>

<p>The answer is minimization. Minimization <strong>transforms</strong> a machine <strong>into an equivalent machine</strong> that has <strong>minimum number of states</strong>.  We can then easily check if two DFSM are are equivalent. We just need to check if they have the same number of states and if all the transitions are the same.</p>

<h2>Why minimization</h2>

<p>Like I described in the previous paragraph you can use minimization to check the equivalence of the DFSM. Two other benefits (when using DFSM in programming) are:</p>

<ul>
<li>performance increase due to less states and transitions (faster input checking, less memory consumed),</li>
<li>easier reasoning about the minimized machine since it has fewer moving parts.</li>
</ul>


<h2>Two types of states to remove</h2>

<p>When minimizing there are <a href="http://en.wikipedia.org/wiki/DFA_minimization">two types of states</a> that we can either completly remove or merge with other states of the machine:</p>

<blockquote><ul>
<li><strong>unreachable states</strong> are those states that are not reachable from the initial state of the DFA, for any input string,</li>
<li><strong>nondistinguishable states</strong> are those that cannot be distinguished from one another for any input string.</li>
</ul>
</blockquote>

<h2>Unreachable states</h2>

<p>First, let us look at an algorithm for finding the <a href="http://en.wikipedia.org/wiki/DFA_minimization#Unreachable_states">unreachable states</a>. The algorithm starts from the known reachable states which are the start states - the start states are always reachable. It then expands the list of reachable states by adding all the states that can be reached from the start states. It continues this expansion using the newly added states until it cannot add any new states to the list of reachable states. The states of the DFSM that did not end up in the list of reachable states are unreachable.</p>

<p>To me this algorithm feels like flooding the pipes: we have a system of pipes some of which are connected and some of which are not. We open the water and check which pipes did the water reach and which it did not reach.</p>

<p>Below is the algorithm in C#<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup>:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="kt">var</span> <span class="n">reachableStates</span> <span class="p">=</span> <span class="k">new</span> <span class="n">HashSet</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">&gt;{</span><span class="n">Q0</span><span class="p">};</span>
</span><span class='line'><span class="kt">var</span> <span class="n">newStates</span> <span class="p">=</span> <span class="k">new</span> <span class="n">HashSet</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">&gt;{</span><span class="n">Q0</span><span class="p">};</span>
</span><span class='line'><span class="k">do</span><span class="p">{</span>
</span><span class='line'>  <span class="kt">var</span> <span class="n">temp</span> <span class="p">=</span> <span class="k">new</span> <span class="n">HashSet</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">&gt;();</span>
</span><span class='line'>  <span class="k">foreach</span> <span class="p">(</span><span class="kt">var</span> <span class="n">q</span> <span class="k">in</span> <span class="n">newStates</span><span class="p">){</span>
</span><span class='line'>      <span class="k">foreach</span> <span class="p">(</span><span class="kt">var</span> <span class="n">c</span> <span class="k">in</span> <span class="n">Sigma</span><span class="p">){</span>
</span><span class='line'>          <span class="kt">var</span> <span class="n">transition</span> <span class="p">=</span> <span class="n">Delta</span><span class="p">.</span><span class="n">Find</span><span class="p">(</span><span class="n">t</span> <span class="p">=&gt;</span> <span class="n">t</span><span class="p">.</span><span class="n">StartState</span> <span class="p">==</span> <span class="n">q</span> <span class="p">&amp;&amp;</span>
</span><span class='line'>                                             <span class="n">t</span><span class="p">.</span><span class="n">Symbol</span> <span class="p">==</span> <span class="n">c</span><span class="p">);</span>
</span><span class='line'>            <span class="k">if</span> <span class="p">(</span><span class="n">transition</span> <span class="p">!=</span> <span class="k">null</span><span class="p">){</span>
</span><span class='line'>              <span class="n">temp</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span><span class="n">transition</span><span class="p">.</span><span class="n">EndState</span><span class="p">);</span>
</span><span class='line'>            <span class="p">}</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'>    <span class="n">temp</span><span class="p">.</span><span class="n">ExceptWith</span><span class="p">(</span><span class="n">reachableStates</span><span class="p">);</span>
</span><span class='line'>    <span class="n">newStates</span> <span class="p">=</span> <span class="n">temp</span><span class="p">;</span>
</span><span class='line'>    <span class="n">reachableStates</span><span class="p">.</span><span class="n">UnionWith</span><span class="p">(</span><span class="n">newStates</span><span class="p">);</span>
</span><span class='line'><span class="p">}</span> <span class="k">while</span> <span class="p">(</span><span class="n">newStates</span><span class="p">.</span><span class="n">Count</span> <span class="p">&gt;</span> <span class="m">0</span><span class="p">);</span>
</span><span class='line'><span class="kt">var</span> <span class="n">unreachableStates</span> <span class="p">=</span> <span class="n">Q</span><span class="p">.</span><span class="n">Where</span><span class="p">(</span><span class="n">q</span> <span class="p">=&gt;</span> <span class="p">!</span><span class="n">reachableStates</span><span class="p">.</span><span class="n">Contains</span><span class="p">(</span><span class="n">q</span><span class="p">));</span>
</span></code></pre></td></tr></table></div></figure>


<p>The part of the algorithm that finds the possible transitions from the new states is quite inefficient. For each new state it tries all the symbols from <code>sigma</code>. This causes us to loop over all the transitions for every symbol and every new state. A better solution is shown below. In it we are just selecting all the states that are reachable from the current state:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="k">foreach</span> <span class="p">(</span><span class="kt">var</span> <span class="n">q</span> <span class="k">in</span> <span class="n">newStates</span><span class="p">){</span>
</span><span class='line'>  <span class="kt">var</span> <span class="n">reachableFromQ</span> <span class="p">=</span> <span class="n">Delta</span><span class="p">.</span><span class="n">FindAll</span><span class="p">(</span><span class="n">t</span> <span class="p">=&gt;</span> <span class="n">t</span><span class="p">.</span><span class="n">StartState</span> <span class="p">==</span> <span class="n">q</span><span class="p">)</span>
</span><span class='line'>                            <span class="p">.</span><span class="n">Select</span><span class="p">(</span><span class="n">t</span> <span class="p">=&gt;</span> <span class="n">t</span><span class="p">.</span><span class="n">EndState</span><span class="p">);</span>
</span><span class='line'>    <span class="n">temp</span><span class="p">.</span><span class="n">UnionWith</span><span class="p">(</span><span class="n">reachableFromQ</span><span class="p">);</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>Now that we have found all the unreachable states we can remove them (along with transitions to and from them):</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="p">=</span> <span class="n">Delta</span><span class="p">.</span><span class="n">Count</span> <span class="p">-</span> <span class="m">1</span><span class="p">;</span> <span class="n">i</span> <span class="p">&gt;=</span> <span class="m">0</span><span class="p">;</span> <span class="n">i</span><span class="p">--){</span>
</span><span class='line'>  <span class="kt">var</span> <span class="n">transition</span> <span class="p">=</span> <span class="n">Delta</span><span class="p">[</span><span class="n">i</span><span class="p">];</span>
</span><span class='line'>  <span class="k">if</span> <span class="p">(</span><span class="n">unreachableStates</span><span class="p">.</span><span class="n">Contains</span><span class="p">(</span><span class="n">transition</span><span class="p">.</span><span class="n">EndState</span><span class="p">)</span> <span class="p">||</span>
</span><span class='line'>      <span class="n">unreachableStates</span><span class="p">.</span><span class="n">Contains</span><span class="p">(</span><span class="n">transition</span><span class="p">.</span><span class="n">StartState</span><span class="p">)){</span>
</span><span class='line'>      <span class="n">Delta</span><span class="p">.</span><span class="n">Remove</span><span class="p">(</span><span class="n">transition</span><span class="p">);</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'><span class="k">foreach</span> <span class="p">(</span><span class="kt">var</span> <span class="n">unreachableState</span> <span class="k">in</span> <span class="n">unreachableStates</span><span class="p">){</span>
</span><span class='line'>  <span class="n">Q</span><span class="p">.</span><span class="n">Remove</span><span class="p">(</span><span class="n">unreachableState</span><span class="p">);</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<h2>Nondistinguishable states</h2>

<p>And now for the hard part - the nondistinguishable states. Here, we will use <a href="http://en.wikipedia.org/wiki/DFA_minimization#Brzozowski.27s_algorithm">Brzozowski&rsquo;s algorithm for minimization</a>, which works like this:</p>

<blockquote><p>Reversing the edges of a DFA produces a non-deterministic finite automaton (NFA) for the reversal of the original language, and converting this NFA to a DFA using the standard powerset construction (constructing only the reachable states of the converted DFA) leads to a minimal DFA for the same reversed language. Repeating this reversal operation a second time produces a minimal DFA for the original language.</p></blockquote>

<p>To implement the described algorithm we will need the following:</p>

<ol>
<li>an algorithm that reverses a DFSM and produces a corresponding NDFSM,</li>
<li>an algorithm for powerset construction (this algorithm converts a given NDFSM into an equivalent DFSM)</li>
<li>an algorithm for detecting and removing unreachable states (see above).</li>
</ol>


<h3>Reversing a DFSM</h3>

<p>The algorithm for reversing a DFSM is quite easy to implement and is presented below <sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup>:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="k">private</span> <span class="n">NDFSM</span> <span class="nf">Reverse</span><span class="p">(</span><span class="n">DFSM</span> <span class="n">d</span><span class="p">){</span>
</span><span class='line'>    <span class="kt">var</span> <span class="n">delta</span> <span class="p">=</span> <span class="k">new</span> <span class="n">List</span><span class="p">&lt;</span><span class="n">Transition</span><span class="p">&gt;();</span>
</span><span class='line'>    <span class="k">foreach</span> <span class="p">(</span><span class="kt">var</span> <span class="n">transition</span> <span class="k">in</span> <span class="n">d</span><span class="p">.</span><span class="n">Delta</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>        <span class="n">delta</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span><span class="k">new</span> <span class="n">Transition</span><span class="p">(</span><span class="n">transition</span><span class="p">.</span><span class="n">EndState</span><span class="p">,</span>
</span><span class='line'>                                 <span class="n">transition</span><span class="p">.</span><span class="n">Symbol</span><span class="p">,</span>
</span><span class='line'>                                 <span class="n">transition</span><span class="p">.</span><span class="n">StartState</span><span class="p">));</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'>    <span class="k">return</span> <span class="k">new</span> <span class="nf">NDFSM</span><span class="p">(</span><span class="n">d</span><span class="p">.</span><span class="n">Q</span><span class="p">,</span> <span class="n">d</span><span class="p">.</span><span class="n">Sigma</span><span class="p">,</span> <span class="n">delta</span><span class="p">,</span> <span class="n">d</span><span class="p">.</span><span class="n">F</span><span class="p">,</span> <span class="n">d</span><span class="p">.</span><span class="n">Q0</span><span class="p">);</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<h3>Powerset construction</h3>

<p>Here is <a href="http://bezensek.com/blog/2015/04/30/powerset-construction/">how I implemented the powerset constructions</a> algorithm in my previous post<sup id="fnref:3"><a href="#fn:3" rel="footnote">3</a></sup>:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
<span class='line-number'>39</span>
<span class='line-number'>40</span>
<span class='line-number'>41</span>
<span class='line-number'>42</span>
<span class='line-number'>43</span>
<span class='line-number'>44</span>
<span class='line-number'>45</span>
<span class='line-number'>46</span>
<span class='line-number'>47</span>
<span class='line-number'>48</span>
<span class='line-number'>49</span>
<span class='line-number'>50</span>
<span class='line-number'>51</span>
<span class='line-number'>52</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'> <span class="k">private</span> <span class="k">static</span> <span class="n">DFSM</span> <span class="nf">PowersetConstruction</span><span class="p">(</span><span class="n">NDFSM</span> <span class="n">ndfsm</span><span class="p">){</span>
</span><span class='line'>     <span class="kt">var</span> <span class="n">Q</span> <span class="p">=</span> <span class="k">new</span> <span class="n">List</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">&gt;();</span>
</span><span class='line'>     <span class="kt">var</span> <span class="n">Sigma</span> <span class="p">=</span> <span class="n">ndfsm</span><span class="p">.</span><span class="n">Sigma</span><span class="p">.</span><span class="n">ToList</span><span class="p">();</span>
</span><span class='line'>     <span class="kt">var</span> <span class="n">Delta</span> <span class="p">=</span> <span class="k">new</span> <span class="n">List</span><span class="p">&lt;</span><span class="n">Transition</span><span class="p">&gt;();</span>
</span><span class='line'>     <span class="kt">var</span> <span class="n">Q0</span> <span class="p">=</span> <span class="k">new</span> <span class="n">List</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">&gt;</span> <span class="p">{</span> <span class="kt">string</span><span class="p">.</span><span class="n">Join</span><span class="p">(</span><span class="s">&quot; &quot;</span><span class="p">,</span> <span class="n">ndfsm</span><span class="p">.</span><span class="n">Q0</span><span class="p">)</span> <span class="p">};</span>
</span><span class='line'>     <span class="kt">var</span> <span class="n">F</span> <span class="p">=</span> <span class="k">new</span> <span class="n">List</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">&gt;();</span>
</span><span class='line'>
</span><span class='line'>     <span class="kt">var</span> <span class="n">processed</span> <span class="p">=</span> <span class="k">new</span> <span class="n">List</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">&gt;();</span>
</span><span class='line'>     <span class="kt">var</span> <span class="n">queue</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Queue</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">&gt;();</span>
</span><span class='line'>     <span class="n">queue</span><span class="p">.</span><span class="n">Enqueue</span><span class="p">(</span><span class="kt">string</span><span class="p">.</span><span class="n">Join</span><span class="p">(</span><span class="s">&quot;,&quot;</span><span class="p">,</span> <span class="n">ndfsm</span><span class="p">.</span><span class="n">Q0</span><span class="p">));</span>
</span><span class='line'>
</span><span class='line'>     <span class="k">while</span> <span class="p">(</span><span class="n">queue</span><span class="p">.</span><span class="n">Count</span> <span class="p">&gt;</span> <span class="m">0</span><span class="p">){</span>
</span><span class='line'>        <span class="kt">var</span> <span class="n">setState</span> <span class="p">=</span> <span class="n">queue</span><span class="p">.</span><span class="n">Dequeue</span><span class="p">();</span>
</span><span class='line'>        <span class="n">processed</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span><span class="n">setState</span><span class="p">);</span>
</span><span class='line'>        <span class="n">Q</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span><span class="n">CleanupState</span><span class="p">(</span><span class="n">setState</span><span class="p">));</span>
</span><span class='line'>
</span><span class='line'>        <span class="kt">var</span> <span class="n">statesInCurrentSetState</span> <span class="p">=</span> <span class="n">setState</span><span class="p">.</span><span class="n">Split</span><span class="p">(</span><span class="sc">&#39;,&#39;</span><span class="p">).</span><span class="n">ToList</span><span class="p">();</span>
</span><span class='line'>        <span class="k">foreach</span> <span class="p">(</span><span class="kt">var</span> <span class="n">state</span> <span class="k">in</span> <span class="n">statesInCurrentSetState</span><span class="p">){</span>
</span><span class='line'>           <span class="k">if</span> <span class="p">(</span><span class="n">ndfsm</span><span class="p">.</span><span class="n">F</span><span class="p">.</span><span class="n">Contains</span><span class="p">(</span><span class="n">state</span><span class="p">)){</span>
</span><span class='line'>              <span class="n">F</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span><span class="n">CleanupState</span><span class="p">(</span><span class="n">setState</span><span class="p">));</span>
</span><span class='line'>              <span class="k">break</span><span class="p">;</span>
</span><span class='line'>           <span class="p">}</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>        <span class="kt">var</span> <span class="n">symbols</span> <span class="p">=</span> <span class="n">ndfsm</span><span class="p">.</span><span class="n">Delta</span>
</span><span class='line'>           <span class="p">.</span><span class="n">Where</span><span class="p">(</span><span class="n">t</span> <span class="p">=&gt;</span> <span class="n">statesInCurrentSetState</span><span class="p">.</span><span class="n">Contains</span><span class="p">(</span><span class="n">t</span><span class="p">.</span><span class="n">StartState</span><span class="p">))</span>
</span><span class='line'>           <span class="p">.</span><span class="n">Select</span><span class="p">(</span><span class="n">t</span> <span class="p">=&gt;</span> <span class="n">t</span><span class="p">.</span><span class="n">Symbol</span><span class="p">)</span>
</span><span class='line'>           <span class="p">.</span><span class="n">Distinct</span><span class="p">();</span>
</span><span class='line'>        <span class="k">foreach</span> <span class="p">(</span><span class="kt">var</span> <span class="n">symbol</span> <span class="k">in</span> <span class="n">symbols</span><span class="p">){</span>
</span><span class='line'>           <span class="kt">var</span> <span class="n">reachableStates</span> <span class="p">=</span>
</span><span class='line'>              <span class="n">ndfsm</span><span class="p">.</span><span class="n">Delta</span>
</span><span class='line'>                 <span class="p">.</span><span class="n">Where</span><span class="p">(</span><span class="n">t</span> <span class="p">=&gt;</span> <span class="n">t</span><span class="p">.</span><span class="n">Symbol</span> <span class="p">==</span> <span class="n">symbol</span> <span class="p">&amp;&amp;</span>
</span><span class='line'>                             <span class="n">statesInCurrentSetState</span><span class="p">.</span><span class="n">Contains</span><span class="p">(</span><span class="n">t</span><span class="p">.</span><span class="n">StartState</span><span class="p">))</span>
</span><span class='line'>                 <span class="p">.</span><span class="n">OrderBy</span><span class="p">(</span><span class="n">t</span> <span class="p">=&gt;</span> <span class="n">t</span><span class="p">.</span><span class="n">EndState</span><span class="p">).</span>
</span><span class='line'>                 <span class="n">Select</span><span class="p">(</span><span class="n">t</span> <span class="p">=&gt;</span> <span class="n">t</span><span class="p">.</span><span class="n">EndState</span><span class="p">);</span>
</span><span class='line'>           <span class="kt">var</span> <span class="n">reachableSetState</span> <span class="p">=</span> <span class="kt">string</span><span class="p">.</span><span class="n">Join</span><span class="p">(</span><span class="s">&quot;,&quot;</span><span class="p">,</span> <span class="n">reachableStates</span><span class="p">);</span>
</span><span class='line'>
</span><span class='line'>           <span class="n">Delta</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span><span class="k">new</span> <span class="n">Transition</span><span class="p">(</span>
</span><span class='line'>                                    <span class="n">CleanupState</span><span class="p">(</span><span class="n">setState</span><span class="p">),</span>
</span><span class='line'>                                    <span class="n">symbol</span><span class="p">,</span>
</span><span class='line'>                                    <span class="n">CleanupState</span><span class="p">(</span><span class="n">reachableSetState</span><span class="p">)));</span>
</span><span class='line'>
</span><span class='line'>           <span class="k">if</span> <span class="p">(!</span><span class="n">processed</span><span class="p">.</span><span class="n">Contains</span><span class="p">(</span><span class="n">reachableSetState</span><span class="p">)){</span>
</span><span class='line'>              <span class="n">queue</span><span class="p">.</span><span class="n">Enqueue</span><span class="p">(</span><span class="n">reachableSetState</span><span class="p">);</span>
</span><span class='line'>           <span class="p">}</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>     <span class="p">}</span>
</span><span class='line'>     <span class="k">return</span> <span class="k">new</span> <span class="nf">DFSM</span><span class="p">(</span><span class="n">Q</span><span class="p">,</span> <span class="n">Sigma</span><span class="p">,</span> <span class="n">Delta</span><span class="p">,</span> <span class="n">Q0</span><span class="p">,</span> <span class="n">F</span><span class="p">);</span>
</span><span class='line'>  <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>  <span class="k">private</span> <span class="k">static</span> <span class="kt">string</span> <span class="nf">CleanupState</span><span class="p">(</span><span class="kt">string</span> <span class="n">state</span><span class="p">){</span>
</span><span class='line'>     <span class="k">return</span> <span class="n">state</span><span class="p">.</span><span class="n">Replace</span><span class="p">(</span><span class="s">&quot;,&quot;</span><span class="p">,</span> <span class="s">&quot; &quot;</span><span class="p">);</span>
</span><span class='line'>  <span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<h3>Putting it all together</h3>

<p>Now that we have all the pieces we can combine them into Brzozowski&rsquo;s  algorithm:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'> <span class="k">public</span> <span class="k">static</span> <span class="n">DFSM</span> <span class="nf">MinimizeDFSM</span><span class="p">(</span><span class="n">DFSM</span> <span class="n">fsm</span><span class="p">){</span>
</span><span class='line'>   <span class="kt">var</span> <span class="n">reversedNDFSM</span> <span class="p">=</span> <span class="n">Reverse</span><span class="p">(</span><span class="n">fsm</span><span class="p">);</span>
</span><span class='line'>   <span class="kt">var</span> <span class="n">reversedDFSM</span> <span class="p">=</span> <span class="n">PowersetConstruction</span><span class="p">(</span><span class="n">reversedNDFSM</span><span class="p">);</span>
</span><span class='line'>   <span class="n">reversedDFSM</span><span class="p">.</span><span class="n">RemoveUnreachableStates</span><span class="p">();</span>
</span><span class='line'>   <span class="kt">var</span> <span class="n">NDFSM</span> <span class="p">=</span> <span class="n">Reverse</span><span class="p">(</span><span class="n">reversedDFSM</span><span class="p">);</span>
</span><span class='line'>   <span class="kt">var</span> <span class="n">DFSM</span> <span class="p">=</span> <span class="n">PowersetConstruction</span><span class="p">(</span><span class="n">NDFSM</span><span class="p">);</span>
</span><span class='line'>   <span class="n">DFSM</span><span class="p">.</span><span class="n">RemoveUnreachableStates</span><span class="p">();</span>
</span><span class='line'>   <span class="k">return</span> <span class="n">DFSM</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>If you check the powerset construction algorithm (or read my previous post) you can see that the implementation has the nice property that it constructs a DFSM with only reachable states. Which is why we can remove the two calls to <code>RemoveUnreachableStates</code> method. The final algorithm:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="k">public</span> <span class="k">static</span> <span class="n">DFSM</span> <span class="nf">MinimizeDFSM</span><span class="p">(</span><span class="n">DFSM</span> <span class="n">fsm</span><span class="p">){</span>
</span><span class='line'>   <span class="kt">var</span> <span class="n">reversedNDFSM</span> <span class="p">=</span> <span class="n">Reverse</span><span class="p">(</span><span class="n">fsm</span><span class="p">);</span>
</span><span class='line'>   <span class="kt">var</span> <span class="n">reversedDFSM</span> <span class="p">=</span> <span class="n">PowersetConstruction</span><span class="p">(</span><span class="n">reversedNDFSM</span><span class="p">);</span>
</span><span class='line'>   <span class="kt">var</span> <span class="n">NDFSM</span> <span class="p">=</span> <span class="n">Reverse</span><span class="p">(</span><span class="n">reversedDFSM</span><span class="p">);</span>
</span><span class='line'>   <span class="k">return</span> <span class="nf">PowersetConstruction</span><span class="p">(</span><span class="n">NDFSM</span><span class="p">);</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>And lets see how the minimization works on an example. This is how the four steps of the above minimization look like on the third DFSM from the beginning .</p>

<p><img src="http://bezensek.com/img/Minimization.png" title="'Deterministic finite state minimization 'Deterministic finite state machine minimization'" ></br></p>

<p>So this is it for minimization. The source code can be found at <a href="https://github.com/MitjaBezensek/DFSM_Minimization">github</a>.</p>
<div class="footnotes">
<hr/>
<ol>
<li id="fn:1">
<p>You might want to check <a href="http://bezensek.com/blog/2014/08/13/deterministic-finite-state-machine-implementation-in-c-number/">one of my previous articles</a> to check the DFSM implementation.<a href="#fnref:1" rev="footnote">&#8617;</a></p></li>
<li id="fn:2">
<p>If you read my previous article you might be wondering if those implementations will work with this reversal. The answer is no. The problem is that when we reverse a DFSM we are basically converting starting state to finish state and finish states to starting states. Which means there can be many starting states - a variant of the DFSM that my implementation does not cover. <a href="#fnref:2" rev="footnote">&#8617;</a></p></li>
<li id="fn:3">
<p>With a few minor adjustements.<a href="#fnref:3" rev="footnote">&#8617;</a></p></li>
</ol>
</div>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Powerset construction in C#]]></title>
    <link href="http://bezensek.com/blog/2015/04/30/powerset-construction/"/>
    <updated>2015-04-30T15:58:59+02:00</updated>
    <id>http://bezensek.com/blog/2015/04/30/powerset-construction</id>
    <content type="html"><![CDATA[<p>In the last two articles I have implemented the <a href="http://bezensek.com/blog/2014/08/13/deterministic-finite-state-machine-implementation-in-c-number/">deterministic finite state machine</a> (DFSM) and the <a href="http://bezensek.com/blog/2015/04/12/non-deterministic-finite-state-machine-implementation-in-c-number/">non-deterministic finite state machine</a> (NDFSM). As you probably all know the two variants are equivalent in terms of power; that is everything that can be expressed with one can also be expressed with the other. This may come as a surprise when you first hear about it, but you are soon presented with the <strong><a href="http://en.wikipedia.org/wiki/Powerset_construction">powerset construction</a></strong> which converts a NDFSM into a DFSM and thus proves one part of the equivalence. The other part is trivial since DFSM is only a limited NDFSM.</p>

<!-- more -->


<h2>Powerset construction algorithm</h2>

<p>Like I discussed in my <a href="http://bezensek.com/blog/2015/04/12/non-deterministic-finite-state-machine-implementation-in-c-number/">previous blog post</a>, the only difference between the DFSM and the NDFSM is that the DFSM does not allow multiple transitions for a given state and symbol. If we wish to transform a NDFSM into a DFSM we need to remove these multiple transitions. We can achieve this by combining all the states that we can reach with a given symbol from a given state into a new state which is a set of all the reachable states.</p>

<p><img src="http://bezensek.com/img/PowersetConstruction.png" title="Powerset construction" alt="Powerset construction"></br></p>

<p>As you can see on the left side of the above picture we can reach states <code>q1</code> and <code>q2</code> from the state <code>q0</code> using the symbol <code>a</code>. This means that the state <code>q0</code> has multiple transitions defined for the symbol <code>a</code> and we wish to get rid of these multiple transitions. The powerset construction combines states <code>q1</code> and <code>q2</code> into a new state that is the set of these two states as can be seen on the right side of the picture. The new state is denoted as <code>{q1, q2}</code>. When we do this transformation for the combined states, like the <code>{q1, q2}</code>, we need to look at the transitions for all the states that make this combined state, in this case <code>q1</code> and <code>q2</code>.</p>

<p>The good news is that this does exactly what we need: it gets rid of the multiple transitions. The bad news though is that in the worst case the number of states explodes and we end up with the states that are all the possible subsets of our original set of states.</p>

<p>Ouch.</p>

<p>So how would we approach this constructions programmatically? Probably the easiest way would be to keep a queue of states that we wish to process. The initial queue would only contain the starting states. We would then add all the possible states that are reachable from the starting states. If there are multiple transitions from a state with a given symbol we would create a new <strong>combined state</strong> like described in the previous paragraph and add it to the queue. For the symbols that only have one transition we would just add the ending state of the transition to the queue. We would then remove a state from the queue and repeat the described algorithm until we empty the queue.</p>

<p>Determining the finish states of the DFSM machine is easy. The finish states will be all the finish states of the original NDFSM plus the combined states that have a least one of the finish states as one of their elements.</p>

<p>During the execution of the algorithm we would of course need to keep track of the already processed states and the transitions between them so that we can construct our NDFSM.</p>

<p>Here is one possible implementation:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
<span class='line-number'>39</span>
<span class='line-number'>40</span>
<span class='line-number'>41</span>
<span class='line-number'>42</span>
<span class='line-number'>43</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="k">public</span> <span class="k">static</span> <span class="n">DFSM</span> <span class="nf">Convert</span><span class="p">(</span><span class="n">NDFSM</span> <span class="n">nd</span><span class="p">){</span>
</span><span class='line'>  <span class="kt">var</span> <span class="n">Q</span> <span class="p">=</span> <span class="k">new</span> <span class="n">List</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">&gt;();</span>
</span><span class='line'>  <span class="kt">var</span> <span class="n">Sigma</span> <span class="p">=</span> <span class="n">nd</span><span class="p">.</span><span class="n">Sigma</span><span class="p">.</span><span class="n">ToList</span><span class="p">();</span>
</span><span class='line'>  <span class="kt">var</span> <span class="n">Delta</span> <span class="p">=</span> <span class="k">new</span> <span class="n">List</span><span class="p">&lt;</span><span class="n">Transition</span><span class="p">&gt;();</span>
</span><span class='line'>  <span class="kt">var</span> <span class="n">Q0</span> <span class="p">=</span> <span class="n">nd</span><span class="p">.</span><span class="n">Q0</span><span class="p">.</span><span class="n">ToList</span><span class="p">();</span>
</span><span class='line'>  <span class="kt">var</span> <span class="n">F</span> <span class="p">=</span> <span class="k">new</span> <span class="n">List</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">&gt;();</span>
</span><span class='line'>  
</span><span class='line'>  <span class="kt">var</span> <span class="n">processed</span> <span class="p">=</span> <span class="k">new</span> <span class="n">List</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">&gt;();</span>
</span><span class='line'>  <span class="kt">var</span> <span class="n">queue</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Queue</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">&gt;(</span><span class="n">Q0</span><span class="p">);</span>
</span><span class='line'>  <span class="k">while</span> <span class="p">(</span><span class="n">queue</span><span class="p">.</span><span class="n">Count</span> <span class="p">&gt;</span> <span class="m">0</span><span class="p">){</span>
</span><span class='line'>     <span class="kt">var</span> <span class="n">setState</span> <span class="p">=</span> <span class="n">queue</span><span class="p">.</span><span class="n">Dequeue</span><span class="p">();</span>
</span><span class='line'>     <span class="n">processed</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span><span class="n">setState</span><span class="p">);</span>
</span><span class='line'>     <span class="n">Q</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span><span class="n">setState</span><span class="p">);</span>
</span><span class='line'>
</span><span class='line'>      <span class="kt">var</span> <span class="n">statesInCurrentSetState</span> <span class="p">=</span> <span class="n">setState</span><span class="p">.</span><span class="n">Split</span><span class="p">(</span><span class="sc">&#39;,&#39;</span><span class="p">).</span><span class="n">ToList</span><span class="p">();</span>
</span><span class='line'>      <span class="k">foreach</span> <span class="p">(</span><span class="kt">var</span> <span class="n">state</span> <span class="k">in</span> <span class="n">statesInCurrentSetState</span><span class="p">){</span>
</span><span class='line'>          <span class="k">if</span> <span class="p">(</span><span class="n">nd</span><span class="p">.</span><span class="n">F</span><span class="p">.</span><span class="n">Contains</span><span class="p">(</span><span class="n">state</span><span class="p">)){</span>
</span><span class='line'>              <span class="n">F</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span><span class="n">setState</span><span class="p">);</span>
</span><span class='line'>              <span class="k">break</span><span class="p">;</span>
</span><span class='line'>         <span class="p">}</span>
</span><span class='line'>      <span class="p">}</span>
</span><span class='line'>      <span class="kt">var</span> <span class="n">symbols</span> <span class="p">=</span> <span class="n">nd</span><span class="p">.</span><span class="n">Delta</span>
</span><span class='line'>         <span class="p">.</span><span class="n">Where</span><span class="p">(</span><span class="n">t</span> <span class="p">=&gt;</span> <span class="n">statesInCurrentSetState</span><span class="p">.</span><span class="n">Contains</span><span class="p">(</span><span class="n">t</span><span class="p">.</span><span class="n">StartState</span><span class="p">))</span>
</span><span class='line'>         <span class="p">.</span><span class="n">Select</span><span class="p">(</span><span class="n">t</span> <span class="p">=&gt;</span> <span class="n">t</span><span class="p">.</span><span class="n">Symbol</span><span class="p">)</span>
</span><span class='line'>         <span class="p">.</span><span class="n">Distinct</span><span class="p">();</span>
</span><span class='line'>      <span class="k">foreach</span> <span class="p">(</span><span class="kt">var</span> <span class="n">symbol</span> <span class="k">in</span> <span class="n">symbols</span><span class="p">){</span>
</span><span class='line'>         <span class="kt">var</span> <span class="n">reachableStates</span> <span class="p">=</span>
</span><span class='line'>            <span class="n">nd</span><span class="p">.</span><span class="n">Delta</span>
</span><span class='line'>               <span class="p">.</span><span class="n">Where</span><span class="p">(</span><span class="n">t</span> <span class="p">=&gt;</span> <span class="n">t</span><span class="p">.</span><span class="n">Symbol</span> <span class="p">==</span> <span class="n">symbol</span> <span class="p">&amp;&amp;</span>
</span><span class='line'>                           <span class="n">statesInCurrentSetState</span><span class="p">.</span><span class="n">Contains</span><span class="p">(</span><span class="n">t</span><span class="p">.</span><span class="n">StartState</span><span class="p">))</span>
</span><span class='line'>               <span class="p">.</span><span class="n">OrderBy</span><span class="p">(</span><span class="n">t</span> <span class="p">=&gt;</span> <span class="n">t</span><span class="p">.</span><span class="n">EndState</span><span class="p">)</span>
</span><span class='line'>               <span class="p">.</span><span class="n">Select</span><span class="p">(</span><span class="n">t</span> <span class="p">=&gt;</span> <span class="n">t</span><span class="p">.</span><span class="n">EndState</span><span class="p">);</span>
</span><span class='line'>         <span class="kt">var</span> <span class="n">reachableSetState</span> <span class="p">=</span> <span class="kt">string</span><span class="p">.</span><span class="n">Join</span><span class="p">(</span><span class="s">&quot;,&quot;</span><span class="p">,</span> <span class="n">reachableStates</span><span class="p">);</span>
</span><span class='line'>
</span><span class='line'>         <span class="n">Delta</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span><span class="k">new</span> <span class="n">Transition</span><span class="p">(</span><span class="n">setState</span><span class="p">,</span> <span class="n">symbol</span><span class="p">,</span> <span class="n">reachableSetState</span><span class="p">));</span>
</span><span class='line'>
</span><span class='line'>         <span class="k">if</span> <span class="p">(!</span><span class="n">processed</span><span class="p">.</span><span class="n">Contains</span><span class="p">(</span><span class="n">reachableSetState</span><span class="p">)){</span>
</span><span class='line'>            <span class="n">queue</span><span class="p">.</span><span class="n">Enqueue</span><span class="p">(</span><span class="n">reachableSetState</span><span class="p">);</span>
</span><span class='line'>         <span class="p">}</span>
</span><span class='line'>      <span class="p">}</span>
</span><span class='line'>  <span class="p">}</span>
</span><span class='line'>  <span class="k">return</span> <span class="k">new</span> <span class="nf">DFSM</span><span class="p">(</span><span class="n">Q</span><span class="p">,</span> <span class="n">Sigma</span><span class="p">,</span> <span class="n">Delta</span><span class="p">,</span> <span class="n">Q0</span><span class="p">,</span> <span class="n">F</span><span class="p">);</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<h2>Conclusion</h2>

<p>This algorithm was actually easier to implement than I thought. I thought that I would need to generate the powerset and then all the possible transitions between all the states. I took a different approach which only goes through the reachable states and only generates the states of the powerset that are actually needed. The algorithm turned out much simpler and on top of that it also produces a better results since the unreachable states are pruned away!</p>

<p>The source code is available at <a href="https://github.com/MitjaBezensek/PowersetConstruction">Github</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Non-deterministic Finite State Machine implementation in C#]]></title>
    <link href="http://bezensek.com/blog/2015/04/12/non-deterministic-finite-state-machine-implementation-in-c-number/"/>
    <updated>2015-04-12T22:35:00+02:00</updated>
    <id>http://bezensek.com/blog/2015/04/12/non-deterministic-finite-state-machine-implementation-in-c-number</id>
    <content type="html"><![CDATA[<p><a href="http://bezensek.com/blog/2014/08/13/deterministic-finite-state-machine-implementation-in-c-number/">Last time</a> I implemented the deterministic finite state machine (DFSM). This time I will do the same for the non-deterministic (NDFSM) one. I chose the variation without the <code>epsilon</code> transitions and will leave that for exercise if someone might find it intriguing.</p>

<p>The only difference between the DFSM and NDFSM is that while the DFSM can only have a single transition for a given state and input symbol the NDFSM is not limited in that regard. It can have multiple transitions for a given state and input symbol.</p>

<!-- more -->


<p>With multiple possible next moves we get the non-deterministic way of operating. This is usualy depicted as a &ldquo;magic wand&rdquo; that correctly decides which transition to choose when multiple options are available. Unfortunatelly for us programmers we don&rsquo;t have that magic wand. We need to try all the possible options before we can answer wheater the NDFSM accepts the input or not. My first thought when seeing something like this is <a href="https://en.wikipedia.org/wiki/Backtracking">backtracking</a>:</p>

<ul>
<li>pick one of the possible transitions,</li>
<li>if it leads to the solution great,</li>
<li>if not backtrack and try something else.</li>
</ul>


<p>But let us not get ahead of ourselves. Let us start with something simpler.</p>

<h1>Valid transitions</h1>

<p>With the before discussed difference in mind I looked at the DFSM implementation to see what will I need to change (If you didn&rsquo;t read the <a href="http://bezensek.com/blog/2014/08/13/deterministic-finite-state-machine-implementation-in-c-number/">previous article</a> this would be a good time, since I will mostly skip the parts that will remain the same and only focus on the differences. And even if you have already read it, it might help to have another window opened with the <a href="https://github.com/MitjaBezensek/DFSM/blob/master/FSM_Simple/DeterministicFSM.cs">source code</a> of the solution.).</p>

<p>One of the first things I noticed was the logic that checks the validity of transitions. We no longer need to check if a similar transition has already been defined, so we can remove that part:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="k">private</span> <span class="kt">bool</span> <span class="nf">ValidTransition</span><span class="p">(</span><span class="n">Transition</span> <span class="n">transition</span><span class="p">){</span>
</span><span class='line'>    <span class="k">return</span>  <span class="n">Q</span><span class="p">.</span><span class="n">Contains</span><span class="p">(</span><span class="n">transition</span><span class="p">.</span><span class="n">StartState</span><span class="p">)</span> <span class="p">&amp;&amp;</span>
</span><span class='line'>            <span class="n">Q</span><span class="p">.</span><span class="n">Contains</span><span class="p">(</span><span class="n">transition</span><span class="p">.</span><span class="n">EndState</span><span class="p">)</span> <span class="p">&amp;&amp;</span>
</span><span class='line'>            <span class="n">Sigma</span><span class="p">.</span><span class="n">Contains</span><span class="p">(</span><span class="n">transition</span><span class="p">.</span><span class="n">Symbol</span><span class="p">);</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>All the other validation logic can remain the same. Which brings us to the biggest change: the <code>Accepts</code> method.</p>

<h1>Non-deterministic Accept</h1>

<p>Like I already mentioned above the non-determinism often looks like magic. This kind of behavior is usually implemented by recursive backtracking. Let us look at a high level overview of the method:</p>

<ul>
<li>find all the posible transitions from the current state using the current symbol,</li>
<li>recursively select one transition and try to accept the remaining input by using that transition,</li>
<li>if we managed to read the whole input and ended up in a final state, accept the input,</li>
<li>if the state is not final or no transitions are possible, backtrack and select a different transition.</li>
</ul>


<p>First, we need a method that will start our recursive calls. The logic here is a bit different than in the deterministic case where we could easily determine if the input is not accepted:</p>

<ul>
<li>there was no valid transition for current state and symbol symbol or</li>
<li>we read all the input and ended up in a non finite state.</li>
</ul>


<p>For the non-deterministic case we need to do that for all the possible transitions from a given state and symbol. And we should start this from the starting state and the whole input:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="k">public</span> <span class="k">void</span> <span class="nf">Accepts</span><span class="p">(</span><span class="kt">string</span> <span class="n">input</span><span class="p">){</span>
</span><span class='line'>    <span class="n">ConsoleWriter</span><span class="p">.</span><span class="n">Success</span><span class="p">(</span><span class="s">&quot;Trying to accept: &quot;</span> <span class="p">+</span> <span class="n">input</span><span class="p">);</span>
</span><span class='line'>
</span><span class='line'>    <span class="k">if</span> <span class="p">(</span><span class="n">Accepts</span><span class="p">(</span><span class="n">Q0</span><span class="p">,</span> <span class="n">input</span><span class="p">,</span> <span class="k">new</span> <span class="n">StringBuilder</span><span class="p">())){</span>
</span><span class='line'>        <span class="k">return</span><span class="p">;</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'>    <span class="n">ConsoleWriter</span><span class="p">.</span><span class="n">Failure</span><span class="p">(</span><span class="s">&quot;Could not accept the input: &quot;</span> <span class="p">+</span> <span class="n">input</span><span class="p">);</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>Next we need to write the recursive function that checks if there is any sequence of steps that leads from the current state to the final state using the specified input:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="k">private</span> <span class="kt">bool</span> <span class="nf">Accepts</span><span class="p">(</span><span class="kt">string</span> <span class="n">currentState</span><span class="p">,</span> <span class="kt">string</span> <span class="n">input</span><span class="p">,</span> <span class="n">StringBuilder</span> <span class="n">steps</span><span class="p">){</span>
</span><span class='line'>    <span class="k">if</span> <span class="p">(</span><span class="n">input</span><span class="p">.</span><span class="n">Length</span> <span class="p">&gt;</span> <span class="m">0</span><span class="p">){</span>
</span><span class='line'>        <span class="kt">var</span> <span class="n">transitions</span> <span class="p">=</span> <span class="n">GetAllTransitions</span><span class="p">(</span><span class="n">currentState</span><span class="p">,</span> <span class="n">input</span><span class="p">[</span><span class="m">0</span><span class="p">]);</span>
</span><span class='line'>        <span class="k">foreach</span> <span class="p">(</span><span class="kt">var</span> <span class="n">transition</span> <span class="k">in</span> <span class="n">transitions</span><span class="p">){</span>
</span><span class='line'>            <span class="kt">var</span> <span class="n">currentSteps</span> <span class="p">=</span> <span class="k">new</span> <span class="n">StringBuilder</span><span class="p">(</span><span class="n">steps</span><span class="p">.</span><span class="n">ToString</span><span class="p">()</span> <span class="p">+</span> <span class="n">transition</span><span class="p">);</span>
</span><span class='line'>            <span class="k">if</span> <span class="p">(</span><span class="n">Accepts</span><span class="p">(</span><span class="n">transition</span><span class="p">.</span><span class="n">EndState</span><span class="p">,</span> <span class="n">input</span><span class="p">.</span><span class="n">Substring</span><span class="p">(</span><span class="m">1</span><span class="p">),</span> <span class="n">currentSteps</span><span class="p">)){</span>
</span><span class='line'>                <span class="k">return</span> <span class="k">true</span><span class="p">;</span>
</span><span class='line'>            <span class="p">}</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>        <span class="k">return</span> <span class="k">false</span><span class="p">;</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'>    <span class="k">if</span> <span class="p">(</span><span class="n">F</span><span class="p">.</span><span class="n">Contains</span><span class="p">(</span><span class="n">currentState</span><span class="p">)){</span>
</span><span class='line'>        <span class="n">ConsoleWriter</span><span class="p">.</span><span class="n">Success</span><span class="p">(</span><span class="s">&quot;Successfully accepted the input &quot;</span> <span class="p">+</span> <span class="n">input</span> <span class="p">+</span> <span class="s">&quot; &quot;</span> <span class="p">+</span>
</span><span class='line'>                               <span class="s">&quot;in the final state &quot;</span> <span class="p">+</span> <span class="n">currentState</span> <span class="p">+</span>
</span><span class='line'>                               <span class="s">&quot; with steps:\n&quot;</span> <span class="p">+</span> <span class="n">steps</span><span class="p">);</span>
</span><span class='line'>        <span class="k">return</span> <span class="k">true</span><span class="p">;</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'>    <span class="k">return</span> <span class="k">false</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>If there are more symbols to read we find all the possible transitions for the current state and current symbol. We then recursively try each of these transitions by calling the <code>Acecepts</code> method on the <code>EndState</code> of the transition with the remaining input. The remaining input here is the current input except for the first symbol which we used in the transition. We also need to add the current transition to the steps. For that I created a new <code>StringBuilder</code> or we would add some transitions that did not lead to the solution in the <code>foreach</code> loop.</p>

<p>The recursion stops when we either tried all the transitions and none of them worked. Or if we came to the end of the input in which case we accept the input only if we stoped in a finish state.</p>

<p>The only thing remaining is the <code>GetAllTransitions</code> method which simply goes through all transitions and finds the ones with the specified start state and symbol:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="k">private</span> <span class="n">IEnumerable</span><span class="p">&lt;</span><span class="n">Transition</span><span class="p">&gt;</span> <span class="n">GetAllTransitions</span><span class="p">(</span><span class="kt">string</span> <span class="n">currentState</span><span class="p">,</span> <span class="kt">char</span> <span class="n">symbol</span><span class="p">){</span>
</span><span class='line'>    <span class="k">return</span> <span class="n">Delta</span><span class="p">.</span><span class="n">FindAll</span><span class="p">(</span><span class="n">t</span> <span class="p">=&gt;</span> <span class="n">t</span><span class="p">.</span><span class="n">StartState</span> <span class="p">==</span> <span class="n">currentState</span> <span class="p">&amp;&amp;</span>
</span><span class='line'>                         <span class="n">t</span><span class="p">.</span><span class="n">Symbol</span> <span class="p">==</span> <span class="n">symbol</span><span class="p">);</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<h1>Conclusion</h1>

<p>While the difference between the DFSM and NDFSM is quite small on paper their algorithms are quite different. Reading the input in the case of DFSM proceeds in linear fashion, we are always reducing the number of symbols we still need to read. But for NDFSM this is not the case. We might read all the input but not finish in the end state and then backtrack back to the begining with whole input left to read. This also makes the NDFSM algorithm perform much slower.</p>

<p>Also the implementation above is not really the best when it comes to performance. We are calling the <code>GetAllTransitions</code> method over and over again. A better way would be to store the possible transitions so that we don&rsquo;t have go through all the transitions every time. But I&rsquo;ll leave this to the readers (as well as implementing <a href="http://en.wikipedia.org/wiki/Nondeterministic_finite_automaton_with_%CE%B5-moves"><code>epsilon</code> transitions</a>).</p>

<p>You can find the <a href="https://github.com/MitjaBezensek/NDFSM">source code</a> for NDFSM on github.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Deterministic finite state machine implementation in C#]]></title>
    <link href="http://bezensek.com/blog/2014/08/13/deterministic-finite-state-machine-implementation-in-c-number/"/>
    <updated>2014-08-13T21:36:58+02:00</updated>
    <id>http://bezensek.com/blog/2014/08/13/deterministic-finite-state-machine-implementation-in-c-number</id>
    <content type="html"><![CDATA[<p>While I was working at the <a href="http://www.fri.uni-lj.si/en/">Faculty of Computer and Information Science</a> I have implemented many of the standard algorithms from the famous Cormen&rsquo;s <a href="http://www.amazon.com/gp/product/0262033844/ref=as_li_tl?ie=UTF8&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0262033844&amp;linkCode=as2&amp;tag=bezensek-20&amp;linkId=EL57QKBNM5BB373B">Introduction to Algorithms</a>. Since I was a part of the Laboratory for algorithms and data structures that is to be expected. However, I have never implemented many of the great results from the Theory of Computation.</p>

<p>This is why I decided to implement the finite state machine and the Turing machine in C# as an exercise. In this blog post I will start with the easier of the two, the <a href="http://en.wikipedia.org/wiki/Automata_theory">finite state machine (FSM)</a>.</p>

<!-- more -->


<h2>Programming by wishful thinking</h2>

<p>I will not bore you with the theory, since you can read all about it in the <a href="http://en.wikipedia.org/wiki/Automata_theory">wikipedia article</a>, which explains the logic behind FSM better than I ever could. So I will just start with <a href="http://dsoguy.blogspot.com/2007/01/programming-by-wishful-thinking.html">programming by wishful thinking</a>. This is how I would like to consume an implementation of a deterministic FSM (DFSM):</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="c1">// Declaration</span>
</span><span class='line'><span class="kt">var</span> <span class="n">Q</span> <span class="p">=</span> <span class="k">new</span> <span class="n">List</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">&gt;{</span><span class="s">&quot;q0&quot;</span><span class="p">,</span> <span class="s">&quot;q1&quot;</span><span class="p">,</span> <span class="s">&quot;q2&quot;</span><span class="p">};</span>
</span><span class='line'><span class="kt">var</span> <span class="n">Sigma</span> <span class="p">=</span> <span class="k">new</span> <span class="n">List</span><span class="p">&lt;</span><span class="kt">char</span><span class="p">&gt;{</span><span class="sc">&#39;a&#39;</span><span class="p">};</span>
</span><span class='line'><span class="kt">var</span> <span class="n">Delta</span> <span class="p">=</span> <span class="k">new</span> <span class="n">List</span><span class="p">&lt;</span><span class="n">Transition</span><span class="p">&gt;{</span>
</span><span class='line'>    <span class="k">new</span> <span class="nf">Transition</span><span class="p">(</span><span class="s">&quot;q0&quot;</span><span class="p">,</span> <span class="sc">&#39;a&#39;</span><span class="p">,</span> <span class="s">&quot;q1&quot;</span><span class="p">),</span>
</span><span class='line'>    <span class="k">new</span> <span class="nf">Transition</span><span class="p">(</span><span class="s">&quot;q1&quot;</span><span class="p">,</span> <span class="sc">&#39;a&#39;</span><span class="p">,</span> <span class="s">&quot;q2&quot;</span><span class="p">),</span>
</span><span class='line'>    <span class="k">new</span> <span class="nf">Transition</span><span class="p">(</span><span class="s">&quot;q2&quot;</span><span class="p">,</span> <span class="sc">&#39;a&#39;</span><span class="p">,</span> <span class="s">&quot;q1&quot;</span><span class="p">)</span>
</span><span class='line'><span class="p">};</span>
</span><span class='line'><span class="kt">var</span> <span class="n">Q0</span> <span class="p">=</span> <span class="s">&quot;q0&quot;</span><span class="p">;</span>
</span><span class='line'><span class="kt">var</span> <span class="n">F</span> <span class="p">=</span> <span class="k">new</span> <span class="n">List</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">&gt;{</span><span class="s">&quot;q0&quot;</span><span class="p">,</span> <span class="s">&quot;q2&quot;</span><span class="p">};</span>
</span><span class='line'><span class="kt">var</span> <span class="n">dFSM</span> <span class="p">=</span> <span class="k">new</span> <span class="n">DeterministicFSM</span><span class="p">(</span><span class="n">Q</span><span class="p">,</span> <span class="n">Sigma</span><span class="p">,</span> <span class="n">Delta</span><span class="p">,</span> <span class="n">Q0</span><span class="p">,</span> <span class="n">F</span><span class="p">);</span>
</span></code></pre></td></tr></table></div></figure>


<p>As you can see I define the five components that make a DFSM: the states of the machine <code>Q</code>, the alphabet <code>Sigma</code>, the list of transitions <code>Delta</code>, the start state <code>Q0</code>, and the set of finish states <code>F</code>. I then construct the machine by passing the components to the constructor.</p>

<p>I expect the upper definition to construct the FSM that is visible on the image below. As you can see the machine accepts all the words with an even number of &ldquo;a&rdquo; characters.</p>

<p><img src="http://bezensek.com/img/FSM.png" title="Finite state machine" alt="Finite state machine"></p>

<p>After constructing the machine we wish to test if some input is a part of the machine&rsquo;s language:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="c1">// Asking the machine if certain inputs are a part of it&#39;s language</span>
</span><span class='line'><span class="n">dFSM</span><span class="p">.</span><span class="n">Accepts</span><span class="p">(</span><span class="s">&quot;&quot;</span><span class="p">);</span>
</span><span class='line'><span class="n">dFSM</span><span class="p">.</span><span class="n">Accepts</span><span class="p">(</span><span class="s">&quot;a&quot;</span><span class="p">);</span>
</span><span class='line'><span class="n">dFSM</span><span class="p">.</span><span class="n">Accepts</span><span class="p">(</span><span class="s">&quot;aa&quot;</span><span class="p">);</span>
</span></code></pre></td></tr></table></div></figure>


<p>I want the <code>Accept</code> method to print out if the machine accepted the input or not. Also I would like to see the steps that led to the finish state if the input was accepted.</p>

<h2>Transitions</h2>

<p>With that, I had all the specification I needed, so I started by implementing the first thing the compiler complained about: the  <code>Transition</code> object.</p>

<p>The transitions define how we can move between the states. So the <code>Transition</code> class needs to hold the information about the <code>StartState</code>, the <code>Symbol</code> and the <code>EndState</code> of the transition. Appart from that I added a <code>ToString()</code> method that will be used later on.</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="k">public</span> <span class="k">class</span> <span class="nc">Transition</span><span class="p">{</span>
</span><span class='line'>    <span class="k">public</span> <span class="kt">string</span> <span class="n">StartState</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">private</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span>
</span><span class='line'>    <span class="k">public</span> <span class="kt">char</span> <span class="n">Token</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">private</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span>
</span><span class='line'>    <span class="k">public</span> <span class="kt">string</span> <span class="n">EndState</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">private</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>    <span class="k">public</span> <span class="nf">Transition</span><span class="p">(</span><span class="kt">string</span> <span class="n">startState</span><span class="p">,</span> <span class="kt">char</span> <span class="n">token</span><span class="p">,</span> <span class="kt">string</span> <span class="n">endState</span><span class="p">){</span>
</span><span class='line'>        <span class="n">StartState</span> <span class="p">=</span> <span class="n">startState</span><span class="p">;</span>
</span><span class='line'>        <span class="n">Token</span> <span class="p">=</span> <span class="n">token</span><span class="p">;</span>
</span><span class='line'>        <span class="n">EndState</span> <span class="p">=</span> <span class="n">endState</span><span class="p">;</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>    <span class="k">public</span> <span class="k">override</span> <span class="kt">string</span> <span class="nf">ToString</span><span class="p">(){</span>
</span><span class='line'>        <span class="k">return</span> <span class="kt">string</span><span class="p">.</span><span class="n">Format</span><span class="p">(</span><span class="s">&quot;({0}, {1}) -&gt; {2}&quot;</span><span class="p">,</span> <span class="n">StartState</span><span class="p">,</span> <span class="n">Symbol</span><span class="p">,</span> <span class="n">EndState</span><span class="p">);</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<h2>Deterministic finite state machine</h2>

<p>Now that we have the <code>Transition</code>, we can start implementing the machine. Here is how the constructor might look like:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="k">public</span> <span class="k">class</span> <span class="nc">DeterministicFSM</span><span class="p">{</span>
</span><span class='line'>    <span class="k">private</span> <span class="k">readonly</span> <span class="n">List</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">&gt;</span> <span class="n">Q</span> <span class="p">=</span> <span class="k">new</span> <span class="n">List</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">&gt;();</span>
</span><span class='line'>    <span class="k">private</span> <span class="k">readonly</span> <span class="n">List</span><span class="p">&lt;</span><span class="kt">char</span><span class="p">&gt;</span> <span class="n">Sigma</span> <span class="p">=</span> <span class="k">new</span> <span class="n">List</span><span class="p">&lt;</span><span class="kt">char</span><span class="p">&gt;();</span>
</span><span class='line'>    <span class="k">private</span> <span class="k">readonly</span> <span class="n">List</span><span class="p">&lt;</span><span class="n">Transition</span><span class="p">&gt;</span> <span class="n">Delta</span> <span class="p">=</span> <span class="k">new</span> <span class="n">List</span><span class="p">&lt;</span><span class="n">Transition</span><span class="p">&gt;();</span>
</span><span class='line'>    <span class="k">private</span> <span class="kt">string</span> <span class="n">Q0</span><span class="p">;</span>
</span><span class='line'>    <span class="k">private</span> <span class="k">readonly</span> <span class="n">List</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">&gt;</span> <span class="n">F</span> <span class="p">=</span> <span class="k">new</span> <span class="n">List</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">&gt;();</span>
</span><span class='line'>
</span><span class='line'>    <span class="k">public</span> <span class="nf">DeterministicFSM</span><span class="p">(</span><span class="n">IEnumerable</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">&gt;</span> <span class="n">q</span><span class="p">,</span> <span class="n">IEnumerable</span><span class="p">&lt;</span><span class="kt">char</span><span class="p">&gt;</span> <span class="n">sigma</span><span class="p">,</span>
</span><span class='line'>                            <span class="n">IEnumerable</span><span class="p">&lt;</span><span class="n">Transition</span><span class="p">&gt;</span> <span class="n">delta</span><span class="p">,</span> <span class="kt">string</span> <span class="n">q0</span><span class="p">,</span>
</span><span class='line'>                            <span class="n">IEnumerable</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">&gt;</span> <span class="n">f</span><span class="p">){</span>
</span><span class='line'>        <span class="n">Q</span> <span class="p">=</span> <span class="n">q</span><span class="p">.</span><span class="n">ToList</span><span class="p">();</span>
</span><span class='line'>        <span class="n">Sigma</span> <span class="p">=</span> <span class="n">sigma</span><span class="p">.</span><span class="n">ToList</span><span class="p">();</span>
</span><span class='line'>        <span class="n">AddTransitions</span><span class="p">(</span><span class="n">delta</span><span class="p">);</span>
</span><span class='line'>        <span class="n">AddInitialState</span><span class="p">(</span><span class="n">q0</span><span class="p">);</span>
</span><span class='line'>        <span class="n">AddFinalStates</span><span class="p">(</span><span class="n">f</span><span class="p">);</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>I just copied the list of states and the alphabet to the internal properties, but for the other three components we need some basic validation. For the transitions we want to verify that:</p>

<ul>
<li>they connect the states that are defined in <code>Q</code>,</li>
<li>they use only symbols from <code>Sigma</code>.</li>
</ul>


<p>There is an additional constraint with deterministic machine and that is: each state can only have one transition for a given symbol.</p>

<p>Considering all the requirements this is how the <code>AddTransitions</code> method might look like:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="k">private</span> <span class="k">void</span> <span class="nf">AddTransitions</span><span class="p">(</span><span class="n">IEnumerable</span><span class="p">&lt;</span><span class="n">Transition</span><span class="p">&gt;</span> <span class="n">transitions</span><span class="p">){</span>
</span><span class='line'>    <span class="k">foreach</span> <span class="p">(</span><span class="kt">var</span> <span class="n">transition</span> <span class="k">in</span> <span class="n">transitions</span><span class="p">.</span><span class="n">Where</span><span class="p">(</span><span class="n">ValidTransition</span><span class="p">)){</span>
</span><span class='line'>        <span class="n">Delta</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span><span class="n">transition</span><span class="p">);</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="k">private</span> <span class="kt">bool</span> <span class="nf">ValidTransition</span><span class="p">(</span><span class="n">Transition</span> <span class="n">transition</span><span class="p">){</span>
</span><span class='line'>    <span class="k">return</span>  <span class="n">Q</span><span class="p">.</span><span class="n">Contains</span><span class="p">(</span><span class="n">transition</span><span class="p">.</span><span class="n">StartState</span><span class="p">)</span> <span class="p">&amp;&amp;</span>
</span><span class='line'>            <span class="n">Q</span><span class="p">.</span><span class="n">Contains</span><span class="p">(</span><span class="n">transition</span><span class="p">.</span><span class="n">EndState</span><span class="p">)</span>   <span class="p">&amp;&amp;</span>
</span><span class='line'>            <span class="n">Sigma</span><span class="p">.</span><span class="n">Contains</span><span class="p">(</span><span class="n">transition</span><span class="p">.</span><span class="n">Symbol</span><span class="p">)</span> <span class="p">&amp;&amp;</span>
</span><span class='line'>            <span class="p">!</span><span class="n">TransitionAlreadyDefined</span><span class="p">(</span><span class="n">transition</span><span class="p">);</span>
</span><span class='line'>  <span class="p">}</span>
</span><span class='line'>
</span><span class='line'> <span class="k">private</span> <span class="kt">bool</span> <span class="nf">TransitionAlreadyDefined</span><span class="p">(</span><span class="n">Transition</span> <span class="n">transition</span><span class="p">){</span>
</span><span class='line'>    <span class="k">return</span> <span class="n">Delta</span><span class="p">.</span><span class="n">Any</span><span class="p">(</span><span class="n">t</span> <span class="p">=&gt;</span> <span class="n">t</span><span class="p">.</span><span class="n">StartState</span> <span class="p">==</span> <span class="n">transition</span><span class="p">.</span><span class="n">StartState</span> <span class="p">&amp;&amp;</span>
</span><span class='line'>                          <span class="n">t</span><span class="p">.</span><span class="n">Symbol</span> <span class="p">==</span> <span class="n">transition</span><span class="p">.</span><span class="n">Symbol</span><span class="p">);</span>
</span><span class='line'> <span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>The validations for the start state and the finish states are much simpler. We only need to check if they are defined in Q:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="k">private</span> <span class="k">void</span> <span class="nf">AddInitialState</span><span class="p">(</span><span class="kt">string</span> <span class="n">q0</span><span class="p">){</span>
</span><span class='line'>    <span class="k">if</span> <span class="p">(</span><span class="n">Q</span><span class="p">.</span><span class="n">Contains</span><span class="p">(</span><span class="n">q0</span><span class="p">)){</span>
</span><span class='line'>        <span class="n">Q0</span> <span class="p">=</span> <span class="n">q0</span><span class="p">;</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="k">private</span> <span class="k">void</span> <span class="nf">AddFinalStates</span><span class="p">(</span><span class="n">IEnumerable</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">&gt;</span> <span class="n">finalStates</span><span class="p">){</span>
</span><span class='line'>    <span class="k">foreach</span> <span class="p">(</span><span class="kt">var</span> <span class="n">finalState</span> <span class="k">in</span> <span class="n">finalStates</span><span class="p">.</span><span class="n">Where</span><span class="p">(</span>
</span><span class='line'>               <span class="n">finalState</span> <span class="p">=&gt;</span> <span class="n">Q</span><span class="p">.</span><span class="n">Contains</span><span class="p">(</span><span class="n">finalState</span><span class="p">))){</span>
</span><span class='line'>        <span class="n">F</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span><span class="n">finalState</span><span class="p">);</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<h2>Accepting the inputs</h2>

<p>That brings us to the meat of our DFSM implementation: the <code>Accepts</code> method. We will need to do the following:</p>

<ul>
<li>read the input symbol by symbol,</li>
<li>try to find a transition from the current state that uses the current symbol,</li>
<li>move to the next state defined by the found transition,</li>
<li>if we have read all the symbols and have ended up in one of the finish states we can accept the input,</li>
<li>in all other cases (no transition possible, ending up in non finish states) we don&rsquo;t accept the input.</li>
</ul>


<p>The upper pseudo algorithm is implemented below. The main logic is in the foreach loop that reads the next symbol and tries to transition to the next state. If the transition is successful it records the current step in the steps variable. I have also added a simple <code>ConsoleWriter</code> class that deals with simple print outs to the console.</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="k">public</span> <span class="k">void</span> <span class="nf">Accepts</span><span class="p">(</span><span class="kt">string</span> <span class="n">input</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>    <span class="kt">var</span> <span class="n">currentState</span> <span class="p">=</span> <span class="n">Q0</span><span class="p">;</span>
</span><span class='line'>    <span class="kt">var</span> <span class="n">steps</span> <span class="p">=</span> <span class="k">new</span> <span class="n">StringBuilder</span><span class="p">();</span>
</span><span class='line'>    <span class="k">foreach</span> <span class="p">(</span><span class="kt">var</span> <span class="n">symbol</span> <span class="k">in</span> <span class="n">input</span><span class="p">.</span><span class="n">ToCharArray</span><span class="p">())</span> <span class="p">{</span>
</span><span class='line'>        <span class="kt">var</span> <span class="n">transition</span> <span class="p">=</span> <span class="n">Delta</span><span class="p">.</span><span class="n">Find</span><span class="p">(</span><span class="n">t</span> <span class="p">=&gt;</span> <span class="n">t</span><span class="p">.</span><span class="n">StartState</span> <span class="p">==</span> <span class="n">currentState</span> <span class="p">&amp;&amp;</span>
</span><span class='line'>                                         <span class="n">t</span><span class="p">.</span><span class="n">Symbol</span> <span class="p">==</span> <span class="n">symbol</span><span class="p">);</span>
</span><span class='line'>        <span class="k">if</span> <span class="p">(</span><span class="n">transition</span> <span class="p">==</span> <span class="k">null</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>            <span class="n">ConsoleWriter</span><span class="p">.</span><span class="n">Failure</span><span class="p">(</span><span class="s">&quot;No transitions for current state and symbol&quot;</span><span class="p">);</span>
</span><span class='line'>            <span class="n">ConsoleWriter</span><span class="p">.</span><span class="n">Failure</span><span class="p">(</span><span class="n">steps</span><span class="p">);</span>
</span><span class='line'>           <span class="k">return</span><span class="p">;</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>        <span class="n">currentState</span> <span class="p">=</span> <span class="n">transition</span><span class="p">.</span><span class="n">EndState</span><span class="p">;</span>
</span><span class='line'>        <span class="n">steps</span><span class="p">.</span><span class="n">Append</span><span class="p">(</span><span class="n">transition</span> <span class="p">+</span> <span class="s">&quot;\n&quot;</span><span class="p">);</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'>    <span class="k">if</span> <span class="p">(</span><span class="n">F</span><span class="p">.</span><span class="n">Contains</span><span class="p">(</span><span class="n">currentState</span><span class="p">))</span> <span class="p">{</span>
</span><span class='line'>        <span class="n">ConsoleWriter</span><span class="p">.</span><span class="n">Success</span><span class="p">(</span><span class="s">&quot;Accepted the input with steps:\n&quot;</span> <span class="p">+</span> <span class="n">steps</span><span class="p">);</span>
</span><span class='line'>        <span class="k">return</span><span class="p">;</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'>    <span class="n">ConsoleWriter</span><span class="p">.</span><span class="n">Failure</span><span class="p">(</span><span class="s">&quot;Stopped in state &quot;</span> <span class="p">+</span> <span class="n">currentState</span> <span class="p">+</span>
</span><span class='line'>                         <span class="s">&quot; which is not a final state.&quot;</span><span class="p">);</span>
</span><span class='line'>    <span class="n">ConsoleWriter</span><span class="p">.</span><span class="n">Failure</span><span class="p">(</span><span class="n">steps</span><span class="p">);</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<h2>Conclusion</h2>

<p>I have omitted some additional validations and the code behind the <code>ConsoleWriter</code> for the sake of brevity, but the full source code can be found at <a href="https://github.com/MitjaBezensek/DFSM">GitHub</a>.</p>

<p>Building the DFSM was quite fun! I have already implemented the non-deterministic one as well and will present it in one of the coming posts, and for sure I&rsquo;ll do the Turing machine as well.</p>

<p>Before I say goodbye let me show you a test run of the DFSM on the following inputs:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="n">dFSM</span><span class="p">.</span><span class="n">Accepts</span><span class="p">(</span><span class="s">&quot;&quot;</span><span class="p">);</span>
</span><span class='line'><span class="n">dFSM</span><span class="p">.</span><span class="n">Accepts</span><span class="p">(</span><span class="s">&quot;a&quot;</span><span class="p">);</span>
</span><span class='line'><span class="n">dFSM</span><span class="p">.</span><span class="n">Accepts</span><span class="p">(</span><span class="s">&quot;aa&quot;</span><span class="p">);</span>
</span><span class='line'><span class="n">dFSM</span><span class="p">.</span><span class="n">Accepts</span><span class="p">(</span><span class="s">&quot;aaa&quot;</span><span class="p">);</span>
</span><span class='line'><span class="n">dFSM</span><span class="p">.</span><span class="n">Accepts</span><span class="p">(</span><span class="s">&quot;aaaa&quot;</span><span class="p">);</span>
</span></code></pre></td></tr></table></div></figure>


<p><img src="http://bezensek.com/img/Output.png" title="Finite state machine output" alt="Finite state machine output"></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Excel VSTO RGB Color bug]]></title>
    <link href="http://bezensek.com/blog/2014/08/05/excel-rgb-color-bug/"/>
    <updated>2014-08-05T10:45:04+02:00</updated>
    <id>http://bezensek.com/blog/2014/08/05/excel-rgb-color-bug</id>
    <content type="html"><![CDATA[<p>One of the strangest bugs I found in VSTO for Excel is the one that deals with assigning colors to the RGB property of the ChartFormat object. The ChartFormat object is used in multiple places of Excel. Let&rsquo;s look at an example:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="n">Series</span> <span class="n">series</span> <span class="p">=</span> <span class="n">Globals</span><span class="p">.</span><span class="n">ThisAddIn</span><span class="p">.</span><span class="n">Application</span><span class="p">.</span><span class="n">Selection</span><span class="p">;</span>
</span><span class='line'><span class="n">series</span><span class="p">.</span><span class="n">Format</span><span class="p">.</span><span class="n">Fill</span><span class="p">.</span><span class="n">ForeColor</span><span class="p">.</span><span class="n">RGB</span> <span class="p">=</span> <span class="n">Color</span><span class="p">.</span><span class="n">Red</span><span class="p">.</span><span class="n">ToArgb</span><span class="p">();</span>
</span></code></pre></td></tr></table></div></figure>


<p>For brevity&rsquo;s sake let&rsquo;s suppose that we have a series of a chart selected and we run the code above. One would expect that the color of the selected series would be set to red, but what happens is this:</p>

<p><img src="http://bezensek.com/img/chart.png" title="Chart" alt="Chart"></p>

<!-- more -->


<p>And if we try to color the series blue then the result is red!</p>

<h2>Red and Blue components of the RGB property are reversed</h2>

<p>Since I intentionally used the red color that resulted in a blue series on the chart, some of you might have figured out the bug. But imagine yourself trying to apply some color from the middle of the RGB color range and consitently getting the wrong results.</p>

<p>Well the workaround is easy: just use a wrapper function that swaps the red and blue components of the color:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="k">private</span> <span class="k">void</span> <span class="nf">ApplyColorToSeries</span><span class="p">(){</span>
</span><span class='line'>    <span class="n">Series</span> <span class="n">series</span> <span class="p">=</span> <span class="n">Globals</span><span class="p">.</span><span class="n">ThisAddIn</span><span class="p">.</span><span class="n">Application</span><span class="p">.</span><span class="n">Selection</span><span class="p">;</span>
</span><span class='line'>    <span class="n">series</span><span class="p">.</span><span class="n">Format</span><span class="p">.</span><span class="n">Fill</span><span class="p">.</span><span class="n">ForeColor</span><span class="p">.</span><span class="n">RGB</span> <span class="p">=</span> <span class="n">InteropColor</span><span class="p">(</span><span class="m">255</span><span class="p">,</span> <span class="m">0</span><span class="p">,</span> <span class="m">0</span><span class="p">);</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="k">public</span> <span class="kt">int</span> <span class="nf">InteropColor</span><span class="p">(</span><span class="kt">int</span> <span class="n">red</span><span class="p">,</span> <span class="kt">int</span> <span class="n">green</span><span class="p">,</span> <span class="kt">int</span> <span class="n">blue</span><span class="p">){</span>
</span><span class='line'>    <span class="k">return</span> <span class="n">Color</span><span class="p">.</span><span class="n">FromArgb</span><span class="p">(</span><span class="n">blue</span><span class="p">,</span> <span class="n">green</span><span class="p">,</span> <span class="n">red</span><span class="p">).</span><span class="n">ToArgb</span><span class="p">();</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>After searching the web I found that this bug has already been mentioned on the <a href="http://stackoverflow.com/questions/7423456/changing-an-excel-cells-backcolor-using-hex-results-in-excel-displaying-complet">StackOverflow</a>. It is interesting that this has not yet been fixed in the newer versions of Excel. I have first stumbled upon this issue with the Excel 2007 interop library but it is still present in the current one. The only reason that comes to my mind is backwards compatibility with the numerous Excel solutions out there. So it seems we should just get used to it.</p>

<h2>Update:</h2>

<p>It seems that this is not an Excel interop bug. Apparently the reason for this strange behavior is that VBA has a different representation of colors. For more see the comments.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[How to use Add This with Octopress to add social buttons]]></title>
    <link href="http://bezensek.com/blog/2014/07/31/how-to-use-add-this-with-octopress-to-add-social-buttons/"/>
    <updated>2014-07-31T18:04:44+02:00</updated>
    <id>http://bezensek.com/blog/2014/07/31/how-to-use-add-this-with-octopress-to-add-social-buttons</id>
    <content type="html"><![CDATA[<p><a href="http://octopress.org/">Octopress</a> is a great blogging framework for (mostly) technical people. People that like to have everything about their blog in their control. People like me.</p>

<p>It&rsquo;s great to:</p>

<ul>
<li>have your whole blog in version control,</li>
<li>forget about hosting since it&rsquo;s only a bunch of static pages and you can host them on <a href="https://pages.github.com/">GitHub pages</a> <sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup> ,</li>
<li>style your blog with the help of many <a href="https://github.com/imathis/octopress/wiki/3rd-Party-Octopress-Themes">free themes</a>,</li>
<li>easily customize and extend your blog by plugging in different pieces of functionality.</li>
</ul>


<p>Today I&rsquo;m going to show you how easy it is to add social share buttons below each of your posts. Let&rsquo;s get started.</p>

<!-- more -->


<p>Octopress by default supports the <a href="http://www.addthis.com/">Add this</a> social buttons. But it was a bit too limiting for my taste, so I removed it all and started from scratch.</p>

<p>The first thing to do is to create the account at Add This. This will allow you to customize your social buttons just the way you want them. I went for the &ldquo;Original sharing buttons&rdquo; and have set them like this:</p>

<p><img src="http://bezensek.com/img/OriginalSharingButtons.png" title="Add this social buttons" alt="Add this social buttons"></p>

<p>There&rsquo;s many options to choose from, but not all are available for free.</p>

<p>Below the services selection window you will see the code that you should copy and paste to your blog. But where should you put it? I decided to put the social buttons below each blog post similar to what Octopress offers by default. So I needed to find the post template which is under <code>source/_layouts/post.html</code>. In it we can see that the social share buttons are already rendering beneath the article template:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="o">&lt;</span><span class="n">article</span> <span class="n">class</span><span class="o">=</span><span class="s2">&quot;post&quot;</span> <span class="n">itemscope</span> <span class="n">itemtype</span><span class="o">=</span><span class="s2">&quot;http://schema.org/BlogPosting&quot;</span><span class="o">&gt;</span>
</span><span class='line'>  <span class="p">{</span><span class="o">%</span> <span class="kp">include</span> <span class="n">article</span><span class="o">.</span><span class="n">html</span> <span class="sx">%}</span>
</span><span class='line'><span class="sx">&lt;/article&gt;</span>
</span><span class='line'><span class="sx">{% unless page.sharing == false %}</span>
</span><span class='line'>  <span class="p">{</span><span class="o">%</span> <span class="kp">include</span> <span class="n">post</span><span class="o">/</span><span class="n">sharing</span><span class="o">.</span><span class="n">html</span> <span class="sx">%}</span>
</span><span class='line'><span class="sx">{% endunless %}</span>
</span></code></pre></td></tr></table></div></figure>


<p>If you wanted you could have easily displayed the buttons even above the article just by copying the  <code>{% include post/sharing.html %}</code> on the top of the template. Or at any other place of your blog.</p>

<p>Because the sharing template is already rendering we just need to paste our code from Add this to <code>sharing.html</code> which is under <code>source/_includes/posts/sharing.html</code>:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='javascript'><span class='line'><span class="o">&lt;</span><span class="nx">script</span> <span class="nx">type</span><span class="o">=</span><span class="s2">&quot;text/javascript&quot;</span>
</span><span class='line'>  <span class="nx">src</span><span class="o">=</span><span class="s2">&quot;//s7.addthis.com/js/300/addthis_widget.js#pubid=yourPubId&quot;</span><span class="o">&gt;</span>
</span><span class='line'><span class="o">&lt;</span><span class="err">/script&gt;</span>
</span><span class='line'><span class="o">&lt;</span><span class="nx">div</span> <span class="kr">class</span><span class="o">=</span><span class="s2">&quot;addthis_native_toolbox&quot;</span><span class="o">&gt;&lt;</span><span class="err">/div&gt;</span>
</span></code></pre></td></tr></table></div></figure>


<p>We could have just pasted the code in the unless block, but I think that separating the parts is a better idea. It makes our site more modular and its easy to reuse the modules / partials / templates in different parts of our blog.</p>

<p>If we now regenerate the files we should see the social buttons beneath every blog post. Another nice thing about this is that if we wish to change how our buttons looks or if decide we wish to add some other buttons we only need to update our template at the Add this webpage and our buttons will update all across our site!</p>

<p>If you don&rsquo;t want to use Add This you can use this same logic for any other buttons you wish to add.</p>
<div class="footnotes">
<hr/>
<ol>
<li id="fn:1">
<p>GitHub pages run on <a href="http://jekyllrb.com/">Jekyll</a> that is at the core of Octopress.<a href="#fnref:1" rev="footnote">&#8617;</a></p></li>
</ol>
</div>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Excel's ActivePane Index property bug and a workaround]]></title>
    <link href="http://bezensek.com/blog/2014/07/23/excel-activepane-index-property-bug-and-a-workaround/"/>
    <updated>2014-07-23T11:20:04+02:00</updated>
    <id>http://bezensek.com/blog/2014/07/23/excel-activepane-index-property-bug-and-a-workaround</id>
    <content type="html"><![CDATA[<p>In <a href="http://zebra.bi/">Zebra BI</a> we are positioning our custom WPF forms on top of the Excel window in order to offer a richer and more contextual UI. Calculating the exact position for the forms is quite complex and painful, due to things like:</p>

<ul>
<li>detecting the Excel window state and left edge position</li>
<li>calculating from points to pixels <sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup></li>
<li>coping with the Windows DPI</li>
<li>taking Ribbon / Formula Bar / Excel version into consideration</li>
<li>serious lack of events on many of Excel&rsquo;s objects</li>
<li>&hellip;</li>
</ul>


<p>The last nail in the coffin were the Panes which also need to be considered when a user uses the Freeze Panes option, which basically splits the worksheet into 2 or 4 Panes. At first it seemed like a simple adjustment until I started digging into the object model and ultimately found out that:</p>

<!-- more -->


<h2>ActivePane&rsquo;s Index property doesn&rsquo;t work correctly</h2>

<p>According to the <a href="http://msdn.microsoft.com/en-us/library/office/microsoft.office.interop.excel.window.activepane%28v=office.15%29.aspx">Excel Object Model</a> specification the ActivePane property:</p>

<blockquote><p>Returns a <strong>Pane</strong> object that represents the <strong>active pane</strong> in the <strong>window</strong>.</p></blockquote>

<p>and you can:</p>

<blockquote><p>Use the <strong>Index</strong> property to obtain the <strong>index</strong> of the <strong>active pane</strong>.</p></blockquote>

<p>Here is a simple code that is used to display the index of the current ActivePane:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="kt">var</span> <span class="n">window</span> <span class="p">=</span> <span class="n">Globals</span><span class="p">.</span><span class="n">ThisAddIn</span><span class="p">.</span><span class="n">Application</span><span class="p">.</span><span class="n">ActiveWindow</span><span class="p">;</span>
</span><span class='line'><span class="kt">var</span> <span class="n">activePane</span> <span class="p">=</span> <span class="n">window</span><span class="p">.</span><span class="n">ActivePane</span><span class="p">;</span>
</span><span class='line'><span class="n">MessageBox</span><span class="p">.</span><span class="n">Show</span><span class="p">(</span><span class="n">activePane</span><span class="p">.</span><span class="n">Index</span><span class="p">.</span><span class="n">ToString</span><span class="p">());</span>
</span></code></pre></td></tr></table></div></figure>


<p>Let&rsquo;s see it in action.</p>

<p><img src="http://bezensek.com/img/ActivePane.gif" title="ActivePane" alt="ActivePane"></p>

<p>As you see when there are 2 panes it <strong>always returns 2</strong> and when we have 4 panes it <strong>always returns 4</strong>. I&rsquo;m guessing it is just returning the number of the panes :)</p>

<h2>The workaround</h2>

<p>I needed to determine in which of the Panes is the current selection so I started looking at the Panes members. The only promising one was the <code>VisibleRange</code>. I didn&rsquo;t want to use the Excel function <code>INTERSECT</code> since is quite costly performance wise. I figured out that just comparing the <code>Left</code> property of the <code>VisibleRange</code> with the <code>Left</code> property of the current selection should be enough (the same for the <code>Top</code> property). So I came up with this:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
</pre></td><td class='code'><pre><code class='csharp'><span class='line'><span class="k">private</span> <span class="kt">int</span> <span class="nf">GetPaneIndex</span><span class="p">(){</span>
</span><span class='line'>    <span class="n">Range</span> <span class="n">selection</span> <span class="p">=</span> <span class="n">Globals</span><span class="p">.</span><span class="n">ThisAddIn</span><span class="p">.</span><span class="n">Application</span><span class="p">.</span><span class="n">Selection</span><span class="p">;</span>
</span><span class='line'>    <span class="kt">var</span> <span class="n">window</span> <span class="p">=</span> <span class="n">Globals</span><span class="p">.</span><span class="n">ThisAddIn</span><span class="p">.</span><span class="n">Application</span><span class="p">.</span><span class="n">ActiveWindow</span><span class="p">;</span>
</span><span class='line'>    <span class="kt">var</span> <span class="n">paneCount</span> <span class="p">=</span> <span class="n">window</span><span class="p">.</span><span class="n">Panes</span><span class="p">.</span><span class="n">Count</span><span class="p">;</span>
</span><span class='line'>    <span class="k">if</span> <span class="p">(</span><span class="n">paneCount</span> <span class="p">==</span> <span class="m">2</span><span class="p">){</span>
</span><span class='line'>        <span class="n">Pane</span> <span class="n">secondPane</span> <span class="p">=</span> <span class="n">window</span><span class="p">.</span><span class="n">Panes</span><span class="p">[</span><span class="m">2</span><span class="p">];</span>
</span><span class='line'>        <span class="k">if</span> <span class="p">(</span><span class="n">secondPane</span><span class="p">.</span><span class="n">ScrollRow</span> <span class="p">&gt;</span> <span class="m">1</span>
</span><span class='line'>          <span class="p">&amp;&amp;</span> <span class="n">secondPane</span><span class="p">.</span><span class="n">VisibleRange</span><span class="p">.</span><span class="n">Top</span> <span class="p">&lt;</span> <span class="n">selection</span><span class="p">.</span><span class="n">Top</span><span class="p">)</span>
</span><span class='line'>            <span class="k">return</span> <span class="m">2</span><span class="p">;</span>
</span><span class='line'>        <span class="k">if</span> <span class="p">(</span><span class="n">secondPane</span><span class="p">.</span><span class="n">ScrollColumn</span> <span class="p">&gt;</span> <span class="m">1</span>
</span><span class='line'>          <span class="p">&amp;&amp;</span> <span class="n">secondPane</span><span class="p">.</span><span class="n">VisibleRange</span><span class="p">.</span><span class="n">Left</span> <span class="p">&lt;</span> <span class="n">selection</span><span class="p">.</span><span class="n">Left</span><span class="p">)</span>
</span><span class='line'>           <span class="k">return</span> <span class="m">2</span><span class="p">;</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'>    <span class="k">else</span> <span class="nf">if</span> <span class="p">(</span><span class="n">paneCount</span> <span class="p">==</span> <span class="m">4</span><span class="p">){</span>
</span><span class='line'>        <span class="n">Pane</span> <span class="n">secondPane</span> <span class="p">=</span> <span class="n">window</span><span class="p">.</span><span class="n">Panes</span><span class="p">[</span><span class="m">2</span><span class="p">];</span>
</span><span class='line'>        <span class="n">Pane</span> <span class="n">thirdPane</span> <span class="p">=</span> <span class="n">window</span><span class="p">.</span><span class="n">Panes</span><span class="p">[</span><span class="m">3</span><span class="p">];</span>
</span><span class='line'>        <span class="k">if</span> <span class="p">(</span><span class="n">selection</span><span class="p">.</span><span class="n">Left</span> <span class="p">&lt;</span> <span class="n">secondPane</span><span class="p">.</span><span class="n">VisibleRange</span><span class="p">.</span><span class="n">Left</span>
</span><span class='line'>          <span class="p">&amp;&amp;</span> <span class="n">selection</span><span class="p">.</span><span class="n">Top</span> <span class="p">&lt;</span> <span class="n">thirdPane</span><span class="p">.</span><span class="n">VisibleRange</span><span class="p">.</span><span class="n">Top</span><span class="p">)</span>
</span><span class='line'>           <span class="k">return</span> <span class="m">1</span><span class="p">;</span>
</span><span class='line'>        <span class="k">if</span> <span class="p">(</span><span class="n">selection</span><span class="p">.</span><span class="n">Left</span> <span class="p">&gt;</span> <span class="n">secondPane</span><span class="p">.</span><span class="n">VisibleRange</span><span class="p">.</span><span class="n">Left</span>
</span><span class='line'>          <span class="p">&amp;&amp;</span> <span class="n">selection</span><span class="p">.</span><span class="n">Top</span> <span class="p">&gt;</span> <span class="n">thirdPane</span><span class="p">.</span><span class="n">VisibleRange</span><span class="p">.</span><span class="n">Top</span><span class="p">)</span>
</span><span class='line'>           <span class="k">return</span> <span class="m">4</span><span class="p">;</span>
</span><span class='line'>        <span class="k">if</span> <span class="p">(</span><span class="n">selection</span><span class="p">.</span><span class="n">Left</span> <span class="p">&gt;</span> <span class="n">secondPane</span><span class="p">.</span><span class="n">VisibleRange</span><span class="p">.</span><span class="n">Left</span> <span class="p">)</span>
</span><span class='line'>           <span class="k">return</span> <span class="m">2</span><span class="p">;</span>
</span><span class='line'>        <span class="k">return</span> <span class="m">3</span><span class="p">;</span>
</span><span class='line'>     <span class="p">}</span>
</span><span class='line'>     <span class="k">return</span> <span class="m">1</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>This works just fine with <code>Ranges</code> and pretty much every Excel object that has <code>Left</code> and <code>Top</code> properties. You get the correct index of the <code>ActivePane</code>.</p>

<p>However, what you also get, are some triggered events as soon as you access the VisibleRange property. I have no clue why this happens. Even a simple assigment like <code>var range = pane.VisibleRange;</code> causes the active chart to get deactivated, which again caused quite a few additional problems that are beyond the scope of this post.</p>
<div class="footnotes">
<hr/>
<ol>
<li id="fn:1">
<p>Since the <code>PointsToScreenPixels</code> method is bugged as well.<a href="#fnref:1" rev="footnote">&#8617;</a></p></li>
</ol>
</div>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[The best way to get to know Excel Object Model]]></title>
    <link href="http://bezensek.com/blog/2014/03/24/the-best-way-to-get-to-know-excel-object-model/"/>
    <updated>2014-03-24T21:10:04+01:00</updated>
    <id>http://bezensek.com/blog/2014/03/24/the-best-way-to-get-to-know-excel-object-model</id>
    <content type="html"><![CDATA[<p>I am starting a category called &ldquo;excel Excel&rdquo; which will contain useful tips and tricks for Excel. It will be mostly directed towards Excel developers and power users.</p>

<h2>How do I [blank] in Excel?</h2>

<p><a href="http://stackoverflow.com/">StackOverflow</a> is full of questions like:</p>

<blockquote><p>&ldquo;How do I change the color of a Chart Series in Excel in VBA / C#?&rdquo;</p></blockquote>

<p>While doing it manually is easy, the problem occurs when you wish to start talking to Excel from the code. This is not surprising, considering the number of different objects present in the <a href="http://msdn.microsoft.com/en-us/library/wss56bz7.aspx">Excel Object Model</a>. One can spend an insane amount of time trying to figure out the exact five steps to reach the desired effect. It is easy to get lost in all the objects, and their methods and properties. Which is why I love the <strong>macro recording option</strong>.</p>

<!-- more -->


<p>After learning about it you will be able to do all the tasks you already know how to do manually in code as well. Well, almost all. I&rsquo;ll write about this in a future post.</p>

<p>The primary use of macro recording is to <strong>automate repetitive tasks</strong>. You just start the recording, perform the task and stop the recording. After that you can replay the recorded macro as many times as you wish. And not only that, you can also <strong>see all the steps</strong> that were performed in code!</p>

<h2>How to record a macro</h2>

<p>First of all I recommend that you show the Developer ribbon tab. You can do this under File | Options | Customize Ribbon, where you need to check the Developer ribbon tab:</p>

<p><img src="http://bezensek.com/img/enableDeveloperRibbon.png" title="Enable developer ribbon" alt="Enable developer ribbon"></p>

<p>After enabling the tab you gain access to macro recording and viewing options. You are now ready to record your first macro:</p>

<ol>
<li>Click on the Record macro button under Developer tab</li>
<li>Perform the selected task, like changing a color of a Chart Series</li>
<li>Stop the macro recording</li>
<li>View the results</li>
</ol>


<p><img src="http://bezensek.com/img/recordMacro.gif" title="Record macro Excel" alt="Record macro Excel"></p>

<p>As you can see at the end of the animation all of the steps that I performed during the recording are saved in the macro. It is now easy to find the object / property you need. I use this extensively, almost every day. It mainly serves as a way of finding the specific object / property to set, after which I use the Intellisense to explore the options a bit further.</p>

<p> <strong>Tip:</strong></p>

<blockquote><p>If you will be using the described technique as much as I do, I even recommend adding it to the Quick Access Toolbar. Click on the arrows in the Toolbar, Select More commands and then add Record macro and View macro commands to your Toolbar:</p></blockquote>

<p> <img src="http://bezensek.com/img/quickAccess.png" title="Quick access toolbar customization" alt="Quick access toolbar customization"></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Using Git with Visual Studio]]></title>
    <link href="http://bezensek.com/blog/2014/03/06/using-git-with-visual-studio/"/>
    <updated>2014-03-06T21:30:35+01:00</updated>
    <id>http://bezensek.com/blog/2014/03/06/using-git-with-visual-studio</id>
    <content type="html"><![CDATA[<p>Source code needs to be under <a href="http://www.joelonsoftware.com/articles/fog0000000043.html">version control</a>, period. When it comes to deciding which system to use, <a href="http://en.wikipedia.org/wiki/Git_%28software%29">Git</a> is one of the options. There are many <a href="http://stackoverflow.com/questions/871/why-is-git-better-than-subversion/875#875">heated debates</a> which one is the best, but let&rsquo;s not go into that. All of them do their job, so it mostly comes down to personal preference. I like Git.</p>

<p><img src="http://bezensek.com/img/gitflow.png" title="Gitflow" alt="Gitflow">
</br>
<sup><a href="http://nvie.com/posts/a-successful-git-branching-model/">Image source</a></sup></p>

<!-- more -->


<h2>Git in Visual Studio</h2>

<p>In January 2013 the Visual Studio team <a href="http://blogs.msdn.com/b/bharry/archive/2013/01/30/git-init-vs.aspx">announced</a> that Visual Studio will have Git support and you can download it from <a href="http://visualstudiogallery.msdn.microsoft.com/abafc7d6-dcaa-40f4-8a5e-d6724bdb980c">here</a> if you want. You will need Visual Studio 2012 Update 2 at least.</p>

<p>I have tried the extension but I don&rsquo;t recommend it just yet. It is still lacking many features and it seems very rushed. In a few iterations it might be worth to install it but for now I would say stay away. This is why I decided to discuss possible alternatives, namely: command line, Git Extensions and Source Tree.</p>

<h2>Command line</h2>

<p>So how can you start using Git? The easiest way in terms of required software is the command line. First of all you need to <a href="http://git-scm.com/downloads">download</a> and install Git. After that you just need to <a href="http://git-scm.com/doc">read the documenation</a> and you can immediately start using it from the command line.</p>

<p>And that is a good way to start using it if you are not familiar with it. Since you have to type in all the commands you will think twice if this is the right thing to do. And you won&rsquo;t get overwhelmed by all the possible commands. You will learn one or two commands and really get to know those. For starters you just need <code>init</code> and <code>commit</code>. Soon after that you will want to save the source code on another computer, not only on your own. That&rsquo;s when <code>remotes</code>, <code>push</code> and <code>pull</code> come into play. And when you start to work in a team, sharing the code, you will need to learn about <code>branches</code> and maybe even about branching models like <a href="http://nvie.com/posts/a-successful-git-branching-model/">GitFlow</a> for example.</p>

<p>Does this work with Visual Studio. Absolutely. That&rsquo;s why I don&rsquo;t understand why so much fuss about Git being incorporated into Visual Studio. Many developers only use git from the command line. Some would even argue that that&rsquo;s the only way to use it. I understand that commiting directly from the IDE is probably faster and that visual representation of the branch tree is nice. However, writing a few additional lines every day sholdn&rsquo;t keep you from using Git!</p>

<h2>Git Extensions</h2>

<p>The next option is a Visual Studio extension called <a href="https://code.google.com/p/gitextensions/">Git Extensions</a>. It&rsquo;s the only one of the three alternatives that I mention that is completely integrated into Visual Studio. After installing you get an additional toolbar in your workspace:</p>

<p><img src="http://bezensek.com/img/gitExtensions.png" title="Git Extensions toolbar" alt="Git Extensions toolbar"></p>

<p>The most used commands are directly exposed on the toolbar, but you can open up a window where all git commands are only a click away. You can also see your branch tree and commit messages.</p>

<p><img src="http://bezensek.com/img/gitExtensions2.png" title="Git Extensions window" alt="Git Extensions window"></br>
<sup><a href="https://code.google.com/p/gitextensions/">Image source</a></sup></p>

<p>If you like the integrated way you might also want to check <a href="http://visualstudiogallery.msdn.microsoft.com/63a7e40d-4d71-4fbb-a23b-d262124b8f4c">Git Source Control Provider</a> which allows you to see the status of your files in the solution explorer. It makes it easy to see which files were newly added, which were changed,&hellip;</p>

<p>I&rsquo;ve had some minor problems with Git Extensions. Sometimes the window crashed if I had it opened for too long. I also ran into some authentication problems when pushing to Bitbucket. This problem was solved by manually running their git-credentials-windstore executable. Apart from that I quite liked it. It is really rich with options and possibilities and also works remarkably well.</p>

<h2>Source Tree</h2>

<p>The last option is a standalone desktop application called <a href="http://www.sourcetreeapp.com/">Source Tree</a> from Atlassian. While the Mac version has been around for quite some while they have released the Windows version not so long ago.</p>

<p><img src="http://www.sourcetreeapp.com/images/sourcetree_hero_win_full_interface_windows.png" title="Source tree UI " alt="Source Tree UI"></br>
<sup><a href="http://www.sourcetreeapp.com">Image source</a></sup></p>

<p>I must admit that lately I&rsquo;ve been using Source tree the most. I really like the nice user interface, it is also very easy to keep track of multiple projects. And there is another little gem: it has support for Gitflow. So you can easily start new features, hotfixes, releases.</p>

<p><img src="http://bezensek.com/img/sourceTree2.png" title="Gitflow options inside of Source Tree" alt="Gitflow options inside of Source Tree"></p>

<p>So until the Visual Studio team improves their extension I think any of the three proposed options is better. Once again it will come down to personal preference. Do you want visual control or do you like command line? Do you want to have integration with Visual Studio or is a standalone application also ok?</p>
]]></content>
  </entry>
  
</feed>
