Finite state machines.
Here an FSM
is a map from symbols to actions. Symbols are parametric
(will usually be Strings or Chars). Action
s specify the action of a
symbol on each state, and are represented as lists of transitions: one
per state. States are just numbers, from 0 to n, corresponding to
indices on transition lists in Action
s. Then deterministic actions
are just Ints, identifying the state to transition to under that
action; nondeterministic actions are lists of Ints: all the states to
possibly transition to under that action.
- type State = Int
- newtype DestinationSet = DestinationSet {
- destinations :: [State]
- newtype Action = Action {}
- data FSM sy
- newtype Word sy = Word [sy]
- fromList :: Ord sy => [(sy, Action)] -> FSM sy
- toList :: FSM sy -> [(sy, Action)]
- delete :: Ord sy => sy -> FSM sy -> FSM sy
- lookup :: Ord sy => sy -> FSM sy -> Maybe Action
- fsmMap :: (sy -> Action -> a) -> FSM sy -> [a]
- states :: FSM sy -> [State]
- alphabet :: FSM sy -> [sy]
- normalise :: FSM sy -> FSM sy
- normaliseAction :: Action -> Action
- mkAction :: [[State]] -> Action
- mkDAction :: [State] -> Action
- append :: Action -> Action -> Action
- actionLookup :: Action -> State -> DestinationSet
- action :: Ord sy => FSM sy -> Word sy -> Maybe Action
- actionEquiv :: Ord sy => FSM sy -> Word sy -> Word sy -> Bool
- destinationSet :: Ord sy => FSM sy -> State -> Word sy -> Maybe DestinationSet
- destinationEquiv :: Ord sy => FSM sy -> State -> Word sy -> Word sy -> Bool
- fsmIdentity :: FSM sy -> Action
- identity :: Int -> Action
- isDAction :: Action -> Bool
- isDFSM :: FSM sy -> Bool
Data types
newtype DestinationSet Source
Destination sets are just lists of State
s.
Actions are lists of DestinationSets
, indexed by source
State
.
Finite state machine whose nodes are labelled with type sy.
Simple FSM operations
fromList :: Ord sy => [(sy, Action)] -> FSM sySource
Create an FSM from a list of symbol, Action pairs.
states :: FSM sy -> [State]Source
Compute the list of states of the FSM
. Only really meaningful
if the FSM's well-formedness is not BadLengths
. With current
implementation, is just [0..n] for some n (or empty).
Normalisation
Operations on actions
mkDAction :: [State] -> ActionSource
Build a deterministic action given a list of destination states.
actionLookup :: Action -> State -> DestinationSetSource
Compute the DestinationSet
reached by following some Action
from some State
.
actionEquiv :: Ord sy => FSM sy -> Word sy -> Word sy -> BoolSource
Test if two Word
s are action-equivalent over some FSM.
Destination sets
destinationSet :: Ord sy => FSM sy -> State -> Word sy -> Maybe DestinationSetSource
Compute the DestinationSet
for some Word
at some State
of
an FSM
. The word might contain symbols outside the FSM's
alphabet, or the state might be out of range, so the result could
be Nothing.
Identity
fsmIdentity :: FSM sy -> ActionSource
Compute the identity action for a given FSM.