Returns a program that takes a Metropolis-Hastings step.

The Metropolis-Hastings algorithm takes a proposal distribution (inner_step) and iteratively accepts or rejects proposals from it according to an accept ratio calculated from unnormalized_log_prob and log_prob(inner_step). This creates a Markov Chain whose stationary distribution is some target distribution (specified by unnormalized_log_prob).

unnormalized_log_prob A function that computes the log probability of a state.
inner_step A probabilistic program that acts as the proposal distribution for a Metropolis-Hasting step.

A program that proposes a new state and accepts or rejects according to the unnormalized log probability and proposal distribution transition probabilities.