Skip to content

Commit 039c2a9

Browse files
add == true/false to trigger simplification
1 parent c151570 commit 039c2a9

1 file changed

Lines changed: 14 additions & 0 deletions

File tree

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import liquidjava.rj_language.ast.Enum;
1010
import liquidjava.rj_language.ast.Expression;
1111
import liquidjava.rj_language.ast.FunctionInvocation;
12+
import liquidjava.rj_language.ast.LiteralBoolean;
13+
import liquidjava.rj_language.ast.UnaryExpression;
1214
import liquidjava.rj_language.ast.Var;
1315

1416
public class VariableResolver {
@@ -40,6 +42,18 @@ public static Map<String, Expression> resolve(Expression exp) {
4042
* @param map
4143
*/
4244
private static void resolveRecursive(Expression exp, Map<String, Expression> map) {
45+
// Internal-var conjuncts assert truth: `#x` ⇒ `#x → true`, `!#x` ⇒ `#x → false`. Restricted to
46+
// internal vars so user-facing predicates like `x && x` still display as `x` instead of `true`.
47+
if (exp instanceof Var var && isInternal(var)) {
48+
map.putIfAbsent(var.getName(), new LiteralBoolean(true));
49+
return;
50+
}
51+
if (exp instanceof UnaryExpression unary && "!".equals(unary.getOp())
52+
&& unary.getExpression()instanceof Var inner && isInternal(inner)) {
53+
map.putIfAbsent(inner.getName(), new LiteralBoolean(false));
54+
return;
55+
}
56+
4357
if (!(exp instanceof BinaryExpression be))
4458
return;
4559

0 commit comments

Comments
 (0)