This only allows multiple occurrences of the same event in the CIF data-based synthesis custom edge order. Adding automatic algorithms for doing so is out of scope for this issue and merge request.
The synthesis edges are used in various places during synthesis. I added a separate variable to store the ordered edges, with potential duplicates, for reachability computations. This means that determining output guards, edge debug output, etc, still operate on the edges without duplicates, to prevent duplicate work there. This does change the debug output, as they are now always the edges in model order.
By default, duplicates are disallowed. This ensures backward compatibility. It also allows to detect accidental duplicate inclusion of events in the order.
I used an enum-typed-option to allow configuring this rather than a boolean option. This allows adding additional 'automatic' variants later on, when we add automatic algorithms for heuristically computing edge orders.