diff --git a/trunk/source/Library-UltimateCore/src/de/uni_freiburg/informatik/ultimate/core/lib/results/NotAnalyzedResult.java b/trunk/source/Library-UltimateCore/src/de/uni_freiburg/informatik/ultimate/core/lib/results/NotAnalyzedResult.java new file mode 100644 index 00000000000..d6e81484b80 --- /dev/null +++ b/trunk/source/Library-UltimateCore/src/de/uni_freiburg/informatik/ultimate/core/lib/results/NotAnalyzedResult.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2026 Frank Schüssele (schuessf@informatik.uni-freiburg.de) + * Copyright (C) 2026 University of Freiburg + * + * This file is part of the ULTIMATE Core. + * + * The ULTIMATE Core is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The ULTIMATE Core is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the ULTIMATE Core. If not, see . + * + * Additional permission under GNU GPL version 3 section 7: + * If you modify the ULTIMATE Core, or any covered work, by linking + * or combining it with Eclipse RCP (or a modified version of Eclipse RCP), + * containing parts covered by the terms of the Eclipse Public License, the + * licensors of the ULTIMATE Core grant you additional permission + * to convey the resulting work. + */ + +package de.uni_freiburg.informatik.ultimate.core.lib.results; + +import de.uni_freiburg.informatik.ultimate.core.lib.models.annotation.Check; +import de.uni_freiburg.informatik.ultimate.core.model.models.IElement; +import de.uni_freiburg.informatik.ultimate.core.model.models.annotation.Spec; + +/** + * Result to store that we did not check if a specification given at some location holds. + * + * @author Frank Schüssele (schuessf@informatik.uni-freiburg.de) + * + * @param + * Type of the location + */ +public class NotAnalyzedResult extends AbstractResultAtElement { + private final Check mCheckedSpecification; + + public NotAnalyzedResult(final String plugin, final ELEM position) { + super(position, plugin); + final Check check = Check.getAnnotation(position); + if (check == null) { + mCheckedSpecification = new Check(Spec.UNKNOWN); + } else { + mCheckedSpecification = check; + } + } + + @Override + public String getShortDescription() { + return "Not analyzed if " + mCheckedSpecification.getPositiveMessage(); + } + + @Override + public String getLongDescription() { + return getShortDescription(); + } +} diff --git a/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/AbstractCegarLoop.java b/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/AbstractCegarLoop.java index 4de35dba292..21f9874f5e5 100644 --- a/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/AbstractCegarLoop.java +++ b/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/AbstractCegarLoop.java @@ -814,10 +814,6 @@ public CegarLoopResultBuilder addResult(final IcfgLocation loc, final Result res unprovabilityReasons.addAll(UnprovabilityReason.getUnprovabilityReasons(programExecution)); } - if (unprovabilityReasons.isEmpty()) { - unprovabilityReasons.add(new UnprovabilityReason("Not analyzed")); - } - } else { unprovabilityReasons = null; assert reasonUnknown == null; diff --git a/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/CegarLoopResultReporter.java b/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/CegarLoopResultReporter.java index b76f45dabb5..a7bba9f7035 100644 --- a/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/CegarLoopResultReporter.java +++ b/trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/CegarLoopResultReporter.java @@ -36,6 +36,7 @@ import de.uni_freiburg.informatik.ultimate.core.lib.results.AllSpecificationsHoldResult; import de.uni_freiburg.informatik.ultimate.core.lib.results.CounterExampleResult; import de.uni_freiburg.informatik.ultimate.core.lib.results.DataRaceFoundResult; +import de.uni_freiburg.informatik.ultimate.core.lib.results.NotAnalyzedResult; import de.uni_freiburg.informatik.ultimate.core.lib.results.PositiveResult; import de.uni_freiburg.informatik.ultimate.core.lib.results.TimeoutResultAtElement; import de.uni_freiburg.informatik.ultimate.core.lib.results.UnprovabilityReason; @@ -104,8 +105,8 @@ public void reportCegarLoopResult(final CegarLoopResult clres) { case UNSAFE -> reportCounterexampleResult(errorLoc, localResult.getProgramExecution()); case TIMEOUT, USER_LIMIT_ITERATIONS, USER_LIMIT_PATH_PROGRAM, USER_LIMIT_TIME, USER_LIMIT_TRACEHISTOGRAM -> reportLimitResult(errorLoc, localResult); - case UNKNOWN -> reportUnproveableResult(errorLoc, localResult.getProgramExecution(), - localResult.getUnprovabilityReasons()); + case UNKNOWN -> reportUnknownResult(localResult.getUnprovabilityReasons(), errorLoc, + localResult.getProgramExecution()); } } } @@ -159,6 +160,15 @@ private void reportLimitResult(final IcfgLocation errorLoc, final CegarLoopLocal mReportFunction.accept(errorLoc, res); } + private void reportUnknownResult(final List unprovabilityReasons, final IcfgLocation errorLoc, + final IProgramExecution programExecution) { + if (unprovabilityReasons.isEmpty()) { + mReportFunction.accept(errorLoc, new NotAnalyzedResult<>(mPluginId, errorLoc)); + } else { + reportUnproveableResult(errorLoc, programExecution, unprovabilityReasons); + } + } + private void reportUnproveableResult(final IcfgLocation errorLoc, final IProgramExecution pe, final List unprovabilityReasons) { assert pe == null || errorLoc == getErrorPP(pe);