TobyHML is a command line tool to check an LTS against HML formulas.
In TobyHML you're able to build up a labeled transition system (LTS) and input Hennessy-Milner logic (HML) formulas to find those states that fulfill these formulas.
For now TobyHML only knows the standard HML syntax (no recursion), that is (in BNF):
F ::= true | false | (F and F) | (F or F) | <a>F | [a]F
Where a is a transition's name.
First you have to build up an LTS. You can do that by typing in multiple add- or remove-commands like this:
add p1 a p2, which creates two statesp1andp2and connects them fromp1top2viaa.add p3, which creates a statep3that has no outgoing or incoming transitions (yet).add p1 b p4, which createsp4and connects it fromp1top4viab.add true, which would cause an error - your state and transition names must be alphanumeric and may not betrue,false,andoror.remove p1 a p2, which removes transitionafromp1top2.remove p1 a, which removes all outgoingatransitions from a.remove p1, which removes statep1.
Use print to get an LTS print on screen. You can remove all states and transitions by entering reset.
Then you can check HML formulas which will give you a set of states that fulfill said formulas. Here are some examples:
evaluate true, which returns every state in the LTS.evaluate false, which returns an empty set.evaluate <a>true', which returns every state that has an outgoinga`-transition.evaluate [b] false, which returns every state that doesn't have an outgoingb-transition. (Notice that spaces between or [b] and the following part of the formula are allowed.)evaluate (<a>true and (<b>true and [c]false)), which returns every state that has outgoingaandbbut noctransitions. (Notice how binary operations need brackets, sadly the parser doesn't allow you to leave them out.)evaluate <a><b><c><a><b>true, which returns every states from which there is a waya->b->c->a->b.
Finally enter exit to quit TobyHML.
TobyHML also has a help command to give you a quick reference.
- Read LTS from file
- Possibly add recursion