let pre_choice_of_thy (xor_eqns : term list list) (std_ls : t_equal)
  (shared_vars : int list) : int list * int list * (int * int) list =

  (* do pre choice of theory with std_ls *)
  let std_xor_uncertain = pre_choice_std shared_vars std_ls in

  (* do pre choice of theory with xor_eqns *)
  (* we could think about skipping this, in most of the cases this does not
   * help to limit the possible choices *)

  let std_xor_uncertain = pre_choice_xor std_xor_uncertain xor_eqns in

  std_xor_uncertain