Does a Program Yield the Right Distribution? Verifying Probabilistic Programs via Generating Functions