@@ -151,17 +151,11 @@ import io.ksmt.expr.KUnaryMinusArithExpr
151151import io.ksmt.expr.KUninterpretedSortValue
152152import io.ksmt.expr.KUniversalQuantifier
153153import io.ksmt.expr.KXorExpr
154- import io.ksmt.expr.rewrite.simplify.rewriteBvAddNoUnderflowExpr
155- import io.ksmt.expr.rewrite.simplify.rewriteBvMulNoUnderflowExpr
156154import io.ksmt.expr.rewrite.simplify.rewriteBvNegNoOverflowExpr
157155import io.ksmt.expr.rewrite.simplify.rewriteBvSubNoUnderflowExpr
158156import io.ksmt.solver.KSolverUnsupportedFeatureException
159- import org.ksmt.solver.bitwuzla.bindings.Bitwuzla
160- import org.ksmt.solver.bitwuzla.bindings.BitwuzlaKind
161- import org.ksmt.solver.bitwuzla.bindings.BitwuzlaRoundingMode
162- import org.ksmt.solver.bitwuzla.bindings.BitwuzlaSort
163- import org.ksmt.solver.bitwuzla.bindings.BitwuzlaTerm
164- import org.ksmt.solver.bitwuzla.bindings.Native
157+ import io.ksmt.solver.bitwuzla.KBitwuzlaExprInternalizer.BvOverflowCheckMode.OVERFLOW
158+ import io.ksmt.solver.bitwuzla.KBitwuzlaExprInternalizer.BvOverflowCheckMode.UNDERFLOW
165159import io.ksmt.solver.util.KExprLongInternalizerBase
166160import io.ksmt.sort.KArithSort
167161import io.ksmt.sort.KArray2Sort
@@ -186,7 +180,13 @@ import io.ksmt.sort.KRealSort
186180import io.ksmt.sort.KSort
187181import io.ksmt.sort.KSortVisitor
188182import io.ksmt.sort.KUninterpretedSort
183+ import org.ksmt.solver.bitwuzla.bindings.Bitwuzla
184+ import org.ksmt.solver.bitwuzla.bindings.BitwuzlaKind
185+ import org.ksmt.solver.bitwuzla.bindings.BitwuzlaRoundingMode
186+ import org.ksmt.solver.bitwuzla.bindings.BitwuzlaSort
187+ import org.ksmt.solver.bitwuzla.bindings.BitwuzlaTerm
189188import org.ksmt.solver.bitwuzla.bindings.BitwuzlaTermArray
189+ import org.ksmt.solver.bitwuzla.bindings.Native
190190import java.math.BigInteger
191191
192192@Suppress(" LargeClass" )
@@ -726,7 +726,7 @@ open class KBitwuzlaExprInternalizer(val bitwuzlaCtx: KBitwuzlaContext) : KExprL
726726 override fun <T : KBvSort > transform (expr : KBvAddNoOverflowExpr <T >) = with (expr) {
727727 transform(arg0, arg1) { a0: BitwuzlaTerm , a1: BitwuzlaTerm ->
728728 if (isSigned) {
729- mkBvAddSignedNoOverflowTerm(arg0.sort.sizeBits.toInt(), a0, a1, BvOverflowCheckMode . OVERFLOW )
729+ mkBvAddSignedNoOverflowTerm(arg0.sort.sizeBits.toInt(), a0, a1, OVERFLOW )
730730 } else {
731731 val overflowCheck = Native .bitwuzlaMkTerm2(
732732 bitwuzla, BitwuzlaKind .BITWUZLA_KIND_BV_UADD_OVERFLOW , a0, a1
@@ -738,20 +738,20 @@ open class KBitwuzlaExprInternalizer(val bitwuzlaCtx: KBitwuzlaContext) : KExprL
738738
739739 override fun <T : KBvSort > transform (expr : KBvAddNoUnderflowExpr <T >) = with (expr) {
740740 transform(arg0, arg1) { a0: BitwuzlaTerm , a1: BitwuzlaTerm ->
741- mkBvAddSignedNoOverflowTerm(arg0.sort.sizeBits.toInt(), a0, a1, BvOverflowCheckMode . UNDERFLOW )
741+ mkBvAddSignedNoOverflowTerm(arg0.sort.sizeBits.toInt(), a0, a1, UNDERFLOW )
742742 }
743743 }
744744
745745 override fun <T : KBvSort > transform (expr : KBvSubNoOverflowExpr <T >) = with (expr) {
746746 transform(arg0, arg1) { a0: BitwuzlaTerm , a1: BitwuzlaTerm ->
747- mkBvSubSignedNoOverflowTerm(arg0.sort.sizeBits.toInt(), a0, a1, BvOverflowCheckMode . OVERFLOW )
747+ mkBvSubSignedNoOverflowTerm(arg0.sort.sizeBits.toInt(), a0, a1, OVERFLOW )
748748 }
749749 }
750750
751751 override fun <T : KBvSort > transform (expr : KBvSubNoUnderflowExpr <T >) = with (expr) {
752752 if (isSigned) {
753753 transform(arg0, arg1) { a0: BitwuzlaTerm , a1: BitwuzlaTerm ->
754- mkBvSubSignedNoOverflowTerm(arg0.sort.sizeBits.toInt(), a0, a1, BvOverflowCheckMode . UNDERFLOW )
754+ mkBvSubSignedNoOverflowTerm(arg0.sort.sizeBits.toInt(), a0, a1, UNDERFLOW )
755755 }
756756 } else {
757757 transform {
@@ -776,7 +776,7 @@ open class KBitwuzlaExprInternalizer(val bitwuzlaCtx: KBitwuzlaContext) : KExprL
776776 override fun <T : KBvSort > transform (expr : KBvMulNoOverflowExpr <T >) = with (expr) {
777777 transform(arg0, arg1) { a0: BitwuzlaTerm , a1: BitwuzlaTerm ->
778778 if (isSigned) {
779- mkBvMulSignedNoOverflowTerm(arg0.sort.sizeBits.toInt(), a0, a1, BvOverflowCheckMode . OVERFLOW )
779+ mkBvMulSignedNoOverflowTerm(arg0.sort.sizeBits.toInt(), a0, a1, OVERFLOW )
780780 } else {
781781 val overflowCheck = Native .bitwuzlaMkTerm2(
782782 bitwuzla, BitwuzlaKind .BITWUZLA_KIND_BV_UMUL_OVERFLOW , a0, a1
@@ -788,7 +788,7 @@ open class KBitwuzlaExprInternalizer(val bitwuzlaCtx: KBitwuzlaContext) : KExprL
788788
789789 override fun <T : KBvSort > transform (expr : KBvMulNoUnderflowExpr <T >) = with (expr) {
790790 transform(arg0, arg1) { a0: BitwuzlaTerm , a1: BitwuzlaTerm ->
791- mkBvMulSignedNoOverflowTerm(arg0.sort.sizeBits.toInt(), a0, a1, BvOverflowCheckMode . UNDERFLOW )
791+ mkBvMulSignedNoOverflowTerm(arg0.sort.sizeBits.toInt(), a0, a1, UNDERFLOW )
792792 }
793793 }
794794
@@ -813,7 +813,7 @@ open class KBitwuzlaExprInternalizer(val bitwuzlaCtx: KBitwuzlaContext) : KExprL
813813 a1,
814814 BitwuzlaKind .BITWUZLA_KIND_BV_SADD_OVERFLOW
815815 ) { a0Sign, a1Sign ->
816- if (mode == BvOverflowCheckMode . OVERFLOW ) {
816+ if (mode == OVERFLOW ) {
817817 // Both positive
818818 mkAndTerm(longArrayOf(mkNotTerm(a0Sign), mkNotTerm(a1Sign)))
819819 } else {
@@ -833,7 +833,7 @@ open class KBitwuzlaExprInternalizer(val bitwuzlaCtx: KBitwuzlaContext) : KExprL
833833 a1,
834834 BitwuzlaKind .BITWUZLA_KIND_BV_SSUB_OVERFLOW
835835 ) { a0Sign, a1Sign ->
836- if (mode == BvOverflowCheckMode . OVERFLOW ) {
836+ if (mode == OVERFLOW ) {
837837 // Positive sub negative
838838 mkAndTerm(longArrayOf(mkNotTerm(a0Sign), a1Sign))
839839 } else {
@@ -853,7 +853,7 @@ open class KBitwuzlaExprInternalizer(val bitwuzlaCtx: KBitwuzlaContext) : KExprL
853853 a1,
854854 BitwuzlaKind .BITWUZLA_KIND_BV_SMUL_OVERFLOW
855855 ) { a0Sign, a1Sign ->
856- if (mode == BvOverflowCheckMode . OVERFLOW ) {
856+ if (mode == OVERFLOW ) {
857857 // Overflow is possible when sign bits are equal
858858 mkEqTerm(bitwuzlaCtx.ctx.boolSort, a0Sign, a1Sign)
859859 } else {
@@ -1401,6 +1401,8 @@ open class KBitwuzlaExprInternalizer(val bitwuzlaCtx: KBitwuzlaContext) : KExprL
14011401 }
14021402
14031403 override fun transform (expr : KUninterpretedSortValue ): KExpr <KUninterpretedSort > = expr.transform {
1404+ // register it for uninterpreted sort universe
1405+ bitwuzlaCtx.registerDeclaration(expr.decl)
14041406 Native .bitwuzlaMkBvValueUint32(
14051407 bitwuzla,
14061408 expr.sort.internalizeSort(),
0 commit comments