let degree =
  let rec
    degree_aux = function
      p -> (* not (is_null_poly (p)) *)
           let
             (a, q) = inv_cons_poly (p)
           in
             if is_null_poly (q)
               then 0
               else 1 + degree_aux (q)
  in
    function
      p -> if not (is_null_poly (p))
             then degree_aux (p)
             else failwith ("degree : requires a non-null polynomial as its argument")