diff --git a/src/main/java/de/tlc4b/TLC4B.java b/src/main/java/de/tlc4b/TLC4B.java index 9ce03d6c5def446b69bcb3935bd6c906630a43ea..025dccbcf1dc84f2002d2a96a9942308582f8c0c 100644 --- a/src/main/java/de/tlc4b/TLC4B.java +++ b/src/main/java/de/tlc4b/TLC4B.java @@ -71,24 +71,31 @@ public class TLC4B { } - private void printResults(TLCResults results, boolean createTraceFile) { - //options + // options System.out.println("Used Options"); System.out.println("| Number of workers: " + TLC4BGlobals.getWorkers()); System.out.println("| Invariants check: " + TLC4BGlobals.isInvariant()); - System.out.println("| Deadlock check: " + TLC4BGlobals.isDeadlockCheck()); + System.out.println("| Deadlock check: " + + TLC4BGlobals.isDeadlockCheck()); System.out.println("| Assertion check: " + TLC4BGlobals.isAssertion()); System.out.println("| Find Goal check: " + TLC4BGlobals.isGOAL()); - System.out.println("| LTL formulas check: " + TLC4BGlobals.isCheckLTL()); - System.out.println("| Partial invariant evaluation: " + TLC4BGlobals.isPartialInvariantEvaluation()); - System.out.println("| Lazy constants setup: " + !TLC4BGlobals.isForceTLCToEvalConstants()); - System.out.println("| Agressive well-definedness check: " + TLC4BGlobals.checkWelldefinedness()); - System.out.println("| Prob constant setup: " + TLC4BGlobals.isProBconstantsSetup()); - System.out.println("| Symmetry used: " + TLC4BGlobals.useSymmetry()); + System.out + .println("| LTL formulas check: " + TLC4BGlobals.isCheckLTL()); + System.out.println("| Partial invariant evaluation: " + + TLC4BGlobals.isPartialInvariantEvaluation()); + System.out.println("| Lazy constants setup: " + + !TLC4BGlobals.isForceTLCToEvalConstants()); + System.out.println("| Agressive well-definedness check: " + + TLC4BGlobals.checkWelldefinedness()); + System.out.println("| Prob constant setup: " + + TLC4BGlobals.isProBconstantsSetup()); + System.out.println("| Symmetry reduction: " + + TLC4BGlobals.useSymmetry()); System.out.print("| MIN Int: " + TLC4BGlobals.getMIN_INT()); System.out.print(" | MAX Int: " + TLC4BGlobals.getMAX_INT()); - System.out.println(" | Deferret set size: " + TLC4BGlobals.getDEFERRED_SET_SIZE()); + System.out.println(" | Standard deferret set size: " + + TLC4BGlobals.getDEFERRED_SET_SIZE()); System.out.println("--------------------------------"); System.out.println("Parsing time: " + StopWatch.getRunTime("Parsing") + " ms"); @@ -96,7 +103,8 @@ public class TLC4B { + " ms"); System.out.println("Model checking time: " + results.getModelCheckingTime() + " sec"); - //System.out.println("Number of workers: " + TLCGlobals.getNumWorkers()); + // System.out.println("Number of workers: " + + // TLCGlobals.getNumWorkers()); System.out.println("States analysed: " + results.getNumberOfDistinctStates()); System.out.println("Transitions fired: " @@ -162,6 +170,8 @@ public class TLC4B { TLC4BGlobals.setAssertionCheck(false); } else if (args[index].toLowerCase().equals("-wdcheck")) { TLC4BGlobals.setWelldefinednessCheck(true); + } else if (args[index].toLowerCase().equals("-symmetry")) { + TLC4BGlobals.setSymmetryUse(true); } else if (args[index].toLowerCase().equals("-tool")) { TLC4BGlobals.setTool(false); } else if (args[index].toLowerCase().equals("-tmp")) { diff --git a/src/main/java/de/tlc4b/analysis/Renamer.java b/src/main/java/de/tlc4b/analysis/Renamer.java index 410402e97e47822aec963e574c2982e6329ce381..4b397ecd55ea77a21aa5793bcb5a467758263610 100644 --- a/src/main/java/de/tlc4b/analysis/Renamer.java +++ b/src/main/java/de/tlc4b/analysis/Renamer.java @@ -67,6 +67,7 @@ public class Renamer extends DepthFirstAdapter { KEYWORDS.add("WF_"); KEYWORDS.add("WITH"); KEYWORDS.add("STATE"); + KEYWORDS.add("DEF"); KEYWORDS.add("Init"); KEYWORDS.add("Next"); diff --git a/src/main/java/de/tlc4b/analysis/UsedStandardModules.java b/src/main/java/de/tlc4b/analysis/UsedStandardModules.java index 68b521dda5b53d3817627dd146f2d51876b628d4..5c081db5301e16c0901a739f194e4bb161db3e65 100644 --- a/src/main/java/de/tlc4b/analysis/UsedStandardModules.java +++ b/src/main/java/de/tlc4b/analysis/UsedStandardModules.java @@ -132,6 +132,12 @@ public class UsedStandardModules extends DepthFirstAdapter { this.usedStandardModules = new HashSet<STANDARD_MODULES>(); this.typechecker = typechecker; + + + if (TLC4BGlobals.useSymmetry()) { + usedStandardModules.add(STANDARD_MODULES.TLC); + } + List<PDefinition> definitions = tlaModule.getAllDefinitions(); if (definitions != null) { for (PDefinition pDefinition : definitions) { diff --git a/src/main/java/de/tlc4b/prettyprint/TLAPrinter.java b/src/main/java/de/tlc4b/prettyprint/TLAPrinter.java index 2e93d96b142e7e0eb78f7e9ab7b01168494c1cd9..41bc5a9a8795102b740b2f93c2723c1c8fd7adee 100644 --- a/src/main/java/de/tlc4b/prettyprint/TLAPrinter.java +++ b/src/main/java/de/tlc4b/prettyprint/TLAPrinter.java @@ -1,6 +1,7 @@ package de.tlc4b.prettyprint; import java.util.ArrayList; +import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; @@ -98,11 +99,35 @@ public class TLAPrinter extends DepthFirstAdapter { printSpecFormula(); printLTLFormulas(); + printSymmetry(); + + tlaModuleString.append("===="); printConfig(); } + private void printSymmetry() { + + if(TLC4BGlobals.useSymmetry() && machineContext.getDeferredSets().size()>0){ + + tlaModuleString.append("Symmetry == "); + Collection<Node> values = machineContext.getDeferredSets().values(); + ArrayList<Node> array = new ArrayList<Node>(values); + for (int i = 0; i < array.size(); i++) { + Node node = array.get(i); + tlaModuleString.append("Permutations("); + node.apply(this); + tlaModuleString.append(")"); + if(i<array.size()-1){ + tlaModuleString.append(" \\cup "); + } + } + tlaModuleString.append("\n"); + //Symmetry == Permutations(Clients) \cup Permutations(Resources) + } + } + private void printSpecFormula() { if (this.configFile.isSpec()) { @@ -235,6 +260,11 @@ public class TLAPrinter extends DepthFirstAdapter { configFileString.append(assignments.get(i).getString(renamer)); } } + if(TLC4BGlobals.useSymmetry()&& machineContext.getDeferredSets().size()>0){ + configFileString.append("SYMMETRY Symmetry\n"); + } + + if (TLC4BGlobals.isPartialInvariantEvaluation()) { configFileString.append("CONSTANTS\n"); configFileString.append("Init_action = Init_action\n");