Open
Description
Usually constants translated from Cryptol are eligible to be made uninterpreted with tactics like unint_z3
. But it doesn't work if the constant is a cryptol primitive. For example:
sawscript> prove (unint_z3 ["complement"]) {{ \(x:[8]) y -> x == y ==> complement x == complement y }}
Stack trace:
"prove" (<stdin>:1:1-1:6):
"unint_z3" (<stdin>:1:8-1:16):
Could not resolve name: "complement"
The deeper problem is that the name "complement
" is not registered under its proper name in saw-core, as other cryptol constants are. If we print the term, we can see that there is no trace of the original name:
sawscript> print_term {{ complement }}
[02:02:56.016] ecCompl