let remove_outb (graph : graph)
                (source : nodeid)
                (edge : outedge) : unit = 
  let removeconcat lhs rhs target =
    let lhs_node = find_node graph lhs in
    let rhs_node = find_node graph rhs in
    let target_node = find_node graph target in
      remove lhs_node.outb (OutConcatLeft(rhs, target));
      remove rhs_node.outb (OutConcatRight(lhs, target));
      remove target_node.inb (InConcat(lhs,rhs))
  in
    match edge with
      | OutConcatLeft (rhs, target) -> removeconcat source rhs target
      | OutConcatRight (lhs, target) -> removeconcat lhs source target
      | OutIsect target ->
          let source_node = find_node graph source in
          let target_node = find_node graph target in
            remove target_node.inb (InIsect source);
            remove source_node.outb edge