8
7
import dk.aau.cs.TCTL.TCTLAbstractProperty;
9
8
import dk.aau.cs.TCTL.TCTLAtomicPropositionNode;
10
9
import dk.aau.cs.TCTL.TCTLEFNode;
11
import dk.aau.cs.petrinet.PipeTapnToAauTapnTransformer;
12
import dk.aau.cs.petrinet.TAPN;
13
import dk.aau.cs.petrinet.TAPNQuery;
14
import dk.aau.cs.petrinet.colors.ColoredPipeTapnToColoredAauTapnTransformer;
10
import dk.aau.cs.model.tapn.TAPNQuery;
11
import dk.aau.cs.model.tapn.TimedArcPetriNetNetwork;
15
12
import dk.aau.cs.translations.ReductionOption;
16
13
import dk.aau.cs.verification.ModelChecker;
17
14
import dk.aau.cs.verification.UPPAAL.VerifytaOptions;
19
public class KBoundAnalyzer
21
protected DataLayer appModel;
16
public class KBoundAnalyzer {
17
protected TimedArcPetriNetNetwork tapnNetwork;
24
20
private ModelChecker modelChecker;
25
21
private Messenger messenger;
27
public KBoundAnalyzer(DataLayer appModel, int k, ModelChecker modelChecker, Messenger messenger)
23
public KBoundAnalyzer(TimedArcPetriNetNetwork tapnNetwork, int k,
24
ModelChecker modelChecker, Messenger messenger) {
30
this.appModel = appModel;
26
this.tapnNetwork = tapnNetwork;
31
27
this.modelChecker = modelChecker;
32
28
this.messenger = messenger;
36
32
return new RunKBoundAnalysis(modelChecker, messenger);
41
TAPN model = convertModelToAAUTAPN(appModel);
42
TAPNQuery query = getBoundednessQuery(model.getNumberOfTokens());
35
public void analyze() {
36
TAPNQuery query = getBoundednessQuery();
43
37
VerifytaOptions options = verificationOptions();
45
39
RunKBoundAnalysis analyzer = getAnalyzer(modelChecker, messenger);
46
RunningVerificationDialog dialog = new RunningVerificationDialog(CreateGui.getApp());
40
RunningVerificationDialog dialog = new RunningVerificationDialog(CreateGui.getApp());
47
41
dialog.setupListeners(analyzer);
49
analyzer.execute(options, model, query);
43
analyzer.execute(options, tapnNetwork, query);
50
44
dialog.setVisible(true);
54
48
return new VerifytaOptions(TraceOption.NONE, SearchOption.BFS, false, ReductionOption.KBOUNDANALYSIS);
57
private TAPN convertModelToAAUTAPN(DataLayer appModel) {
58
PipeTapnToAauTapnTransformer transformer = appModel.isUsingColors() ? new ColoredPipeTapnToColoredAauTapnTransformer() : new PipeTapnToAauTapnTransformer();
62
model = transformer.getAAUTAPN(appModel, 0);
63
} catch (Exception e) {
69
protected TAPNQuery getBoundednessQuery(int tokensInModel) {
51
protected TAPNQuery getBoundednessQuery() {
70
52
TCTLAbstractProperty property = null;
72
property = new TCTLEFNode(
73
new TCTLAtomicPropositionNode("P_capacity", "=", 0)
77
return new TAPNQuery(property, k + 1 + tokensInModel);
54
property = new TCTLEFNode(new TCTLAtomicPropositionNode("_BOTTOM_", "=", 0));
56
return new TAPNQuery(property, k + 1);