module Q:S
with module Coeff = Scalar.Q
module Coeff:Scalar.S
Type of coefficients.
type
t
Type of affine expressions.
val of_list : (Ident.t * Coeff.t) list -> Coeff.t -> t
of_list [(x_1, a_1);..; (x_n, a_n)] c
builds the affine
expression a_1 x_1 + ... + a_n x_n + c. Duplicates or zeros
coefficients are accepted (for instance 2 x_0 + 0 x_1 + 3 x_0 is
a valid input for 5 x_0).
val to_list : t -> (Ident.t * Coeff.t) list * Coeff.t
Returns a list sorted in increasing order of Ident.compare without duplicates nor zeros.
val var : Ident.t -> t
Same as LinExpr.S.of_list
with the list [ident, Coeff.one]
and
constant Coeff.zero
.
val const : Coeff.t -> t
Same as LinExpr.S.of_list
with an empty list.
val mult_scalar : Coeff.t -> t -> t
val add : t -> t -> t
val sub : t -> t -> t
val replace : t -> (Ident.t * t) list -> t
compose le [v_1, l_1;...; v_n, l_n]
replaces each variable
v_i
by l_i
in l
. No duplicates are allowed.
val remove : t -> Ident.t -> t
val compare : t -> t -> int
val is_var : t -> (Ident.t * Coeff.t) option
val is_const : t -> Coeff.t option
val choose : t -> (Ident.t * Coeff.t) option
Returns one of the (non zero) coefficients in the linear expression (if any).
val pp : Stdlib.Format.formatter -> t -> unit