Skip to content

Commit 4eb7d04

Browse files
authored
Merge pull request #3923 from tautschnig/simplify-forall
Rewrite !forall expressions in the simplifier [depends-on: #3922]
2 parents 9244f3f + e5e01da commit 4eb7d04

File tree

4 files changed

+36
-0
lines changed

4 files changed

+36
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
int main()
2+
{
3+
__CPROVER_assert(
4+
!__CPROVER_forall {
5+
int i;
6+
i >= 0
7+
},
8+
"simplify");
9+
10+
return 0;
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE
2+
main.c
3+
--program-only
4+
ASSERT\(exists \{ signed int i!0#0; !\(i!0#0 >= 0\) \}\)$
5+
^EXIT=0$
6+
^SIGNAL=0$
7+
--
8+
^warning: ignoring
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
KNOWNBUG
2+
main.c
3+
4+
^VERIFICATION SUCCESSFUL$
5+
^EXIT=0$
6+
^SIGNAL=0$
7+
--
8+
^warning: ignoring

src/util/simplify_expr_boolean.cpp

+9
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,15 @@ bool simplify_exprt::simplify_not(exprt &expr)
222222
expr = rewritten_op;
223223
return false;
224224
}
225+
else if(op.id() == ID_forall) // !(forall: a) <-> exists: not a
226+
{
227+
auto const &op_as_forall = to_forall_expr(op);
228+
exists_exprt rewritten_op(
229+
op_as_forall.symbol(), not_exprt(op_as_forall.where()));
230+
simplify_node(rewritten_op.where());
231+
expr = rewritten_op;
232+
return false;
233+
}
225234

226235
return true;
227236
}

0 commit comments

Comments
 (0)