anchor.diff:          | Request.Z3 rq       -> phase (symproof >> proof approx >> z3 reals rq) Response.Z3
           | Request.HSF         -> phase (filterIndefinite >> hsf) Response.HSF
           | Request.MuZ3 rq     -> phase (filterIndefinite >> muz3 reals rq) Response.MuZ3
  +        | Request.SymZ3 rq    -> phase (symproof >> (tuplize (proof approx >> z3 reals rq))) Response.SymZ3 
           | _                   -> fail (Error.Other "Internal")
   
       //Build a phase with
  
positive.code:           ("sat",
             ("Executes a definite proof using Z3 and reports the result.",
              Request.Z3 Backends.Z3.Types.Request.Sat))
            ("mutranslate",
             ("Generates a proof using MuZ3 and outputs the individual terms.",
              Request.MuZ3 Backends.MuZ3.Types.Request.Translate))
  
negative.code:                           >> snd)
                   else id)
  
  
          // TODO: make less horrible, i.e. by using some non-result-wrapped type from z3 
          let tuplize f y = (y >>= fun x -> (lift (fun a -> (a,x)) (f y)) ) 
  
          match request with
          | Request.SymProof    -> phase symproof Response.SymProof
          | Request.RawSymProof -> phase (symproof >> rawproof) Response.RawSymProof
  