anchor.diff:      | Flatten of UFModel<STerm<SMGView, SMVFunc>>
       /// The result of term optimisation.
       | TermOptimise of UFModel<STerm<SMGView, SMVFunc>>
  +    /// Output a fully-instantiated proof.
  +    | Proof of Model<SFTerm, unit>
       /// The result of Z3 backend processing.
       | Z3 of Backends.Z3.Types.Response
       /// The result of MuZ3 backend processing.
  
positive.code: /// case and failure messages.
  let printResult pOk pBad =
      either (printOk pOk pBad) (printErr pBad)
  
  /// Shorthand for the HSF stage.
  let hsf = bind (Backends.Horn.hsfModel >> mapMessages Error.HSF)
  
negative.code:                  else id)
  
          match request with
          | Request.Proof   -> phase proof Response.Proof
          | Request.HSF     -> phase (filterIndefinite >> hsf) Response.HSF
          | Request.Z3 rq   -> phase (maybeApprox >> filterDefinite >> z3 reals rq) Response.Z3
          | Request.MuZ3 rq -> phase (filterIndefinite >> muz3 reals rq) Response.MuZ3
  