I wonder: why is there a `Char_set.t` to enumerate the vertices?  Aren't the vertices implicit in the `Char_map.t`, i.e. the list of vertices can be found using, say, `fst(Char_map.bindings adjacents)`?