You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Related to the CEC ask, long ago I used CEC and SAW to prove C code was equivalent before and after a change. This was possible because I could mangle the symbols after LLVM IR generation completed for compilation of each artifact pre and post compilation. Kani's use of Rust's MIR means the same solution isn't useable, but notionally there isn't much difference. Do you see obvious issues with using Kani to a similar end?
Hi @TomMD. Kani can be used for verifying the equivalence of two Rust functions. For example if you functions f1 and f2 that take, say an i32 and a char and return a bool:
fnf1(i:i32,c:char) -> bool
then you can write a harness to check their equivalence:
If the assertion passes, then f1 and f2 produce the same output value for all inputs.
Is this what you're looking for?
Regarding caching, if the source files didn't change, Kani won't recompile them. Perhaps saving the build artifacts across CI runs could help with the runtime?
As for lack of CEC in particular, yes we can get functional equivalence in another way but it is slower for many interesting cases. IIRC (and I might not), it was CEC that could reasonably prove the new and old libsodium SHA512 function's equivalent while naive SAT embedding could not in a timely manner. It seems there is no support for ABC and thus the answer is 'no' in this case. Thanks.
I'm looking for some sort of CEC (like ABC's) and caching behavior to make CI PR runs cheap.
Should I dig and write documentation as I discover or are these features simply not there at present?
The text was updated successfully, but these errors were encountered: