1.6 KiB
mealy-decompose
Tools to investigate decomposition of Mealy machines, aka finite state machines (FSMs). Notable entry points are:
-
app/Main.hs
is a heuristic to decompose finite state machines into multiple components, based on their outputs. -
other/decompose_fsm_optimise.py
does the same, but optimally and with a SAT solver. This can only handle state spaces of at most a few hundred states. -
app/RandomGen.hs
for generating FSMs which are decomposable.
How to run
The the haskell tools (tested with ghc 9.2.8 and ghc 9.10.1):
cabal run mealy-decompose -- <path-to-fsm>
For the python tools (tested with python 3.12):
pip3 install python-sat
python3 decompose_fsm_optimise.py -h
Notes on copar
In the first versions of this tool, I used the copar
library:
CoPaR (The Coalgebraic Partition Refiner).
This is a great library and in particular very fast. Despite that, I switched
to my own partition refinement implementations because of the reasons below.
The last commit to use copar
is 2b8b79a4
.
-
I needed witnesses for some tasks. So I not only construct a partition, but also a splitting tree, where are track all the actions needed to separate states.
-
I prefer to use the actual strings (or other data type) for the states, inputs and outputs as opposed to
Int
s. This makes it easier to debug, and less error-prone, as one cannot mix these entities anymore. -
copar
comes with many dependencies, and it was a bit tricky to get the versioning correct.
Copyright
(c) 2024 Joshua Moerman, Open Universiteit