let variable_choose p a =
    try
      List.iter
        (fun m ->
           let q = coefficient_of_mono m in
           let x = variable_of_mono m in
             if p q x then raise(FoundVariable(x)))
        (nonconstant_monomials_of a);
      raise Not_found
    with
        FoundVariable(x) -> x