let mod_poly =
  let rec
    f = function
      p1, p2 -> (* not (is_null_poly (p2)) *)
                let
                  (q, r) = euclid_div_poly (p1, p2)
                in
                  r                     
  in
    function
      p1, p2 -> if not (is_null_poly (p2))
                  then f (p1, p2)
                  else failwith ("mod_poly : requires a non-null polynomial as its second argument")