Skip to content

Commit a487ea9

Browse files
committed
Refactoring
1 parent e486e28 commit a487ea9

6 files changed

Lines changed: 24 additions & 24 deletions

File tree

liquidjava-verifier/src/main/java/liquidjava/processor/SimplifiedVCImplication.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ public VCImplication getOrigin() {
2020
return origin;
2121
}
2222

23+
@Override
24+
public Predicate getOriginRefinement() {
25+
return origin.getRefinement().clone();
26+
}
27+
2328
@Override
2429
public VCImplication copyWithRefinement(Predicate refinement) {
2530
return new SimplifiedVCImplication(this, refinement, origin);

liquidjava-verifier/src/main/java/liquidjava/processor/VCImplication.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ public VCImplication(VCImplication implication, Predicate ref) {
3131
this.refinement = ref;
3232
}
3333

34+
public Predicate getOriginRefinement() {
35+
return refinement.clone();
36+
}
37+
3438
public VCImplication copyWithRefinement(Predicate refinement) {
3539
return new VCImplication(this, refinement);
3640
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public class VCSimplification {
1010
/**
1111
* Applies all available simplification steps to a VC chain
1212
*/
13-
public static VCImplication simplify(VCImplication implication) {
13+
public static VCImplication simplifyToFixedPoint(VCImplication implication) {
1414
if (implication == null)
1515
return null;
1616

@@ -32,7 +32,7 @@ public static VCImplication simplifyOnce(VCImplication implication) {
3232
return null;
3333

3434
// first try to apply substitution, then folding
35-
VCImplication substituted = VCSubstitution.applyOnce(implication);
35+
VCImplication substituted = VCSubstitution.apply(implication);
3636
if (!implication.equals(substituted))
3737
return substituted;
3838

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

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ private record Substitution(VCImplication node, Expression replacement) {
2525
/**
2626
* Applies one substitution in a VC chain
2727
*/
28-
public static VCImplication applyOnce(VCImplication implication) {
28+
public static VCImplication apply(VCImplication implication) {
2929
if (implication == null)
3030
return null;
3131

@@ -65,19 +65,10 @@ private static VCImplication substituteNode(VCImplication implication, VCImplica
6565
return implication.copyWithRefinement(new Predicate(exp));
6666

6767
Expression substituted = exp.substitute(new Var(node.getName()), replacement.clone());
68-
VCImplication origin = new VCImplication(node.getName(), node.getType(), origin(implication));
68+
VCImplication origin = new VCImplication(node.getName(), node.getType(), implication.getOriginRefinement());
6969
return new SimplifiedVCImplication(implication, new Predicate(substituted), origin);
7070
}
7171

72-
/**
73-
* Uses the earliest original predicate available when simplifying an already-simplified node
74-
*/
75-
private static Predicate origin(VCImplication implication) {
76-
if (implication instanceof SimplifiedVCImplication simplified)
77-
return simplified.getOrigin().getRefinement().clone();
78-
return implication.getRefinement().clone();
79-
}
80-
8172
/**
8273
* Finds the first substitution candidate in the VC chain
8374
*/

liquidjava-verifier/src/test/java/liquidjava/rj_language/opt/VCSimplificationPropertyBasedTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public void eachSimplificationStepPreservesVcSemantics(@From(VCImplicationGenera
2828
VCImplication current = vc;
2929

3030
for (int step = 0; step < VCImplicationGenerator.BINDERS.length; step++) {
31-
VCImplication simplified = VCSimplification.simplify(current);
31+
VCImplication simplified = VCSimplification.simplifyToFixedPoint(current);
3232
if (current.equals(simplified))
3333
break;
3434

liquidjava-verifier/src/test/java/liquidjava/rj_language/opt/VCSubstitutionTest.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@ class VCSubstitutionTest {
1212

1313
@Test
1414
void applyOnceReturnsNullForNullImplication() {
15-
assertNull(VCSubstitution.applyOnce(null));
15+
assertNull(VCSubstitution.apply(null));
1616
}
1717

1818
@Test
1919
void substitutesBinderEqualityIntoWholeChain() {
2020
VCImplication implication = vc("∀x:int. x == 3", "x > 0");
2121

22-
VCImplication result = VCSubstitution.applyOnce(implication);
22+
VCImplication result = VCSubstitution.apply(implication);
2323

2424
assertSimplifiedVC(result, simplified("3 > 0", "∀x:int. x > 0"));
2525
}
@@ -28,7 +28,7 @@ void substitutesBinderEqualityIntoWholeChain() {
2828
void substitutesReverseBinderEquality() {
2929
VCImplication implication = vc("∀x:int. 3 == x", "x > 0");
3030

31-
VCImplication result = VCSubstitution.applyOnce(implication);
31+
VCImplication result = VCSubstitution.apply(implication);
3232

3333
assertSimplifiedVC(result, simplified("3 > 0", "∀x:int. x > 0"));
3434
}
@@ -37,7 +37,7 @@ void substitutesReverseBinderEquality() {
3737
void substitutesCompoundKnownValue() {
3838
VCImplication implication = vc("∀x:int. x == y + 1", "x > y");
3939

40-
VCImplication result = VCSubstitution.applyOnce(implication);
40+
VCImplication result = VCSubstitution.apply(implication);
4141

4242
assertSimplifiedVC(result, simplified("y + 1 > y", "∀x:int. x > y"));
4343
}
@@ -46,7 +46,7 @@ void substitutesCompoundKnownValue() {
4646
void usesFirstSubstitutionFoundInChain() {
4747
VCImplication implication = vc("∀x:int. x > 0", "∀y:int. y == 4", "x + y > 0");
4848

49-
VCImplication result = VCSubstitution.applyOnce(implication);
49+
VCImplication result = VCSubstitution.apply(implication);
5050

5151
assertVC(result, "x > 0", "x + 4 > 0");
5252
assertEquals(VCImplication.class, result.getClass());
@@ -57,7 +57,7 @@ void usesFirstSubstitutionFoundInChain() {
5757
void substitutesInnerKnownValueAcrossNestedImplications() {
5858
VCImplication implication = vc("∀x:int. true", "∀y:int. y == 1", "∀z:int. z > y", "y + z > 0");
5959

60-
VCImplication result = VCSubstitution.applyOnce(implication);
60+
VCImplication result = VCSubstitution.apply(implication);
6161

6262
assertVC(result, "true", "z > 1", "1 + z > 0");
6363
assertEquals(VCImplication.class, result.getClass());
@@ -69,7 +69,7 @@ void substitutesInnerKnownValueAcrossNestedImplications() {
6969
void substitutesOuterKnownValueIntoNestedBinderRefinements() {
7070
VCImplication implication = vc("∀x:int. x == 3", "∀y:int. y == x + 1", "y > x");
7171

72-
VCImplication result = VCSubstitution.applyOnce(implication);
72+
VCImplication result = VCSubstitution.apply(implication);
7373

7474
assertSimplifiedVC(result, simplified("y == 3 + 1", "∀x:int. y == x + 1"),
7575
simplified("y > 3", "∀x:int. y > x"));
@@ -79,7 +79,7 @@ void substitutesOuterKnownValueIntoNestedBinderRefinements() {
7979
void ignoresRecursiveBinderEquality() {
8080
VCImplication implication = vc("∀x:int. x == x + 1", "x > 0");
8181

82-
VCImplication result = VCSubstitution.applyOnce(implication);
82+
VCImplication result = VCSubstitution.apply(implication);
8383

8484
assertNotSame(implication, result);
8585
assertVC(result, "x == x + 1", "x > 0");
@@ -89,7 +89,7 @@ void ignoresRecursiveBinderEquality() {
8989
void ignoresNonEqualityBinderRefinement() {
9090
VCImplication implication = vc("∀x:int. x > 3", "x > 0");
9191

92-
VCImplication result = VCSubstitution.applyOnce(implication);
92+
VCImplication result = VCSubstitution.apply(implication);
9393

9494
assertNotSame(implication, result);
9595
assertVC(result, "x > 3", "x > 0");
@@ -99,7 +99,7 @@ void ignoresNonEqualityBinderRefinement() {
9999
void ignoresEqualityWithoutBinder() {
100100
VCImplication implication = vc("x == 3", "x > 0");
101101

102-
VCImplication result = VCSubstitution.applyOnce(implication);
102+
VCImplication result = VCSubstitution.apply(implication);
103103

104104
assertVC(result, "x == 3", "x > 0");
105105
}

0 commit comments

Comments
 (0)