module Int:sig
..end
typet =
Z.t Monome.monome
val const : Z.t -> t
val singleton : Z.t -> Monome.term -> t
val of_list : Z.t -> (Z.t * Monome.term) list -> t
val of_term : Monome.term -> t option
val of_term_exn : Monome.term -> t
NotLinear
if the term is not a proper monome.val to_term : t -> Monome.term
val normalize : t -> t
val has_instances : t -> bool
m.constant
, where g is the
GCD of c
for c
in m.coeffs
.
The intuition is that this returns true
iff the monome actually has
some instances in its type. Trivially true in reals or rationals, this is
only the case for integers if m.coeffs + m.constant = 0
is a
satisfiable diophantine equation.
val quotient : t -> Z.t -> t option
quotient e c
tries to divide e
by c
, returning e/c
if
it is still an integer expression.
For instance, quotient (2x + 4y) 2
will return Some (x + 2y)
val divisible : t -> Z.t -> bool
divisible e n
returns true if all coefficients of e
are
divisible by n
and n is an int >= 2val factorize : t -> (t * Z.t) option
e
into Some (e',s)
if e = e' x s
, None
otherwise (ie if s=1). In case it returns Some (e', s)
, s > 1
holdsval normalize_wrt_zero : t -> t
val reduce_same_factor : t -> t -> Monome.term -> t * t
reduce_same_factor m1 m2 t
multiplies m1
and m2
by
some constants, so that their coefficient for t
is the same.Invalid_argument
if t
does not belong to m1
or m2
val compare : (Monome.term -> Monome.term -> Libzipperposition.Comparison.t) ->
t -> t -> Libzipperposition.Comparison.t
val to_multiset : t -> Multisets.MT.t
module Modulo:sig
..end
module Solve:sig
..end