Node SineSolver::getPhaseShiftLemma(const Node& x, const Node& y, const Node& s)
{
NodeManager* nm = NodeManager::currentNM();
+ Node xr = (x.getType().isInteger() ? nm->mkNode(Kind::TO_REAL, x) : x);
+ Node yr = (y.getType().isInteger() ? nm->mkNode(Kind::TO_REAL, y) : y);
Node mone = nm->mkConstReal(Rational(-1));
Node pi = nm->mkNullaryOperator(nm->realType(), PI);
return nm->mkAnd(std::vector<Node>{
nm->mkNode(GEQ, x, nm->mkNode(MULT, mone, pi)),
nm->mkNode(LEQ, x, pi),
}),
- x.eqNode(y),
- x.eqNode(nm->mkNode(
+ xr.eqNode(yr),
+ xr.eqNode(nm->mkNode(
ADD, y, nm->mkNode(MULT, nm->mkConstReal(2), s, pi)))),
nm->mkNode(SINE, y).eqNode(nm->mkNode(SINE, x))});
}
regress0/nl/nta/issue8208-red-nred.smt2
regress0/nl/nta/issue8294-2-double-solve.smt2
regress0/nl/nta/issue8415-embed-arg.smt2
+ regress0/nl/nta/issue8773-phase-shift.smt2
regress0/nl/nta/pi-simplest.smt2
regress0/nl/nta/proj-issue376.smt2
regress0/nl/nta/proj-issue403.smt2