@@ -1853,9 +1853,12 @@ namespace nlsat {
1853
1853
tout << " new valid clause:\n " ;
1854
1854
display (tout, m_lazy_clause.size (), m_lazy_clause.data ()) << " \n " ;);
1855
1855
1856
+
1857
+ if (m_log_lemmas)
1858
+ log_lemma (verbose_stream (), m_lazy_clause.size (), m_lazy_clause.data (), true );
1859
+
1856
1860
if (m_check_lemmas) {
1857
1861
check_lemma (m_lazy_clause.size (), m_lazy_clause.data (), true , nullptr );
1858
- log_lemma (verbose_stream (), m_lazy_clause.size (), m_lazy_clause.data (), true );
1859
1862
m_valids.push_back (mk_clause_core (m_lazy_clause.size (), m_lazy_clause.data (), false , nullptr ));
1860
1863
}
1861
1864
@@ -3163,7 +3166,6 @@ namespace nlsat {
3163
3166
if (a.i () == 1 && m_pm.degree (a.p (), a.x ()) == 1 )
3164
3167
return display_linear_root_smt2 (out, a, proc);
3165
3168
#if 1
3166
- // A first approximation: this encoding assumes roots are distinct
3167
3169
out << " (exists (" ;
3168
3170
for (unsigned j = 0 ; j < a.i (); ++j) {
3169
3171
std::string y = std::string (" y" ) + std::to_string (j);
@@ -3180,14 +3182,16 @@ namespace nlsat {
3180
3182
std::string y2 = std::string (" y" ) + std::to_string (j+1 );
3181
3183
out << " (< " << y1 << " " << y2 << " )\n " ;
3182
3184
}
3183
- std::string y0 = " y0" ;
3185
+ // TODO we need (forall z : z < yn . p(z) => z = y1 or ... z = y_{n-1})
3186
+ // to say y1, .., yn are the first n distinct roots.
3187
+ //
3184
3188
std::string yn = " y" + std::to_string (a.i () - 1 );
3185
3189
switch (a.get_kind ()) {
3186
- case atom::ROOT_LT: out << " (< " ; proc (out, a.x ()); out << " " << y0 << " )" ; break ;
3190
+ case atom::ROOT_LT: out << " (< " ; proc (out, a.x ()); out << " " << yn << " )" ; break ;
3187
3191
case atom::ROOT_GT: out << " (> " ; proc (out, a.x ()); out << " " << yn << " )" ; break ;
3188
- case atom::ROOT_LE: out << " (<= " ; proc (out, a.x ()); out << " " << y0 << " )" ; break ;
3192
+ case atom::ROOT_LE: out << " (<= " ; proc (out, a.x ()); out << " " << yn << " )" ; break ;
3189
3193
case atom::ROOT_GE: out << " (>= " ; proc (out, a.x ()); out << " " << yn << " )" ; break ;
3190
- case atom::ROOT_EQ: out << " (= " ; proc (out, a.x ()); out << " " << y0 << " )" ; NOT_IMPLEMENTED_YET (); break ;
3194
+ case atom::ROOT_EQ: out << " (= " ; proc (out, a.x ()); out << " " << yn << " )" ; NOT_IMPLEMENTED_YET (); break ;
3191
3195
}
3192
3196
out << " ))" ;
3193
3197
return out;
0 commit comments