Overview
In the UCLID5-based verification workflow described for pipelined Y86-64 microprocessors, an uninterpreted function may have multiple arguments, each with its own type, and may return a value of another type. The report gives branch-decision logic as an example: whether a branch should be taken is modeled as an uninterpreted function returning a Boolean value, with arguments including an enumerated function-code type and an uninterpreted condition-code type.
Role in modeling abstraction
The report frames these typed modeling constructs as part of the abstraction choices available when constructing a formal model. It states a general modeling rule: use the most abstract model that still captures the correctness-relevant properties of the system. In this setting, uninterpreted functions can support abstraction by representing behavior such as branch-condition evaluation without requiring all implementation details to be expanded in the model.
Use in UCLID5 verification
Given a model and verification script, UCLID5 generates verification conditions as formulas in logics supporting the theories used by the model. These formulas are typically negations of the properties being verified, and UCLID5 invokes an SMT solver to check them. In the cited work, UCLID5 used the Z3 SMT solver.
When the SMT solver finds such a formula satisfiable, it provides concrete values for all data elements appearing in the formula, including uninterpreted functions. UCLID5 can then use those values to produce a counterexample: a sequence of model actions that violates a verification condition. The report notes that such counterexamples may indicate a real design error, an inaccurate or overly abstract model, or an incorrectly stated verification condition.
Verification outcomes
The cited UCLID5 workflow distinguishes three SMT-solver outcomes:
- Unsatisfiable: because the checked formula is usually the negation of the property, unsatisfiability indicates that the desired verification condition holds.
- Satisfiable: concrete values, including for uninterpreted functions, are produced and may lead to a counterexample.
- Indeterminate: the solver cannot find a satisfying solution but also cannot prove unsatisfiability, often suggesting that the model is too complex or requires reasoning beyond the solver's capability.