def reverse_message(gaussian_tplus1, transition_mat,
                    gaussian_noise):
    """
    Given a transition model
      N(x_{t+1}; T x_t + b; S)
    and future message
      N(x_{t+1}, c, C) 
    compute the message arriving at the current timestep
      N(x_t, d, D)
    where D^-1 = T' (C+S)^-1 T
          D^-1 d = T' (C+S)^-1 (c - b)
    """

    denoised = gaussian_tplus1.subtract(gaussian_noise)
    return denoised.inverse_linear_transform(transition_mat)