Now problem instances don't evaluate `y0` eagerly. Should we keep the current interface for observers (i.e. sending it `x0` and `y0` at initalization)?