@@ -90,6 +90,21 @@ public SpecMathMode replaceSpecMathMode(SpecMathMode specMathMode) {
9090 return overloadedFunctionHandler .replaceSpecMathMode (specMathMode );
9191 }
9292
93+ /**
94+ * Ensure that <code>term</code> is a boolean term. If it is a formula, convert it to a boolean
95+ * term.
96+ */
97+ public JTerm ensureTerm (JTerm term ) {
98+ if (term .sort () == JavaDLTheory .FORMULA ) {
99+ // bugfix (CS): t.getTerm() delivers a formula instead of a
100+ // boolean term; obviously the original boolean terms are
101+ // converted to formulas somewhere else; however, we need
102+ // boolean terms instead of formulas here
103+ return tb .convertToBoolean (term );
104+ }
105+ return term ;
106+ }
107+
93108 // region reach
94109 public SLExpression reach (JTerm t , SLExpression e1 , SLExpression e2 , SLExpression e3 ) {
95110 final LogicVariable stepsLV = e3 == null
@@ -860,14 +875,7 @@ public SLExpression createSeqDef(SLExpression a, SLExpression b, SLExpression t,
860875 }
861876 QuantifiableVariable qv = declVars .head ();
862877 JTerm tt = t .getTerm ();
863- if (tt .sort () == JavaDLTheory .FORMULA ) {
864- // bugfix (CS): t.getTerm() delivers a formula instead of a
865- // boolean term; obviously the original boolean terms are
866- // converted to formulas somewhere else; however, we need
867- // boolean terms instead of formulas here
868- tt = tb .convertToBoolean (t .getTerm ());
869- }
870- JTerm resultTerm = tb .seqDef (qv , a .getTerm (), b .getTerm (), tt );
878+ JTerm resultTerm = tb .seqDef (qv , a .getTerm (), b .getTerm (), ensureTerm (tt ));
871879 final KeYJavaType seqtype = services .getJavaInfo ().getPrimitiveKeYJavaType ("\\ seq" );
872880 return new SLExpression (resultTerm , seqtype );
873881 }
@@ -973,7 +981,7 @@ public SLExpression seqConst(ImmutableList<SLExpression> exprList) {
973981 ImmutableList <JTerm > terms = ImmutableSLList .nil ();
974982 for (SLExpression expr : exprList ) {
975983 if (expr .isTerm ()) {
976- JTerm t = expr .getTerm ();
984+ JTerm t = ensureTerm ( expr .getTerm () );
977985 terms = terms .append (t );
978986 } else {
979987 throw exc .createException0 ("Not a term: " + expr );
@@ -983,10 +991,14 @@ public SLExpression seqConst(ImmutableList<SLExpression> exprList) {
983991 return new SLExpression (tb .seq (terms ), seqtype );
984992 }
985993
994+ public SLExpression seqUpd (JTerm seq , JTerm index , JTerm value ) {
995+ return new SLExpression (tb .seqUpd (seq , index , ensureTerm (value )));
996+ }
997+
986998 public SLExpression createIndexOf (JTerm seq , JTerm elem ) {
987999 final KeYJavaType inttype =
9881000 services .getJavaInfo ().getPrimitiveKeYJavaType (PrimitiveType .JAVA_BIGINT );
989- return new SLExpression (tb .indexOf (seq , elem ), inttype );
1001+ return new SLExpression (tb .indexOf (seq , ensureTerm ( elem ) ), inttype );
9901002 }
9911003
9921004 public @ NonNull JTerm createReturns (@ Nullable JTerm term ) {
0 commit comments