///|
/// Run a conformance oracle directly. Unlike learn, this propagates resource
/// limits to the caller. Hypothesis and experiment alphabets must agree.
pub fn Oracle::evaluate(
  self : Oracle,
  hypothesis : Machine,
  experiment : Experiment,
) -> CheckResult raise {
  if hypothesis.alphabet.length() != experiment.alphabet.length() ||
    !hypothesis.alphabet.all(input => experiment.alphabet.contains(input)) {
    raise InvalidArgument("oracle and experiment alphabets differ")
  }
  (self.check)(hypothesis, experiment)
}