sig
module type S =
sig
module Coeff : Scalar.S
type t
val of_list : (Ident.t * Coeff.t) list -> Coeff.t -> LinExpr.S.t
val to_list : LinExpr.S.t -> (Ident.t * Coeff.t) list * Coeff.t
val var : Ident.t -> LinExpr.S.t
val const : Coeff.t -> LinExpr.S.t
val mult_scalar : Coeff.t -> LinExpr.S.t -> LinExpr.S.t
val add : LinExpr.S.t -> LinExpr.S.t -> LinExpr.S.t
val sub : LinExpr.S.t -> LinExpr.S.t -> LinExpr.S.t
val replace :
LinExpr.S.t -> (Ident.t * LinExpr.S.t) list -> LinExpr.S.t
val remove : LinExpr.S.t -> Ident.t -> LinExpr.S.t
val compare : LinExpr.S.t -> LinExpr.S.t -> int
val is_var : LinExpr.S.t -> (Ident.t * Coeff.t) option
val is_const : LinExpr.S.t -> Coeff.t option
val choose : LinExpr.S.t -> (Ident.t * Coeff.t) option
val pp : Stdlib.Format.formatter -> LinExpr.S.t -> unit
end
module Make :
functor (SC : Scalar.S) ->
sig
module Coeff :
sig
type t = SC.t
val compare : t -> t -> int
val zero : t
val one : t
val of_float : float -> t
val to_float : t -> float
val of_q : Q.t -> t
val to_q : t -> Q.t
val add : t -> t -> t
val sub : t -> t -> t
val mult : t -> t -> t
val div : t -> t -> t
val pp : Format.formatter -> t -> unit
val minus_one : t
val of_int : int -> t
val neg : t -> t
val inv : t -> t
val equal : t -> t -> bool
val leq : t -> t -> bool
val geq : t -> t -> bool
val lt : t -> t -> bool
val gt : t -> t -> bool
val sign : t -> int
val ( ~- ) : t -> t
val ( + ) : t -> t -> t
val ( - ) : t -> t -> t
val ( * ) : t -> t -> t
val ( / ) : t -> t -> t
val ( = ) : t -> t -> bool
val ( <> ) : t -> t -> bool
val ( <= ) : t -> t -> bool
val ( >= ) : t -> t -> bool
val ( < ) : t -> t -> bool
val ( > ) : t -> t -> bool
end
type t
val of_list : (Ident.t * Coeff.t) list -> Coeff.t -> t
val to_list : t -> (Ident.t * Coeff.t) list * Coeff.t
val var : Ident.t -> t
val const : Coeff.t -> t
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
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
val pp : Format.formatter -> t -> unit
end
module Q :
sig
module Coeff :
sig
type t = Q.t
val compare : t -> t -> int
val zero : t
val one : t
val of_float : float -> t
val to_float : t -> float
val of_q : Q.t -> t
val to_q : t -> Q.t
val add : t -> t -> t
val sub : t -> t -> t
val mult : t -> t -> t
val div : t -> t -> t
val pp : Format.formatter -> t -> unit
val minus_one : t
val of_int : int -> t
val neg : t -> t
val inv : t -> t
val equal : t -> t -> bool
val leq : t -> t -> bool
val geq : t -> t -> bool
val lt : t -> t -> bool
val gt : t -> t -> bool
val sign : t -> int
val ( ~- ) : t -> t
val ( + ) : t -> t -> t
val ( - ) : t -> t -> t
val ( * ) : t -> t -> t
val ( / ) : t -> t -> t
val ( = ) : t -> t -> bool
val ( <> ) : t -> t -> bool
val ( <= ) : t -> t -> bool
val ( >= ) : t -> t -> bool
val ( < ) : t -> t -> bool
val ( > ) : t -> t -> bool
end
type t
val of_list : (Ident.t * Coeff.t) list -> Coeff.t -> t
val to_list : t -> (Ident.t * Coeff.t) list * Coeff.t
val var : Ident.t -> t
val const : Coeff.t -> t
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
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
val pp : Format.formatter -> t -> unit
end
module Float :
sig
module Coeff :
sig
type t = float
val compare : t -> t -> int
val zero : t
val one : t
val of_float : float -> t
val to_float : t -> float
val of_q : Q.t -> t
val to_q : t -> Q.t
val add : t -> t -> t
val sub : t -> t -> t
val mult : t -> t -> t
val div : t -> t -> t
val pp : Format.formatter -> t -> unit
val minus_one : t
val of_int : int -> t
val neg : t -> t
val inv : t -> t
val equal : t -> t -> bool
val leq : t -> t -> bool
val geq : t -> t -> bool
val lt : t -> t -> bool
val gt : t -> t -> bool
val sign : t -> int
val ( ~- ) : t -> t
val ( + ) : t -> t -> t
val ( - ) : t -> t -> t
val ( * ) : t -> t -> t
val ( / ) : t -> t -> t
val ( = ) : t -> t -> bool
val ( <> ) : t -> t -> bool
val ( <= ) : t -> t -> bool
val ( >= ) : t -> t -> bool
val ( < ) : t -> t -> bool
val ( > ) : t -> t -> bool
end
type t
val of_list : (Ident.t * Coeff.t) list -> Coeff.t -> t
val to_list : t -> (Ident.t * Coeff.t) list * Coeff.t
val var : Ident.t -> t
val const : Coeff.t -> t
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
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
val pp : Format.formatter -> t -> unit
end
exception Not_linear
module MakeScalar :
functor (L : S) ->
sig
type t = L.t
val compare : t -> t -> int
val zero : t
val one : t
val of_float : float -> t
val to_float : t -> float
val of_q : Q.t -> t
val to_q : t -> Q.t
val add : t -> t -> t
val sub : t -> t -> t
val mult : t -> t -> t
val div : t -> t -> t
val pp : Format.formatter -> t -> unit
val minus_one : t
val of_int : int -> t
val neg : t -> t
val inv : t -> t
val equal : t -> t -> bool
val leq : t -> t -> bool
val geq : t -> t -> bool
val lt : t -> t -> bool
val gt : t -> t -> bool
val sign : t -> int
val ( ~- ) : t -> t
val ( + ) : t -> t -> t
val ( - ) : t -> t -> t
val ( * ) : t -> t -> t
val ( / ) : t -> t -> t
val ( = ) : t -> t -> bool
val ( <> ) : t -> t -> bool
val ( <= ) : t -> t -> bool
val ( >= ) : t -> t -> bool
val ( < ) : t -> t -> bool
val ( > ) : t -> t -> bool
end
end