- General function of the filters: The filter as an abstraction layer between the control flow and the formula/modelchecker.
|- It has a formula as child but is not a formula itself.
|- It invokes the modelchecking process on the child formula and manipulates the result.
|- For the purpose of result manipulation it keeps a list of filter actions.
|- Each action manipulates the result in a certain way. For example: It returns only the results for states 25 to 140.
|- Furthermore the printing of the result to standard out and the log is no longer done by the modelchecker but by the filter.
|- That way the tasks of each class becomes more clear: Modelchecker to compute the results, filter to prepare the computed results for write out.
- Battled with a major design problem: How to integrate the optimizing operator (aka. min or max probs for non-det. models) into the filter scheme.
|- It is now integrated as a separate filter action, which does not touch the results but hold the flag determining whether to maximize or to minimize.
|- This action must be the innermost filter action (i.e. the first list entry) to have any effect.
|- This is combined with a special fuction of the modelchecker that manipulates the mutable minimizationStack calculates the modelchecking result and resets the stack to its original state.
|- This way the information whether to min, to max or not to try is managed by the filter and propagated as needed.
|- Remark: Fixed a major risk of undefined behavior in the SparseMdpPrctlModelChecker.
|- If the formula to be checked did not have a NoBoundFormula as root then the minimumOperatorStack would be empty and minimumOperatorStack.top() would result in undefined behavior.
|- Added tests whether the stack is empty before trying to read out the possibly non existant top element.
Next up: Implement similar filters for LTL and CSL and try to get it compiled.
Former-commit-id: 577998e027
- Began removing NoBoundFormulas, since they might not be needed anymore. This task will be taken over by filters if they are to be implemented.
Next up: CSL
Former-commit-id: 6164f73737
Reverted unnecessary changes to the AbstractModel checker.
Next on the list: Adapting the subsystem generation routine to the new method of providing the subsystem to the model checker.
Former-commit-id: 6c90c064a2
Ran into problem with the AbstractModelChecker being declared const for the model check.
I use it for the subsystem generation and tell it what the current subsystem is. so I have two options:
1. Carry the subsystem as argument through all checking functions of the complete checking tree
2. Store the subsystem in the checker and use it in checkAp to induce the correct result back through the tree.
In the original implementation I used option 2.
But that does only work if it is not constant.
Former-commit-id: 8a833cc05e
removed AbstractFormula::cast() in favor of AbstractModelChecker::as()
changed all formulas to use this new one
actually implement ::check(AbstractModelChecker) for all formulas