use of de.prob.animator.domainobjects.LTL in project prob2 by bendisposto.
the class LtlCheckingCommand method processResult.
@Override
public void processResult(final ISimplifiedROMap<String, PrologTerm> bindings) {
PrologTerm term = bindings.get(VARIABLE_NAME_RESULT);
if (term.hasFunctor("ok", 0)) {
LTLOk res = new LTLOk(ltlFormula);
result = res;
value = res;
} else if (term.hasFunctor("nostart", 0)) {
LTLError res = new LTLError(ltlFormula, "Could not find initialisation. Try to animating the model.");
result = res;
value = res;
} else if (term.hasFunctor("typeerror", 0)) {
LTLError res = new LTLError(ltlFormula, "Type error discovered in formula");
result = res;
value = res;
} else if (term.hasFunctor("incomplete", 0)) {
LTLNotYetFinished res = new LTLNotYetFinished(ltlFormula);
result = res;
value = res;
} else if (term.hasFunctor("counterexample", 3)) {
CompoundPrologTerm cpt = BindingGenerator.getCompoundTerm(term, 3);
List<Transition> counterExample = BindingGenerator.getList(cpt.getArgument(1)).stream().filter(pt -> !pt.hasFunctor("none", 0)).map(pt -> Transition.createTransitionFromCompoundPrologTerm(s, BindingGenerator.getCompoundTerm(pt, 4))).collect(Collectors.toList());
PathType pathType;
int loopEntry;
PrologTerm loopStatus = cpt.getArgument(2);
if (loopStatus.hasFunctor("no_loop", 0)) {
pathType = PathType.REDUCED;
loopEntry = -1;
} else if (loopStatus.hasFunctor("deadlock", 0)) {
pathType = PathType.FINITE;
loopEntry = -1;
} else if (loopStatus.hasFunctor("loop", 1)) {
pathType = PathType.INFINITE;
loopEntry = ((IntegerPrologTerm) loopStatus.getArgument(1)).getValue().intValue();
} else {
throw new UnexpectedLoopStatusException("LTL model check returned unexpected loop status: " + loopStatus);
}
List<Transition> pathToCE = BindingGenerator.getList(cpt.getArgument(3)).stream().map(pt -> Transition.createTransitionFromCompoundPrologTerm(s, BindingGenerator.getCompoundTerm(pt, 4))).collect(Collectors.toList());
LTLCounterExample res = new LTLCounterExample(ltlFormula, pathToCE, counterExample, loopEntry, pathType);
result = res;
value = res;
} else {
throw new UnknownLtlResult("Unknown result from LTL checking: " + term);
}
}
Aggregations