Accounting for runtime errors earlier during data-based synthesis
CifBddEdge#apply
inconsistently handles runtime errors. For example, a forward reachability search prevents exploring runtime error states only when the given restriction
is null
. And backward reachability explores (otherwise unreachable) runtime errors states when searching for backward-reachable uncontrolled bad states, which I think isn't needed. Instead of resolving runtime errors when applying edges, it may be better to already account for them in the CIF-to-BDD conversion. Then CifToBddConverter::convertPlantReqAuts
could be adapted (and possibly other places as well) to strengthen all edge guards by also requiring that the edge cannot be taken from runtime error states. Then CifBddEdge
can be simplified with respect to that.
Moreover, CifBddEdge#apply
currently applies the runtime error predicate for backward-reachable uncontrolled bad states. This may also be done earlier, and only once, as part of CifDataSynthesis#synthesize
when applying requirements. Applying runtime errors should then be an extra requirement, which updates the controlled behavior predicate by removing, for any edge, the predicate edge.guard.and(edge.error)
(I think).