anchor.diff:    smt_labels:         option<smt_output_section>;
   }
   
  -let smt_output_sections (r:Range.range) (lines:list<string>) : smt_output =
  +let smt_output_sections (log_file:option<string>) (r:Range.range) (lines:list<string>) : smt_output =
       let rec until tag lines =
           match lines with
           | [] -> None
  
positive.code:     let theory = theory @[Push]@qry@[Pop] in
      let theory, _used_unsat_core = filter_theory theory in
      let input, qhash, log_file_name = mk_input fresh theory in
      if not (cache_hit log_file_name cache qhash cb) then
          run_job ({job=z3_job log_file_name r fresh label_messages input qhash; callback=cb})
  
  let ask_n_cores
  
negative.code:         match remaining with
          | [] -> ()
          | _ ->
              let msg =
                  BU.format2 "%sUnexpected output from Z3: %s\n"
                                          (match log_file with
                                           | None -> ""
                                           | Some f -> f ^ ": ")
                                          (String.concat "\n" remaining)
              in
              FStar.Errors.log_issue
                       r
                       (Errors.Warning_UnexpectedZ3Output,
                        msg)
      in
      {smt_result = BU.must result_opt;
       smt_reason_unknown = reason_unknown;
       smt_unsat_core = unsat_core;
       smt_statistics = statistics;
       smt_labels = labels}
  
  let doZ3Exe (log_file:_) (r:Range.range) (fresh:bool) (input:string) (label_messages:error_labels) : z3status * z3statistics =
    let parse (z3out:string) =
      let lines = String.split ['\n'] z3out |> List.map BU.trim_string in
      let smt_output = smt_output_sections log_file r lines in
      let unsat_core =
          match smt_output.smt_unsat_core with
          | None -> None
  