* The type of places
*/
public class Petri2AutomatonCoveringRelation oldMarking = mGetMarking.apply(oldState);
final Marking newMarking = mGetMarking.apply(newState);
// TODO In the future, the second disjunct below could be replaced by a strictly weaker condition:
// A (cached) check whether any accepting place can be reached from p.
return newMarking.stream().allMatch(p -> oldMarking.contains(p) || (!canLeave(p) && !mPetriNet.isAccepting(p)));
}
private boolean canLeave(final P place) {
return !mPetriNet.getSuccessors(place).isEmpty();
}
}
{
private final IPetriNet> mGetMarking;
public Petri2AutomatonCoveringRelation(final IPetriNet> getMarking) {
mPetriNet = petriNet;
mGetMarking = Objects.requireNonNull(getMarking);
}
@Override
public boolean covers(final S oldState, final S newState) {
final Marking