Open alex28sh opened 2 months ago
Hi!
I can maybe have a closer look tonight, but in general, Forall-Exists properties are hard to prove in SMT-based verifiers, because essentially the prover has to automatically find some value x
for each d_2_j
s.t. the property holds.
One way to make it easier is to is to give that value to the prover explicitly. So you could maintain some additional sequence or map of values that contains, for each d_2_j
, the relevant x
, and then rewrite the existential using that value.
Actually, I solved this issue by wrapping Exists(int, lambda x: x >= 0 and x < len(filtered) and filtered[x] == d_2j) into a separate pure function
Hello, I'm having issues with invariants verification, when append operations are present. For example, I cannot verify 'Invariant(Forall(int, lambda d_2j: (Implies(((0) <= (d_2j)) and ((d_2j) < (d_1i)) and starts__with(xs[d_2j], p, 0), Exists(int, lambda x: x >= 0 and x < len(filtered) and filtered[x] == d_2j)), [[xs[d_2j]]])))' How can such issues be resolved?