Let's try to define a function
GetOptimalObjectiveValue(sol solution.Solution) (float64, error)
which will return the optimal value of the objective when given a solution. This method will not be a member of the Solution interface and should be completely able to be defined with just the methods we've already defined in the interface.
I suspect that we can use the FindValueOfExpression function that was previously defined in order to create this new function.