Rat.SMTmodule Log : sig ... endA rational symbol is a pair of integer SMT symbols (num, den).
val add :
(Smtml.Expr.t * Smtml.Expr.t) ->
(Smtml.Expr.t * Smtml.Expr.t) ->
Smtml.Expr.t * Smtml.Expr.tadd (n1/d1) (n2/d2) = (n1·d2 + n2·d1) / (d1·d2) at the SMT level.
val mul :
(Smtml.Expr.t * Smtml.Expr.t) ->
(Smtml.Expr.t * Smtml.Expr.t) ->
Smtml.Expr.t * Smtml.Expr.tmul (n1/d1) (n2/d2) = (n1·n2) / (d1·d2) at the SMT level.
ge (n1/d1) (n2/d2) ↔ n1·d2 ≥ n2·d1 (cross-multiply, positive denoms).
eq (n1/d1) (n2/d2) ↔ n1·d2 = n2·d1.