less type constraints
generating fsm