Polynomial.WithProof
module WithProof
constructs polynomials packed with the proof that their sign is correct.
type t = (LinPoly.t * op) * ProofFormat.prf_rule
val of_cstr : (cstr * ProofFormat.prf_rule) -> t
val output : Stdlib.out_channel -> t -> unit
out_channel chan c
pretty-prints the constraint c
over the channel chan
val output_sys : Stdlib.out_channel -> t list -> unit
val zero : t
zero
represents the tautology (0=0)
val const : NumCompat.Q.t -> t
const n
represents the tautology (n>=0)
cutting_plane p
does integer reasoning and adjust the constant to be integral
val simple_pivot : (NumCompat.Q.t * var) -> t -> t -> t option
simple_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 * (NumCompat.Q.t * var)) * t) list
sort 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 Coq. 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 Coq only if there is an equation a.x = c for a,c a constant and a divides c if b= true