Skip to content

Commit cd52d41

Browse files
committed
Simple Approach
1 parent 52b9225 commit cd52d41

9 files changed

Lines changed: 24 additions & 193 deletions

File tree

liquidjava-verifier/src/main/java/liquidjava/rj_language/Predicate.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import liquidjava.rj_language.ast.UnaryExpression;
2323
import liquidjava.rj_language.ast.Var;
2424
import liquidjava.rj_language.opt.ExpressionSimplifier;
25-
import liquidjava.rj_language.opt.derivation_node.DerivationNode;
2625
import liquidjava.rj_language.parsing.ParsingException;
2726
import liquidjava.rj_language.parsing.RefinementsParser;
2827
import liquidjava.utils.Utils;
@@ -215,9 +214,7 @@ public Expression getExpression() {
215214
}
216215

217216
public Expression simplify() {
218-
List<Expression> steps = ExpressionSimplifier.simplify(exp.clone());
219-
steps.forEach(System.out::println);
220-
return steps.isEmpty() ? exp : steps.get(steps.size() - 1);
217+
return ExpressionSimplifier.simplify(exp.clone());
221218
}
222219

223220
public static Predicate createConjunction(Predicate c1, Predicate c2) {

liquidjava-verifier/src/main/java/liquidjava/rj_language/opt/ConstantPropagation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
public class ConstantPropagation {
88

99
public static Expression propagate(Expression exp) {
10-
Map<String, Expression> substitutions = AssertionExtractor.extract(exp);
10+
Map<String, Expression> substitutions = VariableExtractor.extract(exp);
1111
return propagateRecursive(exp, substitutions);
1212
}
1313

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,46 @@
11
package liquidjava.rj_language.opt;
22

3-
import java.util.ArrayList;
4-
import java.util.List;
53
import liquidjava.rj_language.ast.Expression;
64

75
public class ExpressionSimplifier {
86

9-
public static List<Expression> simplify(Expression exp) {
10-
ArrayList<Expression> derivationSteps = new ArrayList<>();
11-
Expression current = exp.clone();
7+
public static Expression simplify(Expression exp) {
8+
System.out.println(exp);
9+
Expression current = simplifyExp(exp.clone());
10+
System.out.println(current);
1211
boolean changed = true;
1312

14-
derivationSteps.add(current);
1513
while (changed) {
1614
changed = false;
1715

18-
Expression simplified = LogicSimplifier.simplify(current.clone());
19-
if (!simplified.equals(current)) {
20-
// derivationSteps.add(simplified);
21-
current = simplified;
22-
changed = true;
23-
continue;
24-
}
25-
2616
Expression propagated = ConstantPropagation.propagate(current.clone());
2717
if (!propagated.equals(current)) {
28-
// derivationSteps.add(propagated);
29-
current = propagated;
18+
current = simplifyExp(propagated);
19+
System.out.println(current);
3020
changed = true;
3121
continue;
3222
}
3323

3424
Expression folded = ConstantFolding.fold(current.clone());
3525
if (!folded.equals(current)) {
36-
derivationSteps.add(folded);
37-
current = folded;
26+
current = simplifyExp(folded);
27+
System.out.println(current);
3828
changed = true;
3929
continue;
4030
}
4131
}
42-
return derivationSteps;
32+
return current;
33+
}
34+
35+
private static Expression simplifyExp(Expression exp) {
36+
Expression current = exp.clone();
37+
while (true) {
38+
Expression simplified = LogicSimplifier.simplify(current.clone());
39+
if (simplified.equals(current)) {
40+
break;
41+
}
42+
current = simplified;
43+
}
44+
return current;
4345
}
4446
}

liquidjava-verifier/src/main/java/liquidjava/rj_language/opt/AssertionExtractor.java renamed to liquidjava-verifier/src/main/java/liquidjava/rj_language/opt/VariableExtractor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import liquidjava.rj_language.ast.LiteralReal;
1111
import liquidjava.rj_language.ast.Var;
1212

13-
public class AssertionExtractor {
13+
public class VariableExtractor {
1414

1515
public static Map<String, Expression> extract(Expression exp) {
1616
Map<String, Expression> assertions = new HashMap<>();

liquidjava-verifier/src/main/java/liquidjava/rj_language/opt/derivation_node/BinaryDerivationNode.java

Lines changed: 0 additions & 43 deletions
This file was deleted.

liquidjava-verifier/src/main/java/liquidjava/rj_language/opt/derivation_node/DerivationNode.java

Lines changed: 0 additions & 49 deletions
This file was deleted.

liquidjava-verifier/src/main/java/liquidjava/rj_language/opt/derivation_node/UnaryDerivationNode.java

Lines changed: 0 additions & 33 deletions
This file was deleted.

liquidjava-verifier/src/main/java/liquidjava/rj_language/opt/derivation_node/ValDerivationNode.java

Lines changed: 0 additions & 17 deletions
This file was deleted.

liquidjava-verifier/src/main/java/liquidjava/rj_language/opt/derivation_node/VarDerivationNode.java

Lines changed: 0 additions & 26 deletions
This file was deleted.

0 commit comments

Comments
 (0)