Polynomial.WithProofmodule WithProof constructs polynomials packed with the proof that their sign is correct.
val repr : t -> (LinPoly.t * op) * ProofFormat.prf_ruleval proof : t -> ProofFormat.prf_ruleval of_cstr : (cstr * ProofFormat.prf_rule) -> tval output : Stdlib.out_channel -> t -> unitout_channel chan c pretty-prints the constraint c over the channel chan
val output_sys : Stdlib.out_channel -> t list -> unitval zero : tzero represents the tautology (0=0)
val const : Micromega_core_plugin.NumCompat.Q.t -> tconst n represents the tautology (n>=0)
val mul_cst : Micromega_core_plugin.NumCompat.Q.t -> t -> tmul_cst c q
cutting_plane p does integer reasoning and adjust the constant to be integral
val simple_pivot : (Micromega_core_plugin.NumCompat.Q.t * var) -> t -> t -> t optionsimple_pivot (c,x) p q performs a pivoting over the variable x where p = c+a1.x1+....+c.x+...an.xn and c <> 0
val sort : t list -> ((int * (Micromega_core_plugin.NumCompat.Q.t * var)) * t) listsort sys sorts constraints according to the lexicographic order (number of variables, size of the smallest coefficient
subst sys performs the equivalent of the 'subst' tactic of Rocq. For every p=0 \in sys such that p is linear in x with coefficient +/- 1 i.e. p = 0 <-> x = e and x \notin e. Replace x by e in sys
NB: performing this transformation may hinders the non-linear prover to find a proof. elim_simple_linear_equality is much more careful.
subst_constant b sys performs the equivalent of the 'subst' tactic of Rocq only if there is an equation a.x = c for a,c a constant and a divides c if b= true