Skip to content

Cryptol primitives can't be made uninterpreted #1044

Open
@brianhuffman

Description

@brianhuffman

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    topics: saw-core namesIssues related to URI-based saw-core namestype: bugIssues reporting bugs or unexpected/unwanted behaviorusabilityAn issue that impedes efficient understanding and use

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions