# Noncommutative signal-flow graph

In automata theory and control theory, branches of mathematics, theoretical computer science and systems engineering, a noncommutative signal-flow graph is a tool for modeling interconnected systems and state machines by mapping the edges of a directed graph to a ring or semiring.
A single edge weight might represent an array of impulse responses of a complex system (see figure to the right), or a character from an alphabet picked off the input tape of a finite automaton, while the graph might represent the flow of information or state transitions.
As diverse as these applications are, they share much of the same underlying theory.

## Definition

Consider n equations involving n+1 variables {x$_0$, x$_1$,...,x$_n$}.
    $x_{i}=\sum _{j=0}^{n}a_{ij}x_{j},\;\;\;1\leq i\leq n,$
with a$_{ij}$ elements in a ring or semiring R. The free variable x$_0$ corresponds to a source vertex v$_0$, thus having no defining equation. Each equation corresponds to a fragment of a directed graph G=(V,E) as show in the figure.
The edge weights define a function f from E to R. Finally fix an output vertex v$_m$. A signal-flow graph is the collection of this data S = (G=(V,E), v$_0$,v$_m$ $\in$ V, f : E → R). The equations may not have a solution, but when they do,
    $x_{m}=Tx_{0},$
with T an element of R called the gain.

## Return Loop Method

There exist several noncommutative generalizations of Mason's rule. The most common is the return loop method (sometimes called the forward return loop method (FRL), having a dual backward return loop method (BRL)). The first rigorous proof is attributed to Riegle, so it is sometimes called Riegle's rule.
As with Mason's rule, these gain expressions combine terms in a graph-theoretic manner (loop-gains, path products, etc.). They are known to hold over an arbitrary noncommutative ring and over the semiring of regular expressions.

### Formal Description

The method starts by enumerating all paths from input to output, indexed by j $\in$ J. We use the following definitions:
* The j-th path product is (by abuse of notation) a tuple of k$_j$ edge weights along it:
             $p_{j}=(w_{k_{j}}^{(j)},\ldots ,w_{2}^{(j)},w_{1}^{(j)}).$
* To split a vertex v is to replace it with a source and sink respecting the original incidence and weights (this is the inverse of the graph morphism taking source and sink to v).
* The loop gain of a vertex v w.r.t. a subgraph H is the gain from source to sink of the signal-flow graph split at v after removing all vertices not in H.
* Each path defines an ordering of vertices along it. The along path j, the i-th FRL (BRL) node factor is (1-S$_i$$^{(j)}$)$^{−1}$ where S$_i$$^{(j)}$ is the loop gain of the i-th vertex along the j-th w.r.t. the subgraph obtained by removing v$_0$ and all vertices ahead of (behind) it.
The contribution of the j-th path to the gain is the product along the path, alternating between the path product weights and the node factors:
    $T_{j}=\prod _{i=k_{j}}^{1}(1-S_{i}^{(j)})^{-1}w_{i}^{(j)},$
so the total gain is
    $T=\sum _{j\in J}T_{j}.$

### An Example

Consider the signal-flow graph shown. From x to z, there are two path products: (d) and (e,a). Along (d), the FRL and BRL contributions coincide as both share same loop gain (whose split reappears in the upper right of the table below):
    $f+e(1-b)^{-1}c,$
Multiplying its node factor and path weight, its gain contribution is
    $T_{d}=\left[1-f-e(1-b)^{-1}c\right]^{-1}d.$
Along path (e,a), FRL and BRL differ slightly, each having distinct splits of vertices y and z as shown in the following table.
Adding to T$_d$, the alternating product of node factors and path weights, we obtain two gain expressions:
    $T^{(FRL)}=\left[1-f-e(1-b)^{-1}c\right]^{-1}d+\left[1-f-e(1-b)^{-1}c\right]^{-1}e(1-b)^{-1}a,$
and
    $T^{(BRL)}=\left[1-f-e(1-b)^{-1}c\right]^{-1}d+(1-f)^{-1}e\left[1-b-c(1-f)^{e}\right]^{-1}a,$
These values are easily seen to be the same using identities (ab)$^{−1}$ = b$^{−1}$a$^{−1}$ and a(1-ba)$^{−1}$=(1-ab)$^{−1}$a.

## Applications
### Matrix Signal-Flow Graphs

Consider equations
    $y_{i}=\sum _{j=1}^{2}a_{ij}x_{j}+\sum _{j=1}^{2}b_{ij}y_{j}$
and
    $z_{i}=\sum _{j=1}^{2}c_{ij}y_{j},$
This system could be modeled as scalar signal-flow graph with multiple inputs and outputs. But, the variables naturally fall into layers, which can be collected into vectors x=(x$_1$,x$_2$)$^t$ y=(y$_1$,y$_2$)$^t$ and z=(z$_1$,z$_2$)$^t$. This results in much simpler matrix signal-flow graph as shown in the figure at the top of the article.
Applying the forward return loop method is trivial as there's a single path product (C,A) with a single loop-gain B at y. Thus as a matrix, this system has a very compact representation of its input-output map:
    $T=C(1-B)^{-1}A.$

### Finite Automata

An important kind of noncommutative signal-flow graph is a finite state automaton over an alphabet $\Sigma$.
Serial connections correspond to the concatenation of words, which can be extended to subsets of the free monoid $\Sigma ^{*}$. For A, B $\subseteq \Sigma ^{*}$
    $A\cdot B=\{ab\mid a\in A,b\in B\}.$
Parallel connections correspond to set union, which in this context is often written A+B.
Finally, self-loops naturally correspond to the Kleene closure
    $A^{*}=\{\lambda \}+A+AA+AAA+\cdots ,$
where $\lambda$ is the empty word. The similarity to the infinite geometric series
    $(1-x)^{-1}=1+x+x^{2}+x^{3}\cdots ,$
is more than superficial, as expressions of this form serve as 'inversion' in this semiring.
In this way, the subsets of $\Sigma ^{*}$ built of from finitely many of these three operations can be identified with the semiring of regular expressions. Similarly, finite graphs whose edges are weighted by subsets of $\Sigma ^{*}$ can be identified with finite automata, though generally that theory starts with singleton sets as in the figure.
This automaton is deterministic so we can unambiguously enumerate paths via words. Using the return loop method, path contributions are:
* path ab, has node factors (c$^*$, $\lambda$), yielding gain contribution
       $ac^{*}b,$
* path ada, has node factors (c$^*$, c$^*$, $\lambda$), yielding gain contribution
       $ac^{*}dc^{*}a,$
* path ba, has node factors (c$^*$, $\lambda$), yielding gain contribution
       $bc^{*}a.$
Thus the language accepted by this automaton (the gain of its signal-flow graph) is the sum of these terms
    $L=ac^{*}b+ac^{*}dc^{*}a+bc^{*}a.$