diff --git a/polynome.ml b/polynome.ml
index adf65ea4704dee048fff9664bb4267657030852f..e29f5ad2b8d3099b811e81bec66a862fe3f596c4 100644
--- a/polynome.ml
+++ b/polynome.ml
@@ -24,8 +24,10 @@ module type Degree =
     type degree
     val print: degree -> string
     val add: degree -> degree -> degree
+    val subtract: degree -> degree -> degree
     val equal: degree -> degree -> bool
     val is_bigger: degree -> degree -> bool
+    val is_null: degree -> bool
   end
 ;;
   
@@ -107,18 +109,21 @@ module Polynome (C : Coefficient) (D : Degree) =
         |Null -> Null
         |NotNull (cp, dp, pp) -> NotNull (C.minus cp, dp, minus pp) 
       in x add (minus y) 
-    (*fonction privée pour couper un polynome*)
+    (*fonction privée pour couper un polynome selon un degree*)
+    (*polynome -> degree -> degree *)
     let cut x n = 
       let rec acc_cut acc p i = match p, i with
         |Null, _ -> acc, Null
-        |_, 0 -> acc, p 
         |NotNull (cp, dp, pp), j -> 
-            let rec insert cc dd pp = (match pp with
-              |Null -> NotNull (cc, dd, Null)
-              |NotNull (ccp, ddp, ppp) -> 
+            if D.is_null j then acc, p else
+            if D.is_bigger dp j then
+              let rec insert cc dd pp = (match pp with
+                |Null -> NotNull (cc, dd, Null)
+                |NotNull (ccp, ddp, ppp) -> 
                   NotNull (ccp, ddp, (insert cc dd ppp))
-            ) in
-            acc_cut (insert cp dp acc) pp (j - 1)
+              ) in
+              acc_cut (insert cp (D.subtract dp j) acc) pp j
+            else acc, p
       in acc_cut Null x n
     (*fonction privée pour connaitre la longeur du polynome *)
     let length x = 
diff --git a/simplepolynome.ml b/simplepolynome.ml
index b7f2de39bc1ecccaeebb3bb0332ec8ba0e55c787..98b7b732978fc4c5f4673a9f2092f85a08d55a5d 100644
--- a/simplepolynome.ml
+++ b/simplepolynome.ml
@@ -7,8 +7,10 @@ module SimpleDegree =
     type degree = int
     let print d = (string_of_int d)
     let add d1 d2 = d1 + d2
+    let subtract d1 d2 = d1 - d2
     let equal d1 d2 = (d1 == d2)
     let is_bigger d1 d2 = (d1 > d2)
+    let is_null d = (d == 0)
   end
 ;;