equal
deleted
inserted
replaced
255 |
255 |
256 (* maintain transitive acyclic graphs *) |
256 (* maintain transitive acyclic graphs *) |
257 |
257 |
258 fun add_edge_trans_acyclic (x, y) G = |
258 fun add_edge_trans_acyclic (x, y) G = |
259 add_edge_acyclic (x, y) G |
259 add_edge_acyclic (x, y) G |
260 |> fold add_edge (Library.product (all_preds G [x]) (all_succs G [y])); |
260 |> fold_product (curry add_edge) (all_preds G [x]) (all_succs G [y]); |
261 |
261 |
262 fun merge_trans_acyclic eq (G1, G2) = |
262 fun merge_trans_acyclic eq (G1, G2) = |
263 merge_acyclic eq (G1, G2) |
263 merge_acyclic eq (G1, G2) |
264 |> fold add_edge_trans_acyclic (diff_edges G1 G2) |
264 |> fold add_edge_trans_acyclic (diff_edges G1 G2) |
265 |> fold add_edge_trans_acyclic (diff_edges G2 G1); |
265 |> fold add_edge_trans_acyclic (diff_edges G2 G1); |