let solve_single_forward (graph : graph) (id : string) : unit =
let id_node = find_node graph id in
let processedge edge =
remove_outb graph id edge;
match edge with
| OutConcatLeft(rhs, target) -> forward_concat graph id rhs target
| OutConcatRight(lhs, target) -> forward_concat graph lhs id target
| OutIsect target -> forward_intersect graph id target
in
let processmaybe edge = if is_simple_forward graph edge then processedge edge in
Hashset.iter processmaybe id_node.outb