anchor.diff:      | hd::tl -> fresh_scope := (hd@decls)::tl
       | _ -> failwith "Impossible"
      end;
  -   bg_scope := List.rev decls @ !bg_scope
  -
  -//bgtheory fresh: gets that current sequence of decls
  -//                to be fed to Z3 as the background theory
  -//                for some query
  -let bgtheory fresh =
  -    if fresh
  -    then (bg_scope := [];
  -          List.rev !fresh_scope |> List.flatten)
  -    else let bg = !bg_scope in
  -         bg_scope := [];
  -         List.rev bg
  +   bg_scope := !bg_scope @ decls
   
   //refresh: create a new z3 process, and reset the bg_scope
   let refresh () =
       if (Options.n_cores() < 2) then
  -      bg_z3_proc.refresh();
  -      let theory = bgtheory true in
  -      bg_scope := List.rev theory
  +        bg_z3_proc.refresh();
  +        bg_scope := List.flatten (List.rev !fresh_scope)
   
   //mark, reset_mark, commit_mark:
   //    setting rollback points for the interactive mode
  
positive.code: // new queries are pushed
  let push msg    =
      fresh_scope := [Term.Caption msg; Term.Push]::!fresh_scope;
      bg_scope := [Term.Caption msg; Term.Push]@ !bg_scope
  
  let pop msg      =
      fresh_scope := List.tl !fresh_scope;
      bg_scope := [Term.Pop; Term.Caption msg]@ !bg_scope
  
  //giveZ3 decls: adds decls to the stack of declarations
  //              to be actually given to Z3 only when the next
  
negative.code:       aux n_cores
      else ()
  
  let enqueue j =
      BU.monitor_enter job_queue;
      job_queue := !job_queue@[j];
      BU.monitor_pulse job_queue;
      BU.monitor_exit job_queue
  
  let finish () =
      let rec aux () =
  