anchor.diff:                      |> THENC <| NUM_LE_CONV
                       GEN_REWRITE_CONV I [pth_ge3]
                       |> THENC <| NUM2_EQ_CONV]
  -    let [pth_gt1; pth_gt2a; pth_gt2b; pth_gt3] = (CONJUNCTS << prove)((parse_term "(--(&m) > &n <=> F) /\
  +    let [pth_gt1; pth_gt2a; pth_gt2b; pth_gt3] = 
  +      (CONJUNCTS << prove)((parse_term "(--(&m) > &n <=> F) /\
         (&m > &n <=> n < m) /\
         (--(&m) > --(&n) <=> m < n) /\
  -      (&m > --(&n) <=> ~((m = 0) /\ (n = 0)))"), REWRITE_TAC 
  -                                                     [pth_lt1; pth_lt2a; 
  -                                                      pth_lt2b; pth_lt3; INT_GT]
  +      (&m > --(&n) <=> ~((m = 0) /\ (n = 0)))"), REWRITE_TAC [pth_lt1; pth_lt2a; pth_lt2b; pth_lt3; INT_GT]
                                                    |> THEN <| CONV_TAC TAUT)
       let INT_GT_CONV = 
           FIRST_CONV [GEN_REWRITE_CONV I [pth_gt1]
  
positive.code:              (parse_term "(*):int->int->int"), genvar bool_ty, 
               (parse_term "(pow):int->num->int"), INT_INTEGRAL, TRUTH, 
               INT_POLY_CONV)
      pure, (fun tms tm -> 
          if forall (fun t -> type_of t = int_ty) (tm :: tms)
          then ideal tms tm
          else failwith "int_ideal_cofactors: not all terms have type :int")
  
negative.code:                     |> THENC <| NUM_LT_CONV
                      GEN_REWRITE_CONV I [pth_lt3]
                      |> THENC <| NUM2_NE_CONV]
      let [pth_ge1; pth_ge2a; pth_ge2b; pth_ge3] = 
        (CONJUNCTS << prove)((parse_term "(&m >= --(&n) <=> T) /\
        (&m >= &n <=> n <= m) /\
        (--(&m) >= --(&n) <=> m <= n) /\
        (--(&m) >= &n <=> (m = 0) /\ (n = 0))"), REWRITE_TAC [pth_le1; pth_le2a; pth_le2b; pth_le3; INT_GE]
                                                 |> THEN <| CONV_TAC TAUT)
      let INT_GE_CONV = 
          FIRST_CONV [GEN_REWRITE_CONV I [pth_ge1]
  