nm->mkNode(LEQ, nm->mkConstReal(Rational(0)), var),
nm->mkNode(LT, var, pi));
}
+ Node cond;
+ if (k == ARCSINE || k == ARCCOSINE || k == ARCSECANT
+ || k == ARCCOSECANT)
+ {
+ // -1 <= x <= 1
+ cond = nm->mkNode(
+ AND,
+ nm->mkNode(GEQ, node[0], nm->mkConstReal(Rational(-1))),
+ nm->mkNode(LEQ, node[0], nm->mkConstReal(Rational(1))));
+ if (k == ARCSECANT || k == ARCCOSECANT)
+ {
+ cond = cond.notNode();
+ }
+ }
Kind rk =
k == ARCSINE
: (k == ARCSECANT ? SECANT : COTANGENT))));
Node invTerm = nm->mkNode(rk, var);
lem = nm->mkNode(AND, rlem, invTerm.eqNode(node[0]));
+ if (!cond.isNull())
+ {
+ lem = nm->mkNode(IMPLIES, cond, lem);
+ }
}
Assert(!lem.isNull());
lems.push_back(mkSkolemLemma(lem, var));
regress0/nl/nta/proj-issue376.smt2
regress0/nl/nta/proj-issue403.smt2
regress0/nl/nta/proj-issue460-pi-value.smt2
+ regress0/nl/nta/proj-issue483-arccos-oob.smt2
regress0/nl/nta/real-pi.smt2
regress0/nl/nta/sin-sym.smt2
regress0/nl/nta/sin-sym-schema.smt2
(declare-fun a5 () Bool)
(declare-fun a6 () Bool)
-(assert (= a1 (not (= (sin (arcsin x1)) x1))))
-(assert (= a3 (< (arccos x3) 0)))
+(assert (= a1 (and (<= (- 1) x1 1) (not (= (sin (arcsin x1)) x1)))))
+(assert (= a3 (and (<= (- 1) x3 1) (< (arccos x3) 0))))
(assert (= a4 (> (arctan x4) 1.8)))
(assert (or a1 a3 a4))