From b782510f8d133a2e7d88680ebd4eb4e291812cb7 Mon Sep 17 00:00:00 2001 From: hansen <dominik_hansen@web.de> Date: Thu, 17 Sep 2015 09:49:48 +0200 Subject: [PATCH] Adapted the translation of the exponentiation --- .../de/tlc4b/analysis/StandardMadules.java | 1 + .../tlc4b/analysis/UsedStandardModules.java | 7 ++-- .../java/de/tlc4b/prettyprint/TLAPrinter.java | 38 +++++++++---------- .../resources/standardModules/BBuiltIns.tla | 28 +++++++++++--- 4 files changed, 47 insertions(+), 27 deletions(-) diff --git a/src/main/java/de/tlc4b/analysis/StandardMadules.java b/src/main/java/de/tlc4b/analysis/StandardMadules.java index 3d2d5b6..76ef31d 100644 --- a/src/main/java/de/tlc4b/analysis/StandardMadules.java +++ b/src/main/java/de/tlc4b/analysis/StandardMadules.java @@ -198,6 +198,7 @@ public final class StandardMadules { public static final String POW_1 = "Pow1"; public static final String FINITE_SUBSETS = "Fin"; public static final String FINITE_1_SUBSETS = "Fin1"; + public static final String B_POWER_Of = "BPowerOf"; public static final String B_MODULO = "BModulo"; public static final String B_DIVISION = "BDivision"; diff --git a/src/main/java/de/tlc4b/analysis/UsedStandardModules.java b/src/main/java/de/tlc4b/analysis/UsedStandardModules.java index 10d65ec..3eaa312 100644 --- a/src/main/java/de/tlc4b/analysis/UsedStandardModules.java +++ b/src/main/java/de/tlc4b/analysis/UsedStandardModules.java @@ -275,9 +275,6 @@ public class UsedStandardModules extends DepthFirstAdapter { extendedStandardModules.add(STANDARD_MODULES.Naturals); } - public void inAPowerOfExpression(APowerOfExpression node) { - extendedStandardModules.add(STANDARD_MODULES.Naturals); - } public void inAMinusOrSetSubtractExpression( AMinusOrSetSubtractExpression node) { @@ -327,6 +324,10 @@ public class UsedStandardModules extends DepthFirstAdapter { * BBuiltIns */ + public void inAPowerOfExpression(APowerOfExpression node) { + extendedStandardModules.add(STANDARD_MODULES.BBuiltIns); + } + public void inAMinExpression(AMinExpression node) { extendedStandardModules.add(STANDARD_MODULES.BBuiltIns); } diff --git a/src/main/java/de/tlc4b/prettyprint/TLAPrinter.java b/src/main/java/de/tlc4b/prettyprint/TLAPrinter.java index 3afd929..b5f74dd 100644 --- a/src/main/java/de/tlc4b/prettyprint/TLAPrinter.java +++ b/src/main/java/de/tlc4b/prettyprint/TLAPrinter.java @@ -458,25 +458,24 @@ public class TLAPrinter extends DepthFirstAdapter { ALabelPredicate label = (ALabelPredicate) assertion; name = label.getName().getText(); } - - if(name == null){ + + if (name == null) { name = "Assertion" + (i + 1); } - if (tlaModule.hasInitPredicate()) { - moduleStringAppend(name); - moduleStringAppend(" == "); + moduleStringAppend(name); + moduleStringAppend(" == "); } else { moduleStringAppend("ASSUME "); - moduleStringAppend(name); - moduleStringAppend(" == "); + moduleStringAppend(name); + moduleStringAppend(" == "); } - //assertionMode = true; - //assertionName = name; - //parameterCounter = 0; + // assertionMode = true; + // assertionName = name; + // parameterCounter = 0; assertion.apply(this); - //assertionMode = false; + // assertionMode = false; moduleStringAppend("\n"); } } @@ -1279,7 +1278,7 @@ public class TLAPrinter extends DepthFirstAdapter { moduleStringAppend("("); moduleStringAppend("TLCSet("); - moduleStringAppend(""+start); + moduleStringAppend("" + start); moduleStringAppend(", TRUE) /\\ "); for (int i = start; i < end; i++) { moduleStringAppend("TLCSet("); @@ -1312,7 +1311,7 @@ public class TLAPrinter extends DepthFirstAdapter { } assertionMode = false; - + moduleStringAppend(" IF "); node.getImplication().apply(this); moduleStringAppend(" THEN TRUE "); @@ -1323,14 +1322,14 @@ public class TLAPrinter extends DepthFirstAdapter { moduleStringAppend("TLCGet("); moduleStringAppend("" + (i + 1)); moduleStringAppend(")"); - if(i<copy.size()-1){ + if (i < copy.size() - 1) { moduleStringAppend(", "); } - + } moduleStringAppend(" >>) "); moduleStringAppend("/\\ TLCSet("); - moduleStringAppend(""+start); + moduleStringAppend("" + start); moduleStringAppend(", FALSE)"); moduleStringAppend(")"); moduleStringAppend(" /\\ TLCGet("); @@ -1648,11 +1647,12 @@ public class TLAPrinter extends DepthFirstAdapter { @Override public void caseAPowerOfExpression(APowerOfExpression node) { - inAPowerOfExpression(node); + moduleStringAppend(B_POWER_Of); + moduleStringAppend("("); node.getLeft().apply(this); - moduleStringAppend(" ^ "); + moduleStringAppend(", "); node.getRight().apply(this); - outAPowerOfExpression(node); + moduleStringAppend(")"); } @Override diff --git a/src/main/resources/standardModules/BBuiltIns.tla b/src/main/resources/standardModules/BBuiltIns.tla index 392ca03..688ba0f 100644 --- a/src/main/resources/standardModules/BBuiltIns.tla +++ b/src/main/resources/standardModules/BBuiltIns.tla @@ -12,6 +12,7 @@ succ[x \in Int] == x + 1 pred[x \in Int] == x - 1 \* The predecessor function +BPowerOf(a,b) == IF a = 0 /\ b = 0 THEN 1 ELSE a ^ b BDivision(a,b) == CASE a >= 0 /\ b > 0 -> a \div b @@ -19,21 +20,38 @@ BDivision(a,b) == [] a >= 0 /\ b < 0 -> -(a \div (-b)) [] a < 0 /\ b < 0 -> (-a) \div (-b) [] b = 0 -> Assert(FALSE, "Error: Division by zero.") + [] OTHER -> Assert(FALSE, "Error: Modulo Operator.") \* Rules from AtelierB reference manual (see page 40) BModulo(a,b) == - IF a > 0 /\ b > 0 + IF a >= 0 /\ b > 0 THEN a % b ELSE Assert(FALSE, "Error: Both operands of the modulo operator must be natural numbers.") RECURSIVE Sigma(_) -Sigma(S) == LET e == CHOOSE e \in S: TRUE - IN IF S = {} THEN 0 ELSE e[2] + Sigma(S \ {e}) +Sigma(S) == + IF S = {} THEN 0 + ELSE + LET + e == CHOOSE e \in S: TRUE + newS == S \ {e} + IN + IF newS = {} + THEN e[2] + ELSE e[2] + Sigma(S \ {e}) \* The sum of all second components of pairs which are elements of S RECURSIVE Pi(_) -Pi(S) == LET e == CHOOSE e \in S: TRUE - IN IF S = {} THEN 0 ELSE e[2] + Pi(S \ {e}) +Pi(S) == + IF S = {} THEN 0 + ELSE + LET + e == CHOOSE e \in S: TRUE + newS == S \ {e} + IN + IF newS = {} + THEN e[2] + ELSE e[2] * Pi(S \ {e}) \* The product of all second components of pairs which are elements of S Pow1(S) == (SUBSET S) \ {{}} -- GitLab