let transitive_reduction graph =
    Util.Timer.start tr_timer;
    G.iter_vertex (fun v ->
      List.iter (fun v' ->
        if v <> v' then
        List.iter (fun v'' ->
          if v' <> v'' then
            G.remove_edge graph v v''
        ) (G.succ graph v')
      ) (G.succ graph v);
    ) graph;
    Util.Timer.stop tr_timer ()