let unif_xor (eqns : term list list) (po : t_po) (atms : int list) : t_equal =
  let n = List.length eqns in
  if n=0 then
    []
  else
    let vars = get_vars atms [] eqns in
    let vars_array = Array.of_list vars in
    let atms_array = Array.of_list atms in
    let a, b = build_matrices eqns n vars_array atms_array in
    let ro = gauss_elim a b in
    (* solve_trianglar may raise the exception No_Solution *)
    solve_triangular a b ro vars_array atms_array po