System verilog randomization: inconsistency in LRM?

In reply to sharatk:

Functions aren’t called before all constraints are solved, but before the relevant constraints are solved.

In your case, the function creates an implicit solve y before x. This means constraint D will be solved first to yield a value of y. Afterwards, F will be called with the value of y obtained from the previous step. Then, constraint C will be solved to yield x.