Pulselib.PulseFormulaTableaumodule L = IBase.Loggingmodule CItv = PulseCItvmodule SatUnsat = PulseSatUnsatmodule Debug = PulseFormulaDebugmodule Var = PulseFormulaVarmodule Q = QSafeCappedmodule LinArith = PulseFormulaLinAritAn implementation of [2] "Solving Linear Arithmetic Constraints" by Harald Rueß and Natarajan Shankar, SRI International, CSL Technical Report CSL-SRI-04-01, 15 January 2004. It uses a Simplex-like technique to reason about inequalities over linear arithmetic expressions.
val pp_var_map :
?filter:((Var.Map.key * 'a) -> bool) ->
arrow:string ->
(F.formatter -> 'a -> unit) ->
(F.formatter -> Var.Map.key -> unit) ->
IStdlib.Pp.F.formatter ->
'a Var.Map.t ->
unittype t = LinArith.t Var.Map.tAs for linear equalities linear_eqs below, the tableau is represented as a map of bindings u -> l meaning u = l.
Invariants:
u = c + q1·v1 + ... + qN·vN is such that c>0val pp :
(F.formatter -> Var.Map.key -> unit) ->
IStdlib.Pp.F.formatter ->
LinArith.t Var.Map.t ->
unitval yojson_of_t : LinArith.t Var.Map.t -> Yojson.Safe.tval empty : 'a Var.Map.tval do_pivot :
LinArith.Var.t ->
LinArith.t ->
(LinArith.Var.t * Q.t) ->
LinArith.t Var.Map.t ->
LinArith.t Var.Map.tval pivot_unbounded_with_positive_coeff :
LinArith.t Var.Map.t ->
LinArith.Var.t ->
LinArith.t ->
LinArith.t Var.Map.t optionval find_pivotable_to :
Var.t ->
LinArith.t Var.Map.t ->
(Var.Map.key * (Var.t * Q.t)) optionval find_pivot :
LinArith.t ->
LinArith.t Var.Map.t ->
(Var.Map.key * (Var.t * Q.t)) optionval pivot : LinArith.t -> LinArith.t Var.Map.t -> LinArith.t Var.Map.t option