Simplification of smt2 printer for type ascriptions (#8801)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Sun, 22 May 2022 00:02:54 +0000 (19:02 -0500)
committerGitHub <noreply@github.com>
Sun, 22 May 2022 00:02:54 +0000 (00:02 +0000)
Previously had code for dealing with subtypes

src/printer/smt2/smt2_printer.cpp

index 519d67fc161451228147f36cd9d7d869b2d7d4d5..ec29595e7c7bdc4cb6246d4d19f7b2015d8c9598 100644 (file)
@@ -488,52 +488,14 @@ void Smt2Printer::toStream(std::ostream& out,
     return;
   }
 
-  // determine if we are printing out a type ascription, store the argument of
-  // the type ascription into type_asc_arg.
-  Node type_asc_arg;
-  TypeNode force_nt;
+  // determine if we are printing out a type ascription
   if (k == kind::APPLY_TYPE_ASCRIPTION)
   {
-    force_nt = n.getOperator().getConst<AscriptionType>().getType();
-    type_asc_arg = n[0];
-  }
-  if (!type_asc_arg.isNull())
-  {
-    if (force_nt.isRealOrInt())
-    {
-      // we prefer using (/ x 1) instead of (to_real x) here.
-      // the reason is that (/ x 1) is SMT-LIB compliant when x is a constant
-      // or the logic is non-linear, whereas (to_real x) is compliant when
-      // the logic is mixed int/real. The former occurs more frequently.
-      bool is_int = force_nt.isInteger();
-      // If constant rational, print as special case
-      Kind ka = type_asc_arg.getKind();
-      if (ka == kind::CONST_RATIONAL || ka == kind::CONST_INTEGER)
-      {
-        const Rational& r = type_asc_arg.getConst<Rational>();
-        toStreamRational(out, r, !is_int, d_variant);
-      }
-      else
-      {
-        out << "("
-            << smtKindString(is_int ? kind::TO_INTEGER : kind::DIVISION,
-                             d_variant)
-            << " ";
-        toStream(out, type_asc_arg, toDepth, lbind);
-        if (!is_int)
-        {
-          out << " 1";
-        }
-        out << ")";
-      }
-    }
-    else if (k != kind::UNINTERPRETED_SORT_VALUE)
-    {
-      // use type ascription
-      out << "(as ";
-      toStream(out, type_asc_arg, toDepth < 0 ? toDepth : toDepth - 1, lbind);
-      out << " " << force_nt << ")";
-    }
+    TypeNode typeAsc = n.getOperator().getConst<AscriptionType>().getType();
+    // use type ascription
+    out << "(as ";
+    toStream(out, n[0], toDepth < 0 ? toDepth : toDepth - 1, lbind);
+    out << " " << typeAsc << ")";
     return;
   }