fmminrev


Name

fmminrev -- compute the minimal machine

Synopsis

fmminrev fm

fmminrev <fm


Description

fmminrev computes the minimal machine that accepts the same language as fm, and writes the result on the standard output. fmminrev can accept either a deterministic or nondeterministic machine as input. fmminrev computes the minimal machine by reversing, performing subset construction (that is, by applying fmdeterm), reversing again, and performing subset construction a final time). The result is guaranteed to be deterministic.

Machines can also be minimized by fmmin, which uses Hopcroft's partition method. fmmin and fmminrev produce isomorphic results (that is, identical up to state renumbering).

fm must conform to the Grail format for machines.


Examples

% cat dfm
(START) |- 0
0 a 1
0 b 2
1 c 1
2 c 2
1 d 3
2 d 4
3 -| (FINAL)
4 -| (FINAL)

% fmminrev <dfm
(START) |- 2
1 d 0
2 a 1
1 c 1
2 b 1
0 -| (FINAL)

% cat nfm2 
(START) |- 1
1 a 2
1 a 3
1 a 4
2 -| (FINAL)
3 -| (FINAL)
4 -| (FINAL)

% cat nfm2 | fmdeterm | fmminrev
(START) |- 0
0 a 1
1 -| (FINAL)


Authors

Darrell Raymond and Derick Wood, the Grail project

See also

fm(5), fmmin(1), fmrevers(1), fmdeterm(1), ismorph(1)