From 69b6f094e51dbec695e9f087390240e6b5338abe Mon Sep 17 00:00:00 2001 From: Joachim Klein Date: Fri, 12 Oct 2018 14:25:22 +0200 Subject: [PATCH] imported patch MT-states-of-interest.patch --- .../explicit/BasicModelTransformation.java | 27 +++++++++++++++++-- prism/src/explicit/ModelTransformation.java | 7 +++++ .../explicit/ModelTransformationNested.java | 8 ++++++ prism/src/explicit/Product.java | 17 +++++++++++- 4 files changed, 56 insertions(+), 3 deletions(-) diff --git a/prism/src/explicit/BasicModelTransformation.java b/prism/src/explicit/BasicModelTransformation.java index 0189c1ce..f018e813 100644 --- a/prism/src/explicit/BasicModelTransformation.java +++ b/prism/src/explicit/BasicModelTransformation.java @@ -49,6 +49,7 @@ public class BasicModelTransformation implem protected final OM originalModel; protected final TM transformedModel; + protected BitSet transformedStatesOfInterest; protected final IntFunction mapToTransformedModel; protected final int numberOfStates; @@ -56,19 +57,26 @@ public class BasicModelTransformation implem /** Constructor for a model transformation that maps states one-on-one. */ public BasicModelTransformation(final OM originalModel, final TM transformedModel) { - this(originalModel, transformedModel, IDENTITY); + this(originalModel, transformedModel, null); + } + + public BasicModelTransformation(final OM originalModel, final TM transformedModel, final BitSet transformedStatesOfInterest) + { + this(originalModel, transformedModel, transformedStatesOfInterest, IDENTITY); } /** * Constructor for a model transformation where the state mapping is given * by a function */ - public BasicModelTransformation(final OM originalModel, final TM transformedModel, final IntFunction mapToTransformedModel) + public BasicModelTransformation(final OM originalModel, final TM transformedModel, final BitSet transformedStatesOfInterest, final IntFunction mapToTransformedModel) { this.originalModel = originalModel; this.transformedModel = transformedModel; this.numberOfStates = originalModel.getNumStates(); this.mapToTransformedModel = mapToTransformedModel; + setTransformedStatesOfInterest(transformedStatesOfInterest); + } @Override @@ -83,6 +91,21 @@ public class BasicModelTransformation implem return transformedModel; } + @Override + public BitSet getTransformedStatesOfInterest() + { + return transformedStatesOfInterest; + } + + public BasicModelTransformation setTransformedStatesOfInterest(BitSet transformedStatesOfInterest) + { + if (transformedStatesOfInterest != null && transformedStatesOfInterest.length() > transformedModel.getNumStates()) { + throw new IndexOutOfBoundsException("State set must be subset of transformed model's state space"); + } + this.transformedStatesOfInterest = transformedStatesOfInterest; + return this; + } + @Override public StateValues projectToOriginalModel(final StateValues sv) throws PrismException { diff --git a/prism/src/explicit/ModelTransformation.java b/prism/src/explicit/ModelTransformation.java index 4e25535b..8a885b82 100644 --- a/prism/src/explicit/ModelTransformation.java +++ b/prism/src/explicit/ModelTransformation.java @@ -26,6 +26,8 @@ package explicit; +import java.util.BitSet; + import prism.PrismException; /** @@ -46,4 +48,9 @@ public interface ModelTransformation * The mapping between product states and the constituent parts is * specified via the (abstract) functions getModelState() and getAutomatonState(). + *
+ * By default it is assumed that each initial state in the product corresponds + * to exactly one lifted state of interest in the original model, + * allowing a mapping between product and original model state values. + * If this assumption is not correct, overload {@code projectToOriginalModel} and + * {@code getTransformedStatesOfInterest}. * * @param The type of the product model, e.g, DTMC, MDP, ... */ @@ -176,4 +182,13 @@ public abstract class Product implements ModelTransformation