LinearTwoVarEqualityDomain.EqualitiesConjunction
module IntMap : sig ... end
val show_formatted :
(IntMap.key -> string) ->
((Z.t * IntMap.key) option * Z.t * Z.t) IntMap.t ->
string
val show : ((Z.t * IntMap.key) option * Z.t * Z.t) IntMap.t -> string
val empty : unit -> int * 'a IntMap.t
creates a domain of dimension 0
val make_empty_conj : 'a -> 'b * 'c IntMap.t
creates a domain of dimension len without any valid equalities
val nontrivial : ('a * 'b IntMap.t) -> IntMap.key -> bool
trivial equalities are of the form var_i = var_i and are not kept explicitely in the sparse representation of EquanlitiesConjunction
turn x = (cy+o)/d into y = (dx-o)/c
val get_rhs :
('a * ((Z.t * IntMap.key) option * Z.t * Z.t) IntMap.t) ->
IntMap.key ->
(Z.t * IntMap.key) option * Z.t * Z.t
sparse implementation of get rhs for lhs, but will default to no mapping for sparse entries
set_rhs, staying loyal to immutable, sparse map underneath; do not attempt any normalization
val canonicalize_and_set :
('a * Rhs.t IntMap.t) ->
IntMap.key ->
((Z.t * int) option * Z.t * Z.t) ->
'b * Rhs.t IntMap.t
canonicalize equation, and set_rhs, staying loyal to immutable, sparse map underneath
val modify_variables_in_domain :
(IntMap.key * ((Z.t * IntMap.key) option * Z.t * Z.t) IntMap.t) ->
IntMap.key array ->
(IntMap.key -> int -> IntMap.key) ->
IntMap.key * ((Z.t * IntMap.key) option * Z.t * Z.t) IntMap.t
required by AbstractRelationalDomainRepresentation, true if dimension is zero
val is_top_con : ('a * 'b IntMap.t) -> bool
val forget_variable :
('a * Rhs.t IntMap.t) ->
IntMap.key ->
'b * Rhs.t IntMap.t
val dim_add :
Apron.Dim.change ->
(IntMap.key * ((Z.t * IntMap.key) option * Z.t * Z.t) IntMap.t) ->
IntMap.key * ((Z.t * IntMap.key) option * Z.t * Z.t) IntMap.t
val dim_remove :
Apron.Dim.change ->
(IntMap.key * Rhs.t IntMap.t) ->
del:'a ->
IntMap.key * Rhs.t IntMap.t
val meet_with_one_conj :
('a * ((Z.t * IntMap.key) option * Z.t * Z.t) IntMap.t) ->
IntMap.key ->
((Z.t * IntMap.key) option * Z.t * Z.t) ->
'a * ((Z.t * IntMap.key) option * Z.t * Z.t) IntMap.t
val affine_transform :
('a * Rhs.t IntMap.t) ->
IntMap.key ->
(Goblint_std.GobZ.t * IntMap.key * Goblint_std.GobZ.t * Goblint_std.GobZ.t) ->
'a * Rhs.t IntMap.t
affine transform variable i allover conj with transformer (Some (coeff,i)+offs)/divi