Skip to content

Princess: Unknown abbreviation symbols #709

Description

@daniel-raffler

Hello

We're seeing a lot of NoSuchElementException when using Princess in CPAchecker:

Exception in thread "main" java.util.NoSuchElementException: key not found: abbrev_57/0
	at scala.collection.immutable.BitmapIndexedMapNode.apply(HashMap.scala:674)
	at scala.collection.immutable.BitmapIndexedMapNode.apply(HashMap.scala:672)
	at scala.collection.immutable.HashMap.apply(HashMap.scala:132)
	at ap.util.FastImmutableMap.apply(FastImmutableMap.scala:72)
	at ap.terfor.TermOrder.compare(TermOrder.scala:452)
	at ap.terfor.preds.PredConj$.$anonfun$sort$4(PredConj.scala:53)
	at ap.terfor.preds.PredConj$.$anonfun$sort$4$adapted(PredConj.scala:53)
	at scala.math.Ordering$$anon$4.compare(Ordering.scala:316)
	at java.base/java.util.TimSort.countRunAndMakeAscending(TimSort.java:355)
	at java.base/java.util.TimSort.sort(TimSort.java:220)
	at java.base/java.util.Arrays.sort(Arrays.java:1307)
	at scala.util.Sorting$.stableSort(Sorting.scala:240)
	at ap.util.Seqs$.filterAndSort(Seqs.scala:620)
	at ap.terfor.preds.PredConj$.sort(PredConj.scala:51)
	at ap.terfor.preds.PredConj$.apply(PredConj.scala:75)
	at ap.terfor.preds.PredConj$.$anonfun$conj$1(PredConj.scala:132)
	at ap.terfor.Formula$.conj(Formula.scala:69)
	at ap.terfor.preds.PredConj$.conj(PredConj.scala:121)
	at ap.terfor.conjunctions.Conjunction$.segregateFormulas(Conjunction.scala:143)
	at ap.terfor.conjunctions.Conjunction$.apply(Conjunction.scala:66)
	at ap.terfor.conjunctions.Conjunction$.apply(Conjunction.scala:79)
	at ap.terfor.conjunctions.Conjunction$.conj(Conjunction.scala:156)
	at ap.terfor.conjunctions.AndLazyConjunction.toConjunction(LazyConjunction.scala:233)
	at ap.terfor.conjunctions.NegLazyConjunction.toFormula(LazyConjunction.scala:176)
	at ap.terfor.conjunctions.NegLazyConjunction.$amp(LazyConjunction.scala:187)
	at ap.terfor.conjunctions.LazyConjunction.$bar(LazyConjunction.scala:96)
	at ap.parser.InputAbsy2Internal.ap$parser$InputAbsy2Internal$$translateFor(InputAbsy2Internal.scala:221)
	at ap.parser.InputAbsy2Internal$.apply(InputAbsy2Internal.scala:59)
	at ap.api.SimpleAPI.toInternal(SimpleAPI.scala:4363)
	at ap.api.SimpleAPI.flushTodo(SimpleAPI.scala:4108)
	at ap.api.SimpleAPI.checkSatHelp(SimpleAPI.scala:2034)
	at ap.api.SimpleAPI.checkSat(SimpleAPI.scala:2020)
	at org.sosy_lab.java_smt.solvers.princess.PrincessAbstractProver.isUnsatImpl(PrincessAbstractProver.java:82)

Some of these were caused by an issue in Princess. However, this has now been fixed, and the remaining crashes are caused by JavaSMT

The problem is, that we're using abbrevSharedExpressions before pushing assertions. This adds additional internal symbols to the term, which can then "leak" into interpolants, and cause the NoSuchElementException later on when the term is used with a different prover

There are several ways to fix it. The easiest solution would be to simply not use abbrevSharedExpressions. However, this may make Princess slower, especially on more complex problems. A better solution may be to track the introduced symbols and then export them to other solvers. Alternatively, we could try to eliminate all abbreviation symbols from interpolants before they can be used anywhere else

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions