1313import static org .sosy_lab .java_smt .solvers .mathsat5 .Mathsat5NativeApi .msat_make_copy_from ;
1414import static org .sosy_lab .java_smt .solvers .mathsat5 .Mathsat5NativeApi .msat_simplify ;
1515import static org .sosy_lab .java_smt .solvers .mathsat5 .Mathsat5NativeApi .msat_to_smtlib2 ;
16+ import static org .sosy_lab .java_smt .solvers .mathsat5 .Mathsat5NativeApi .msat_to_smtlib2_ext ;
1617
1718import com .google .common .collect .Collections2 ;
1819import com .google .common .primitives .Longs ;
2627
2728final class Mathsat5FormulaManager extends AbstractFormulaManager <Long , Long , Long , Long > {
2829
30+ private final boolean dumpExtendedOutput ;
31+ private final boolean dumpLetExpressions ;
32+
2933 @ SuppressWarnings ("checkstyle:parameternumber" )
3034 Mathsat5FormulaManager (
3135 Mathsat5FormulaCreator creator ,
@@ -36,7 +40,9 @@ final class Mathsat5FormulaManager extends AbstractFormulaManager<Long, Long, Lo
3640 Mathsat5BitvectorFormulaManager pBitpreciseManager ,
3741 Mathsat5FloatingPointFormulaManager pFloatingPointManager ,
3842 Mathsat5ArrayFormulaManager pArrayManager ,
39- Mathsat5EnumerationFormulaManager pEnumerationManager ) {
43+ Mathsat5EnumerationFormulaManager pEnumerationManager ,
44+ boolean pDumpExtendedOutput ,
45+ boolean pDumpLetExpressions ) {
4046 super (
4147 creator ,
4248 pFunctionManager ,
@@ -50,6 +56,8 @@ final class Mathsat5FormulaManager extends AbstractFormulaManager<Long, Long, Lo
5056 null ,
5157 null ,
5258 pEnumerationManager );
59+ dumpLetExpressions = pDumpLetExpressions ;
60+ dumpExtendedOutput = pDumpExtendedOutput ;
5361 }
5462
5563 static long getMsatTerm (Formula pT ) {
@@ -69,7 +77,16 @@ public Long parseImpl(String pS) throws IllegalArgumentException {
6977 public String dumpFormulaImpl (final Long f ) {
7078 assert getFormulaCreator ().getFormulaType (f ) == FormulaType .BooleanType
7179 : "Only BooleanFormulas may be dumped" ;
72- return msat_to_smtlib2 (getEnvironment (), f );
80+
81+ if (dumpExtendedOutput ) {
82+ // msat_to_smtlib2_ext() can export quantified formulas created in MathSAT5 (which it can't
83+ // solve). Can generate let-expressions instead of define-fun bindings.
84+ return msat_to_smtlib2_ext (getFormulaCreator ().getEnv (), f , "" , dumpLetExpressions ? 0 : 1 );
85+ } else {
86+ // msat_to_smtlib2() generates `.def_...` expressions, which are disliked by some solvers
87+ // (due to the . being a SMTLIB2 reserved symbol at the beginning of definitions)
88+ return msat_to_smtlib2 (getEnvironment (), f );
89+ }
7390 }
7491
7592 @ Override
0 commit comments